数据仓库环境准备Hive常见问题及解决方式

1)DataGrip 中注释乱码问题

注释属于元数据的一部分,同样存储在mysql的metastore库中,如果metastore库的字符集不支持中文,就会导致中文显示乱码。

不建议修改Hive元数据库的编码,此处我们在metastore中找存储注释的表,找到表中存储注释的字段,只改对应表对应字段的编码。

如下两步修改,缺一不可。

(1)修改mysql元数据库

我们用到的注释有两种:字段注释和整张表的注释。

COLUMNS_V2 表中的 COMMENT 字段存储了 Hive 表所有字段的注释,TABLE_PARAMS表中的PARAM_VALUE字段存储了所有表的注释。我们可以通过命令修改字段编码,也可以用 DataGrip 或 Navicat 等工具修改,此处仅对 Navicat 进行展示。

①命令修改

采集部分已介绍。

alter table COLUMNS_V2 modify column COMMENT varchar(256)character set utf8;

alter table TABLE_PARAMS modify column PARAM_VALUEmediumtext character set utf8;

②使用工具

以COLUMNS_V2表中COMMENT字段的修改为例。

(a)右键点击表名,选择设计表

(b)在右侧页面中选中表的字段

(c)在页面下方下拉列表中将字符集改为 utf8

修改字符集之后,已存在的中文注释能否正确显示?不能。为何?

数据库中的字符都是通过编码存储的,写入时编码,读取时解码。修改字段编码并不会改变此前数据的编码方式,依然为默认的 latin1,此时读取之前的中文注释会用 utf8 解码,编解码方式不一致,依然乱码。

(2)url连接的编码指定为UTF-8

修改hive-site.xml,在javax.jdo.option.ConnectionURL的value末尾添加以下内容。

&useUnicode=true&characterEncoding=UTF-8

这一步在采集部分已完成。

xml文件中&符是有特殊含义的,我们必须使用转义的方式&对&进行替换,如下。

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;allowPublicKeyRetrieval=true

</value>

</property>

只要修改了hive-site.xml,就必须重启hiveserver2。

2)DataGrip 刷新连接时 hiveserver2 后台报错

(1)报错信息如下

FAILED: ParseException line 1:5 cannot recognize input near'show' 'indexes' 'on' in ddl statement

原因:我们使用的是Hive-3.1.3,早期版本的 Hive 有索引功能,当前版本已移除, DataGrip 刷新连接时会扫描索引,而 Hive 没有,就会报错。

(2)报错信息如下

FAILED: Execution Error, return code 1 fromorg.apache.hadoop.hive.ql.exec.DDLTask. Current user : at*** is not allowedto list roles. User has to belong to ADMIN role and have it as current role,for this action.

FAILED: Execution Error, return code 1 fromorg.apache.hadoop.hive.ql.exec.DDLTask. Current user : at*** is not allowedget principals in a role. User has to belong to ADMIN role and have it as currentrole, for this action. Otherwise, grantor need to have ADMIN OPTION on rolebeing granted and have it as a current role for this action.

DataGrip连接hiveserver2时会做权限认证,但本项目中我们没有对Hive的权限管理进行配置,因而报错。

上述两个问题都是DataGrip导致的,并非Hive环境的问题,不影响使用。

3)OOM报错

Hive默认堆内存只有256M,如果hiveserver2后台频繁出现OutOfMemoryError,可以调大堆内存。此处必须进行修改

在Hive家目录的conf目录下复制一份模板文件hive-env.sh.template。

[at***@hadoop102 conf]$ cd $HIVE_HOME/conf

[at***@hadoop102 conf]$ cp hive-env.sh.templatehive-env.sh

修改 hive-env.sh,将 Hive 堆内存改为1024M(推荐使用2048),如下。

export HADOOP_HEAPSIZE=1024

可根据实际使用情况适当调整堆内存。

4)DataGrip ODS层部分表字段显示异常

建表字段中有如下语句的表字段无法显示。

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'

上述语句指定了Hive表的序列化器和反序列化器SERDE(serialization 和 deserialization的合并缩写),用于解析 JSON 格式的文件。上述SERDE 是由第三方提供的,在hive-site.xml中添加如下配置即可解决。

<property>

<name>metastore.storage.schema.reader.impl</name>

<value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</value>

</property>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值