hive相关报错问题解决办法

本文列举了在使用Hive过程中遇到的一些典型错误,包括Hadoop版本信息获取失败、Hive元数据错误、自定义函数扩展、外部表分区管理、查询写文件报错等问题,并提供了详细的解决步骤和建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Unable to determine Hadoop version information. 'hadoop version' returned:

解决办法:

修改bin/hive,

#    HADOOP_VERSION=$($HADOOP version | awk '{if (NR == 1) {print $2;}}');

HADOOP_VERSION=$($HADOOP version | awk '{if($0 ~ /[[:alpha:]]+ ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)?.*$/){print  $2};}')

 

2. 在Hive中使用show tables;等命令报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes

解决办法: 

到mysql中的hive数据库里执行 alter database hive character set latin1;

改变hive元数据库的字符集,问题就可以解决! 但是这时你如果建一个表里有中文,就会报错了。

 

3.hive show tables; 报错:

FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

解决办法:

cd $HIVE_HOME/conf,确认hive-site.xml中的javax.jdo.option.ConnectionURL等配置是否正确

 

4.hive自定义函数扩展

在hive安装目录下建auxlib文件夹,与lib目录同级,把自己开发的扩展jar放到该目录下,

在使用之前执行一下类似如下的语句:

CREATE TEMPORARY FUNCTION ailk_udf_row_number AS 'com.ailk.cp.cloud.hiveudf.udf.AilkUdfRowNumber'

 

5.外部表建分区时需要指定location时

应该写成这样:

alter table tc_social_all add partition (yyyy=2016,mm=6,dd=16,hh=0) location '2016/06/16/00';

alter table tc_social_all add partition (yyyy=2016,mm=6,dd=16,hh=1) location '2016/06/16/01';

不能写成这样:

alter table tc_social_all add partition (yyyy=2016,mm=6,dd=16,hh=0) location '2016/06/16/00'

partition (yyyy=2016,mm=6,dd=16,hh=1) location '2016/06/16/01';

否则,所有的分区都指向'2016/06/16/00'。

删除外部表时,数据不会删除

删除普通表时,数据会删除

 

6.显示表分区

show partitions tabName

 

7.hive查询写文件报错Failed with exception Unable to move source hdfs:xx to destination xxx

解决方法:$HADOOP_HOME/share/hadoop/tools/lib/hadoop-distcp-2.6.0.jar放入hive的lib目录

并重启hive shell

 

8.启动hive metastore

nohup hive --service metastore &

 

9.执行hive报错

Diagnostic Messages for this Task:

java.lang.RuntimeException: native-lzo library not available

        at com.hadoop.compression.lzo.LzoCodec.getCompressorType(LzoCodec.java:155)

解决方法:

cp /export/home/hadoop/hadoop-2.6.0-cdh5.4.1/lib/native/libgplcompression.so /usr/java/jdk1.7.0_55/jre/lib/amd64

另外确认下/usr/java/jdk1.7.0_55/jre/lib/amd64下的libgplcompression.so有没有读取和执行权限。

 

10.Does not contain a valid host:port authority: logicaljt

zookeeper中的MR配置没有更新,需要格式化一下,在MR主节点(jobtracker主节点)执行:./hadoop mrzkfc -formatZK

 

11.查看table在hdfs上的存储路径

show create table 表名;

 

 12、hive报错java.io.IOException: Could not find status of job:job_1470047186803_131111

        jobname过长导致,jobname默认是从hql中的开头和结尾截取一部分,如果sql开头或结尾有中文注释的话,会被截取进来,并进行url编码。导致作业的信息名变的非常长,超过了namenode所允许的最大的文件命名长度。导致任务无法写入historyserver。hive在historyserver无法获得这个job的状态,报开头的错误。

简单的解决办法:

设置jobname的最大长度

set hive.jobname.length=10;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值