Pig一直试图连接到作业历史服务器(并失败)

bad*_*oit 6 hadoop apache-pig

我正在运行无法连接到Hadoop作业历史记录服务器的Pig作业.

任务(通常是任何任务GROUP BY)运行一段时间,然后它以如下消息开头:

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)
Run Code Online (Sandbox Code Playgroud)

然后它会继续一段时间重试连接.有时它会先于工作.Othertimes它抛出了这个例外:

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)
Run Code Online (Sandbox Code Playgroud)

我在这里找到了这个问题,但在我的情况下,作业历史服务器已启动.如果我运行netstat,我发现:

tcp        0      0 0.0.0.0:10020           0.0.0.0:*               LISTEN      12073/java       off (0.00/0/0)
Run Code Online (Sandbox Code Playgroud)

哪里有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
Run Code Online (Sandbox Code Playgroud)

我尝试打开端口10200,以防它出现防火墙问题:

ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:10020
Run Code Online (Sandbox Code Playgroud)

......但没有运气.

几分钟后,一些任务只是随意地继续下一部分.

我正在使用Hadoop 2.3和Pig 0.14.

我的问题是:

1)鉴于JHS在Pig查找的同一端口上运行,Pig无法连接到作业历史服务器(JHS)的可能原因是什么?

......或者失败了......

2)有没有办法告诉Pig停止尝试连接到JHS并继续执行任务?

bad*_*oit 6

似乎大多数Hadoop安装/配置指南忽略了配置作业历史记录服务器.看来Pig特别依赖于这台服务器.似乎JHS的默认(本地)设置在多节点群集中不起作用.

解决方案是将服务器的主机名添加到配置中mapred-site.xml,以确保它可以从其他计算机访问.(在我的文件版本中,行必须添加为"新"...没有以前的设置.)

<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>
Run Code Online (Sandbox Code Playgroud)

然后重启作业历史服务器:

mr-jobhistory-daemon.sh stop historyserver
mr-jobhistory-daemon.sh start historyserver
Run Code Online (Sandbox Code Playgroud)

如果你得到一个绑定异常(正在使用的端口),这意味着它stop不起作用.或

  1. ps ax | grep -e JobHistory用于获取进程并使用手动终止它kill -9 [pid].然后再次调用上面的启动命令.要么

  2. 在配置中使用其他端口

猪应该自动获取新设置.运行Pig脚本并希望最好.