Pig 不断尝试连接到作业历史服务器(但失败)
Pig keeps trying to connect to job history server (and fails)
我正在 运行Ning 一个无法连接到 Hadoop 作业历史服务器的 Pig 作业。
任务(通常是带有 GROUP BY
的任何任务)运行s 一段时间,然后它以如下消息开始:
2015-04-21 19:05:22,825 [main] INFO org.apache.hadoop.mapred.ClientServiceDelegate - Application state is completed. FinalApplicationStatus=SUCCEEDED. Redirecting to job history server
2015-04-21 19:05:26,721 [main] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2015-04-21 19:05:29,721 [main] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
然后它会继续一段时间重试连接。有时它比工作更早。其他时候它抛出这个异常:
2015-04-21 19:05:55,822 [main] WARN org.apache.pig.tools.pigstats.mapreduce.MRJobStats - Unable to get job counters
java.io.IOException: java.io.IOException: java.net.NoRouteToHostException: No Route to Host from cluster-01/10.10.10.11 to 0.0.0.0:10020 failed on socket timeout exception: java.net.NoRouteToHostException: No route to host; For more details see: http://wiki.apache.org/hadoop/NoRouteToHost
at org.apache.pig.backend.hadoop.executionengine.shims.HadoopShims.getCounters(HadoopShims.java:132)
at org.apache.pig.tools.pigstats.mapreduce.MRJobStats.addCounters(MRJobStats.java:284)
at org.apache.pig.tools.pigstats.mapreduce.MRPigStatsUtil.addSuccessJobStats(MRPigStatsUtil.java:235)
at org.apache.pig.tools.pigstats.mapreduce.MRPigStatsUtil.accumulateStats(MRPigStatsUtil.java:165)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:360)
at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.launchPig(HExecutionEngine.java:280)
我发现了这个问题 here 但在我的情况下,作业历史记录服务器已启动。如果我 运行 netstat,我发现:
tcp 0 0 0.0.0.0:10020 0.0.0.0:* LISTEN 12073/java off (0.00/0/0)
其中 12073 是...
12073 pts/4 Sl 0:07 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_historyserver -Xmx1000m -Djava.library.path=/data/hadoop/hadoop/lib -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/data/hadoop/hadoop-2.3.0/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/data/hadoop/hadoop-2.3.0 -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/data/hadoop/hadoop/logs -Dhadoop.log.file=mapred-hadoop-historyserver-cluster-01.log -Dhadoop.root.logger=INFO,RFA -Dmapred.jobsummary.logger=INFO,JSA -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer
我尝试打开端口 10200 以防是防火墙问题:
ACCEPT tcp -- anywhere anywhere tcp dpt:10020
...但运气不好。
几分钟后,一些任务只是随意地继续下一部分。
我正在使用 Hadoop 2.3 和 Pig 0.14。
我的问题是:
1) Pig 无法连接到作业历史记录服务器 (JHS) 的可能原因是什么,因为 JHS 运行正在 Pig 查找的同一端口上?
...或者失败...
2) 有什么方法可以告诉 Pig 停止尝试连接到 JHS 并继续执行任务吗?
似乎大多数 Hadoop installation/configuration 指南都忽略了配置作业历史服务器。似乎 Pig 特别依赖此服务器。 JHS 的默认(本地)设置似乎也不适用于多节点集群。
解决方案是将服务器的主机名添加到 mapred-site.xml
的配置中,以确保可以从其他机器访问它。 (在我的文件版本中,这些行必须添加为 "new" ...之前没有设置。)
<property>
<name>mapreduce.jobhistory.address</name>
<value>cm:10020</value>
<description>Host and port for Job History Server (default 0.0.0.0:10020)</description>
</property>
然后重启作业历史服务器:
mr-jobhistory-daemon.sh stop historyserver
mr-jobhistory-daemon.sh start historyserver
如果您遇到绑定异常(端口正在使用),则意味着 stop
无效。
使用ps ax | grep -e JobHistory
获取进程并使用kill -9 [pid]
手动杀死它。然后再次调用上面的启动命令。或者
在配置中使用不同的端口
Pig 应该会自动选择新设置。 运行 一个 Pig 脚本,希望一切顺利。
使用以下命令在 hadoop bin 中启动历史服务器
bin$ ./mr-jobhistory-daemon.sh start historyserver
运行 猪使用下面的命令
$pig
在hadoop/etc/hadoop/mapred-site中配置mapreduce.jobhistory.address
。xml,
然后:
mapred --daemon start
解决方案是历史服务器不是 运行ning:
[user@vm9 sbin]$ ./mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /home/user/hadoop-2.7.7/logs/mapred-user-historyserver-vm9.out
[user@vm9 sbin]$ jps
5683 NameNode
6309 NodeManager
5974 SecondaryNameNode
8075 RunJar
6204 ResourceManager
8509 JobHistoryServer
5821 DataNode
8542 Jps
[user@vm9 sbin]$
现在 pig 可以 运行 正常,它将连接到作业历史记录服务器并且转储命令工作正常。
我正在 运行Ning 一个无法连接到 Hadoop 作业历史服务器的 Pig 作业。
任务(通常是带有 GROUP BY
的任何任务)运行s 一段时间,然后它以如下消息开始:
2015-04-21 19:05:22,825 [main] INFO org.apache.hadoop.mapred.ClientServiceDelegate - Application state is completed. FinalApplicationStatus=SUCCEEDED. Redirecting to job history server
2015-04-21 19:05:26,721 [main] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2015-04-21 19:05:29,721 [main] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
然后它会继续一段时间重试连接。有时它比工作更早。其他时候它抛出这个异常:
2015-04-21 19:05:55,822 [main] WARN org.apache.pig.tools.pigstats.mapreduce.MRJobStats - Unable to get job counters
java.io.IOException: java.io.IOException: java.net.NoRouteToHostException: No Route to Host from cluster-01/10.10.10.11 to 0.0.0.0:10020 failed on socket timeout exception: java.net.NoRouteToHostException: No route to host; For more details see: http://wiki.apache.org/hadoop/NoRouteToHost
at org.apache.pig.backend.hadoop.executionengine.shims.HadoopShims.getCounters(HadoopShims.java:132)
at org.apache.pig.tools.pigstats.mapreduce.MRJobStats.addCounters(MRJobStats.java:284)
at org.apache.pig.tools.pigstats.mapreduce.MRPigStatsUtil.addSuccessJobStats(MRPigStatsUtil.java:235)
at org.apache.pig.tools.pigstats.mapreduce.MRPigStatsUtil.accumulateStats(MRPigStatsUtil.java:165)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:360)
at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.launchPig(HExecutionEngine.java:280)
我发现了这个问题 here 但在我的情况下,作业历史记录服务器已启动。如果我 运行 netstat,我发现:
tcp 0 0 0.0.0.0:10020 0.0.0.0:* LISTEN 12073/java off (0.00/0/0)
其中 12073 是...
12073 pts/4 Sl 0:07 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_historyserver -Xmx1000m -Djava.library.path=/data/hadoop/hadoop/lib -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/data/hadoop/hadoop-2.3.0/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/data/hadoop/hadoop-2.3.0 -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/data/hadoop/hadoop/logs -Dhadoop.log.file=mapred-hadoop-historyserver-cluster-01.log -Dhadoop.root.logger=INFO,RFA -Dmapred.jobsummary.logger=INFO,JSA -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer
我尝试打开端口 10200 以防是防火墙问题:
ACCEPT tcp -- anywhere anywhere tcp dpt:10020
...但运气不好。
几分钟后,一些任务只是随意地继续下一部分。
我正在使用 Hadoop 2.3 和 Pig 0.14。
我的问题是:
1) Pig 无法连接到作业历史记录服务器 (JHS) 的可能原因是什么,因为 JHS 运行正在 Pig 查找的同一端口上?
...或者失败...
2) 有什么方法可以告诉 Pig 停止尝试连接到 JHS 并继续执行任务吗?
似乎大多数 Hadoop installation/configuration 指南都忽略了配置作业历史服务器。似乎 Pig 特别依赖此服务器。 JHS 的默认(本地)设置似乎也不适用于多节点集群。
解决方案是将服务器的主机名添加到 mapred-site.xml
的配置中,以确保可以从其他机器访问它。 (在我的文件版本中,这些行必须添加为 "new" ...之前没有设置。)
<property>
<name>mapreduce.jobhistory.address</name>
<value>cm:10020</value>
<description>Host and port for Job History Server (default 0.0.0.0:10020)</description>
</property>
然后重启作业历史服务器:
mr-jobhistory-daemon.sh stop historyserver
mr-jobhistory-daemon.sh start historyserver
如果您遇到绑定异常(端口正在使用),则意味着 stop
无效。
使用
ps ax | grep -e JobHistory
获取进程并使用kill -9 [pid]
手动杀死它。然后再次调用上面的启动命令。或者在配置中使用不同的端口
Pig 应该会自动选择新设置。 运行 一个 Pig 脚本,希望一切顺利。
使用以下命令在 hadoop bin 中启动历史服务器
bin$ ./mr-jobhistory-daemon.sh start historyserver
运行 猪使用下面的命令
$pig
在hadoop/etc/hadoop/mapred-site中配置mapreduce.jobhistory.address
。xml,
然后:
mapred --daemon start
解决方案是历史服务器不是 运行ning:
[user@vm9 sbin]$ ./mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /home/user/hadoop-2.7.7/logs/mapred-user-historyserver-vm9.out
[user@vm9 sbin]$ jps
5683 NameNode
6309 NodeManager
5974 SecondaryNameNode
8075 RunJar
6204 ResourceManager
8509 JobHistoryServer
5821 DataNode
8542 Jps
[user@vm9 sbin]$
现在 pig 可以 运行 正常,它将连接到作业历史记录服务器并且转储命令工作正常。