Hadoop运维:hive作业跑挂的原因总结
最近集群数据源迁移,重新布置flume,由于没有优化好,产生了大量的小文件,多达八九万个……,外加上集群出现了namenode挂机故障,整个ETL作业跑的一塌糊涂。现在对问题进行总结:
(1)map作业数因为小文件原因,从一个任务有几千个map激增到9w个……,每次作业运行到4w个左右的时候就挂掉了,追踪log日志,resourceManager的配置yarn.app.mapreduce.am.resource.mb设置为1GB,造成内存溢出,而导致作业被杀死。将参数修改为3GB。
(2)有些作业报出如下错误:
java.lang.OutOfMemoryError: Java heap space
atorg.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:498)
atorg.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
atorg.apache.hadoop.mapred.Child.main(Child.java:158)
查明原因是Hadoop客户端的内存配置问题,对hive-env.sh进行修改,主要参数如下:HADOOP_CLIENT_OPTS="-Xmx268435456 -Djava.net.preferIPv4Stack=true $HADOOP_CLIENT_OPTS"。
(3)作业运行时,提交不到MR,还没有分配jobid就报如下错误:
org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerException
at org.apache.hadoop.ipc.Client.call(Client.java:1409)
at org.apache.hadoop.ipc.Client.call(Client.java:1362)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
at com.sun.proxy.$Proxy15.getListing(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getListing(ClientNamenodeProtocolTranslatorPB.java:5
15)
at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
。。。
查明原因是由于那天集群nomenode进行重启,有可能导致文件的metadata损坏,对文件夹进行fsck扫描,发现遇到问题文件后,报出null错误,并直接退出fsck。通过查看,这些文件都很小,只有几百个字节,移走后运行成功。
(4)有一个作业起了9w个map,每次运行到7w个的时候就挂掉了,日志中有报内存溢出的错误,具体原因还没有查明,将那个文件夹分开运行,成功。
版权声明:本文为博主原创文章,未经博主允许不得转载。
页:
[1]