hive在E-MapReduce集群的实践(一)hive异常排查入门-阿里云开发者社区

开发者社区> 鸿初> 正文

hive在E-MapReduce集群的实践(一)hive异常排查入门

简介: hive是hadoop集群最常用的数据分析工具,只要运行sql就可以分析海量数据。初学者在使用hive时,经常会遇到各种问题,不知道该怎么解决。 本文是hive实践系列的第一篇,以E-MapReduce集群环境为例,介绍常见的hive执行异常,定位和解决方法,以及hive日志查看方法。
+关注继续查看

hive是hadoop集群最常用的数据分析工具,只要运行sql就可以分析海量数据。初学者在使用hive时,经常会遇到各种问题,不知道该怎么解决。

本文是hive实践系列的第一篇,以E-MapReduce集群环境为例,介绍常见的hive执行异常,定位和解决方法,以及hive日志查看方法。

除作者本人的知乎专栏外,其他转载需要先联系我。


一.常见异常表现

主要是执行hive sql时卡住,提示异常信息。

如执行sql时直接提示异常信息,执行sql时卡住,显示mapreduce进度一直0%,mapreduce进度长时间不变化,执行一半提示异常退出,等等。


二.异常定位和解决

2.1.执行sql直接提示异常信息

一般是语法问题,资源问题或hive服务异常。

2.1.1 语法解析错误

sql写的有问题。如ParseException


hive> show table;

FAILED: ParseException line 1:10 mismatched input '<EOF>' expecting EXTENDED near 'table' in show statement

提示table语法错误,正确的是show tables。遇到查阅hive语法确定正确写法。

hive> select * from test;
FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'test'
表test不存在。检查表名是否拼写错误,大小写是否正确,等等。

2.1.2.MetaException

一般是metastore有问题。如

hive> show tables;
FAILED: SemanticException MetaException(message:Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused)

连不上metastore,说明metastore服务有问题,如oom,被操作系统kill,等。先检查metastore进程是否存在,看进程启动时间是否有重启。再来看metastore的日志,是否有oom,操作系统kill。查看metastore日志的方式第三章介绍。

如果有oom,一般需要配大metastore的内存。如果有被操作系统kill,说明机器使用的总内存比物理内存大了,要么升级机器配置,要么合理规划主节点内存,尤其是要注意限制在主节点上提交作业的进程数,避免占用过多内存。

2.2.执行卡住

要看hive日志分析原因,一般是hive客户端遇到某种可重试异常一直在重试,未返回异常信息。

有一次遇到,查看hive客户端日志,反复有报错说不能识别一个机器域名。确定问题是因为使用的hive on tez,hive client要通过【集群内域名:端口】来访问tez作业的appmaster,而执行hive命令的服务器没有配置集群内域名的解析,所以无法识别该域名。在/etc/hosts下增加域名配置,拷贝主节点的/etc/hosts域名配置,解决了该问题。


2.3.mapreduce进度一直0%

一般是集群或者作业所属的yarn资源池队列没有资源,导致作业状态一直pending。

可以打开yarn ui,默认是主节点的8088端口(EMR控制台可以在开源组件快捷入口进入),查看该hive作业是不是一直在pending。

pending首先确定是否配置了yarn资源池,资源池配置有无问题,如配置的资源太少,运行的作业太多。如有问题要修改资源池配置,根据配置修改情况刷新资源队列或重启resourcemanager。

如果排除了资源池问题,还有可能是运行的hadoop作业太多,那么要等待其他作业完成释放资源,或者直接杀掉其他不重要的作业。


2.4. 所有job的mapreduce进度长时间不变化

极有可能有死锁。常见场景是集群或yarn资源池队列资源有限,同时运行了好多作业job。各作业appmaster,提前启动的reduce用光了资源,没资源继续启动map了,于是死锁。

解决方案是避免reduce提前启动占用资源,设置reduce在map都执行完后再启动。修改maped-site.xml的mapreduce.job.reduce.slowstart.completedmaps参数,改为0.98,或者1,杀掉所有作业重新执行。这样只有98%或100%的map都执行完,才会启动reduce进程。

