Hive如何加载GBK编码的数据库 (hive加载gbk数据库)

在使用Hive进行数据处理的过程中,常常会遇到需要加载GBK编码的数据库的情况。由于Hive默认使用的是UTF-8编码,因此需要一些额外的步骤来进行GBK编码的数据库加载。本文将介绍。

一、创建GBK编码的数据库

在Hive中创建一个GBK编码的数据库有两种方法:通过Hive的CLI命令行和通过Hue的Web UI界面。

1. 通过Hive的CLI命令行

步骤如下:

1) 打开Hive的CLI命令行

2) 输入以下命令创建一个GBK编码的数据库:

CREATE DATABASE dbname CHARACTER SET gbk;

其中,dbname为要创建的数据库名称。

3) 可以使用以下命令查看所有数据库的字符集设置:

SHOW DATABASES;

2. 通过Hue的Web UI界面

步骤如下:

1) 打开Hue的Web UI界面

2) 在左侧导航栏中选择“Hive”菜单

3) 在页面上方的菜单栏选择“查询”选项卡

4) 输入以下命令创建一个GBK编码的数据库:

CREATE DATABASE dbname CHARACTER SET gbk;

其中,dbname为要创建的数据库名称。

5) 可以使用以下命令查看所有数据库的字符集设置:

SHOW DATABASES;

二、配置Hive支持GBK编码

在Hive默认情况下,使用UTF-8编码进行数据处理。如果需要支持GBK编码,需要进行一些额外的配置。

1. 修改Hive配置文件

打开Hive的配置文件hive-site.xml,添加以下配置:

hive.input.format

org.apache.hadoop.hive.ql.io.HiveInputFormat

use the correct input format

hive.default.fileformat

TextFile

default file format

mapred.input.dir.recursive

true

Recursively read files in input directory

mapred.output.compress

false

Do not compress output data

mapred.output.compress.codec

org.apache.hadoop.io.compress.DefaultCodec

Use the default compression codec

io.file.buffer.size

131072

Set file buffer size in bytes

hive.mapred.supports.subdirectories

true

Let input/output dirs be recursively scanned

hive.mapred.supports.label.multiple.inputs

true

Support multiple inputs with different formats for a given job

2. 复制GBK编码的字符集库到Hive的lib目录

在GBK编码的系统中,可以通过以下命令复制GBK编码的字符集库到Hive的lib目录:

cp /usr/share/java/mysql-connector-java-5.1.45.jar /usr/local/hive/lib/

其中,mysql-connector-java-5.1.45.jar为要复制的字符集库文件名。

三、使用Hive加载GBK编码的数据

1. 创建Hive表

使用以下命令创建一个Hive表:

CREATE TABLE test (

id INT,

name STRING

)

ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.OpenCSVSerde’

WITH SERDEPROPERTIES (

“separatorChar” = “,”,

“quoteChar” = “\’”,

“escapeChar” = “\\”

)

STORED AS TEXTFILE;

其中,test为表名称。

2. 加载GBK编码的数据

使用以下命令加载GBK编码的数据到Hive表中:

LOAD DATA LOCAL INPATH ‘/path/to/gbk_data.csv’ INTO TABLE test;

其中,/path/to/gbk_data.csv为要加载数据的文件路径。

3. 查看数据

可以使用以下命令查询加载的数据:

SELECT * FROM test;

四、

本文介绍了如何在Hive中加载GBK编码的数据库。需要注意的是,在Hive中对GBK编码的支持需要进行一些额外的配置,包括修改Hive配置文件和复制字符集库文件到Hive的lib目录。在加载GBK编码的数据时,需要使用LOAD DATA命令进行加载。

相关问题拓展阅读:

  • windows下怎么用python连接hive数据库

windows下怎么用python连接hive数据库

由于版本的不同,Python 连接 Hive 的方式也就不一样。

在网上搜索关键字 python hive 的时候可以找誉察到一些解决方案。大部分是这弯毕样的,首先把hive 根目录埋虚芹下的$HIVE_HOME/lib/py拷贝到 python 的库中,也就是 site-package 中,或者干脆把新写的 python 代码和拷贝的 py 库放在同一个目录下,然后用这个目录下提供的 thrift 接口调用。示例也是非常简单的。类似这样:

import sys

from hive_service import ThriftHive

from hive_service.ttypes import HiveServerException

from thrift import Thrift

from thrift.transport import TSocket

from thrift.transport import TTransport

from thrift.protocol import TBinaryProtocol

def hiveExe(sql):

try:

transport = TSocket.TSocket(‘127.0.0.1’, 10000)

transport = TTransport.TBufferedTransport(transport)

protocol = TBinaryProtocol.TBinaryProtocol(transport)

client = ThriftHive.Client(protocol)

transport.open()

client.execute(sql)

print “The return value is : ”

print client.fetchAll()

print “…………”

transport.close()

except Thrift.TException, tx:

print ‘%s’ % (tx.message)

