对于运维需要时刻保证服务的稳定和高可用。以下是一些对Hadoop群集运维过程中遇到的一些问题总结。有包含到大家遇到的可以参考。
1. 问题1
在集群执行hive脚本时,hive.log报错如下
java.lang.InterruptedException
解决办法:
原因是因为线程在等待过程中长期获取不到资源被终止, 可以通过修改下面的配置进行优化:
dfs.datanode.handler.count(加大)DN的服务线程数。这些线程仅用于接收请求,处理业务命令
dfs.namenode.handler.count(加大) NN的服务线程数。用于处理RPC请求
2. 问题2
ive.log抛出异常信息如下
Error: java.lang.RuntimeException: org.apache.hive.com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 73
Serialization trace:
colExprMap (org.apache.hadoop.hive.ql.exec.TableScanOperator)
aliasToWork (org.apache.hadoop.hive.ql.plan.MapWork)
解决办法:
原因是hive-exec包的org.apache.hadoop.hive.ql.exec.Utilities中默认使用cloningQueryPlanKryo来存储数据,多线程时覆盖影响的0.13.1的bug,在0.14中已经得到修复,偶发性的数据序列化错误,很难重现, 可以修改hive.plan.serialization.format参数值为javaXML来避免错误,默认是kryo序列化格式,没进行尝试因为问题不容易重新;以下是参考资料
https://issues.apache.org/jira/browse/HIVE-8688?jql=project in (MAPREDUCE, HIVE, HADOOP, HDFS) AND text ~ "org.apache.hive.com.esotericsoftware.kryo.KryoException" ORDER BY priority DESC
https://issues.apache.org/jira/browse/HIVE-7711?jql=project in (MAPREDUCE, HIVE, HADOOP, HDFS) AND text ~ "org.apache.hive.com.esotericsoftware.kryo.KryoException" ORDER BY priority DESC
3. 问题3
java.io.IOException: 断开的管道
下面是在执行hive ql时后台报的错误,原因是在datanode上写入文件时,传输管道中断导致失败
可以通过修改下面几个参数对集群读写性能进行优化
dfs.datanode.handler.count(加大)DN的服务线程数。这些线程仅用于接收请求,处理业务命令
dfs.namenode.handler.count(加大) NN的服务线程数。用于处理RPC请求
dfs.namenode.avoid.read.stale.datanode(true)决定是否避开从脏DN上读数据。脏DN指在一个指定的时间间隔内没有收到心跳信息。脏DN将被移到可以读取(写入)节点列表的尾端。尝试开启
dfs.namenode.avoid.write.stale.datanode(true) 和上面相似,是为了避免向脏DN写数据
4. 问题4
java.io.EOFException: Premature EOF
文件操作超租期,实际上就是data stream操作过程中文件被删掉了 可以加大这个参数来进行优化dfs.datanode.max.transfer.threads;
参考资料:
https://issues.apache.org/jira/browse/HDFS-4723 http://www.sharpcloud.cn/thread-4927-1-1.html
5. 问题5
Connection reset by peer
java.io.IOException: Connection reset by peer
datanode重置链接 The client is stuck in an RPC to NameNode. Currently RPCs can be wait for a long time if the server is busy.
可以通过修改下面几个参数来优化
dfs.namenode.handler.count(加大) NN的服务线程数。用于处理RPC请求
dfs.namenode.replication.interval(减小) NN周期性计算DN的副本情况的频率,秒
dfs.client.failover.connection.retries(建议加大) 专家设置。IPC客户端失败重试次数。在网络不稳定时建议加大此值
dfs.client.failover.connection.retries.on.timeouts(网络不稳定建议加大)专家设置。IPC客户端失败重试次数,此失败仅指超时失败。在网络不稳定时建议加大此值
参考资料:https://issues.apache.org/jira/browse/HADOOP-3657
6. 问题6
SemanticException Schema of both sides of union should match
2015-08-10 17:22:35,390 ERROR [main]: ql.Driver (SessionState.java:printError(567)) - FAILED: SemanticException Schema of both sides of union should match.
语法错误,使用union查询时查询两个表的内容不同,测试sql时报的错,不是集群作业的,检查hive ql改正即可
7. 问题7
java.net.SocketTimeoutException
IO超时加大下面俩个参数即可
dfs.datanode.socket.write.timeout (加大)向datanode写入数据超时设置
dfs.client.socket-timeout (加大) dfsclients与集群间进行网络通信的超时设置