要注意修改该参数会延长单个job的运行总时间,只有同时运行很多job,瞬时资源需要远大于集群/资源队列规模,才有必要调整该参数。


2.5. 执行一半异常退出

常见map/reduce oom。

查看job client运行日志,并用yarn ui查看sql任务的map,reduce task日志,是否有oom信息。如果有,根据实际需要,调大内存。可以在执行的sql前,通过set mapreduce.map.memory.mb =4096;(该数值仅为举例,以实际需要来确定)修改map,set mapreduce.reduce.memory.mb = 4096;修改reduce的内存来避免oom。

还有其他一些造成oom的原因和解决办法,下篇文章再来介绍。



三.hive日志位置

近期的版本更新会支持在EMR控制台上查看各服务的日志,敬请期待。当前可以登录集群查看hive的日志。

服务进程日志

hive日志默认是 /tmp/[user]/hive.log,由于tmp目录机器重启后会清空,所以在EMR集群里,hiveserver和metastore进程在启动时配置了额外的日志参数,日志输出在/var/log/hive/目录,分别为hiveserver2.log和metastore.log。每天会滚动生成一个带日期的新文件,最多保留30天。

服务进程日志一般用来调查异常日志信息,是否有oom,操作系统kill,元数据访问错误,等等。


作业运行日志

运行hive的client日志依然在 /tmp/[user]/hive.log里,例如用root用户运行sql,日志会在/tmp/root/hive.log文件里。

hive job的mapreduce task跟其他hadoop job的mapreduce task一样,日志分散在集群的各个节点上,可以通过yarn ui点击job信息跳转查看。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【我的Android进阶之旅】Android 7.0报异常:java.lang.SecurityException: COLUMN_LOCAL_FILENAME is deprecated;
之前开发的一个和第三方合作的apk,在之前公司的 Android 5.1 系统的手表上运行正常,今天在公司新开发的 Android 7.1系统的手表上运行的时候,使用 DownloadManager 下载之后,查询下载状态的时候,报了异常 java.
1845 0
E-MapReduce的HBase集群使用Hue
E-MapReduce的HBase集群中使用Hue,方便用户访问查询数据
6494 0
hive 异常 (Attempt to do update or delete on table terminal that does not use an )
    hive 异常 (Attempt to do update or delete on table terminal that does not use an )   hive > delete from terminal where 1=1 ;  出现以下    ...
1366 0
关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
原文:关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 关于Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种, 第一种: Predefined type 'Microsoft.CSharp.RuntimeBinder.Binder' is not defined or imported 解决它的办法是,直接在项目引用中添加 Micorsoft.Csharp 就可以了。
1352 0
【我的Android进阶之旅】 RxJava 理解Backpressure并解决异常 rx.exceptions.MissingBackpressureException
今天测试人员在测试应用APP的时候应用crash了,查看了下crash log如下所示: java.lang.IllegalStateException: Exception thrown on Scheduler.
1204 0
hive 动态分区(Dynamic Partition)异常处理
Changing Hive Dynamic Partition Limits Symptoms: Hive enforces limits on the number of dynamic partitions that it creates.
1224 0
org.hibernate.hql.ast.QuerySyntaxException is not mapped异常
解决方案: 这一般是HQL语句错误 因为Hibernate是对类查询的 ,而不是对数据库表进行查询,from是实体类而不是表名! 例如: String hql = “from Employee e where e.
667 0
Java连接池你用对了吗?一次Unexpected end of stream异常的排查
Apache连接池参数调优、Redis连接关闭机制、Linux网络抓包
613 0
+关注
鸿初
阿里云-EMR团队成员,致力于推广开源大数据在云上的应用
21
文章
30
问答
来源圈子
更多
E-MapReduce是构建于阿里云ECS弹性虚拟机之上,利用开源大数据生态系统,包括Hadoop和Spark,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。加入钉钉群聊阿里云E-MapReduce交流2群,点击进入查看详情 https://qr.dingtalk.com/action/joingroup?code=v1,k1,cNBcqHn4TvG0iHpN3cSc1B86D1831SGMdvGu7PW+sm4=&_dt_no_comment=1&origin=11
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载