if __name__ == ‘__main__’:

hiveExe(“show tables”)

或者是这样的:

#!/usr/bin/env python

import sys

from hive import ThriftHive

from hive.ttypes import HiveServerException

from thrift import Thrift

from thrift.transport import TSocket

from thrift.transport import TTransport

from thrift.protocol import TBinaryProtocol

try:

transport = TSocket.TSocket(‘14.18.154.188’, 10000)

transport = TTransport.TBufferedTransport(transport)

protocol = TBinaryProtocol.TBinaryProtocol(transport)

client = ThriftHive.Client(protocol)

transport.open()

client.execute(“CREATE TABLE r(a STRING, b INT, c DOUBLE)”)

client.execute(“LOAD TABLE LOCAL INPATH ‘/path’ INTO TABLE r”)

client.execute(“SELECT * FROM test1”)

while (1):

row = client.fetchOne()

if (row == None):

break

print rowve

client.execute(“SELECT * FROM test1”)

print client.fetchAll()

transport.close()

except Thrift.TException, tx:

print ‘%s’ % (tx.message)

但是都解决不了问题,从 netstat 中查看可以发现 TCP 连接确实是建立了,但是不执行 hive 指令。也许就是版本的问题。

还是那句话,看各种中文博客不如看官方文档。

项目中使用的 hive 版本是0.13,此时此刻官网的最新版本都到了1.2.1了。中间间隔了1.2.0、1.1.0、1.0.0、0.14.0。但是还是参考一下官网的方法试试吧。

首先看官网的 setting up hiveserver2

可以看到启动 hiveserver2 可以配置更大最小线程数,绑定的 IP,绑定的端口,还可以设置认证方式。(之前一直不成功正式因为这个连接方式)然后还给了 python 示例代码。

import pyhs2

with pyhs2.connect(host=’localhost’,

port=10000,

authMechani=”PLAIN”,

user=’root’,

password=’test’,

database=’default’) as conn:

with conn.cursor() as cur:

#Show databases

print cur.getDatabases()

#Execute query

cur.execute(“select * from table”)

#Return column info from query

print cur.getSchema()

#Fetch table results

for i in cur.fetch():

print i

在拿到这个代码的时候,自以为是的把认证信息给去掉了。然后运行发现跟之前博客里介绍的方法结果一样,建立了 TCP 连接,但是就是不执行,也不报错。这是几个意思?然后无意中尝试了一下原封不动的使用上面的代码。结果可以用。唉。。。

首先声明一下,hive-site.xml中默认关于 hiveserver2的配置我一个都没有修改,一直是默认配置启动 hiveserver2。没想到的是默认配置是有认证机制的。

然后再写一点,在安装 pyhs2的时候还是遇到了点问题,其实还是要看官方文档的,我只是没看官方文档直接用 pip安装导致了这个问题。安装 pyhs2需要确定已经安装了几个依赖包。直接看在 github 上的 wiki 吧。哪个没安装就补上哪一个就好了。

To install pyhs2 on a clean CentOS 6.4 64-bit desktop….

(as root or with sudo)

get ez_setup.py from

python ez_setup.py

easy_install pip

yum install gcc-c++

yum install cyrus-sasl-devel.x86_64

yum install python-devel.x86_64

pip install pyhs

写了这么多,其实是在啰嗦自己遇到的问题。下面写一下如何使用 python

连接 hive。

python 连接 hive 是基于 thrift 完成的。所以需要服务器端和客户端的配合才能使用。

在服务器端需要启动 hiveserver2 服务,启动方法有两种, 第二种方法只是对之一种方法的封装。

1. $HIVE_HOME/bin/hive –server hiveserver2

2. $HIVE_HOME/bin/hiveserver21212

默认情况下就是hiveserver2监听了10000端口。也可以通过修改 hive-site.xml 或者在启动的时候添加参数来实现修改默认配置。

另外一方面,在客户端需要安装 python 的依赖包 pyhs2。安装方法在上面也介绍了,基本上就是用 pip install pyhs2,如果安装不成功,安装上面提到的依赖包就可以了。

最后运行上面的示例代码就可以了,配置好 IP 地址、端口、数据库、表名称就可以用了,默认情况下认证信息不需要修改。

另外补充一点 fetch 函数执行速度是比较慢的,会把所有的查询结果返回来。可以看一下 pyhs2 的源码,查看一下还有哪些函数可以用。下图是 Curor 类的可以使用的函数。

一般 hive 表里的数据比较多,还是一条一条的读比较好,所以选择是哟功能 fetchone函数来处理数据。fetchone函数如果读取成功会返回列表,否则 None。可以把示例代码修改一下,把 fetch修改为:

count = 0

while (1):

row = cur.fetchone()

if (row is not None):

count += 1

print count, row

else:

print “it’s over”

关于hive加载gbk数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/301604.html<

(0)
运维的头像运维
上一篇2025-05-24 10:05
下一篇 2025-05-24 10:07

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注