`
albert2012
  • 浏览: 13452 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

hive相关报错问题解决办法

 
阅读更多
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;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics