问题描述:在centos7系统搭建的伪分布式Hadoop基础上,用Sqoop把HDFS上的数据导出到Mysql的时候,发现任务执行时卡死在如下图所示的这一步:
卡了接近十分钟意识到可能永远也不会结束了....赶紧ctrl+c结束进程,找找原因。首先搜了下资料,发现大多数教程都说是内存不足引起的,可在运行这个命令之前只运行过一次wordcount例程,按道理不可能占用过多内存。排除内存问题。
打开hadoop web运行监控界面,在Application标签页找到正在运行的application,查看logs,发现一直循环报错:
“org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8030. ”
就是连不上ResourceManagerserver的意思,这个8030端口应该是没有正常开启。
接下来看看日志里有没有详细报错信息:http://localhost:8088/logs/
因为已经运行到MapReduce.Job才卡住,所以直接找reducemanager的日志,打开http://localhost:8088/logs/hadoop-root-resourcemanager-localhost.localdomain.log (localhost.localdomain是我的hostname)
(非常枯燥的工作,从几百行密密麻麻的文字里找“ERROR”)
终于找到了,提示“org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.lang.InterruptedException”
大概理解了一下意思,是Yarn的问题,任务超时之类的错误。
再看异常栈抛出的下一条内容:Stopping IPC Server listener on 8031
想了很久没想起来之前修改Hadoop配置文件的时候有设置过8030、8031这两个端口,但是它们看上去应该是Yarn的任务执行相关的端口。那就意味着要改yarn-site.xml。用这个思路再一搜,果然找到了解决方法:
在yarn-site.xml文件加入以下内容:
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop-master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop-master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop-master:8031</value>
</property>
原贴见:https://stackoverflow.com/questions/29904083/hadoop-java-got-exception-java-net-connectexception
问题解决。终于可以正常使用sqoop了。