所有Hadoop作业都有唯一的jobid。您可以使用jobid获取工作状态或工作计数器。 问题是我怎样才能得到我刚从脚本运行的工作的jobid?当然,我希望以可靠和简单(如果可能)的方式来做到这一点。获取hadoop streaming jobid
例子:
1)从我的剧本我跑:
hadoop jar ${HADOOP_STREAMING} \
-D mapred.job.name="$NAME" \
-D mapred.reduce.tasks=$NREDUCERS\
-mapper "cat" \
-file ./reducer.py \
-reducer "python ./reducer.py" \
-input hdfs:/logs/2012-06-25/*.bz2 \
-output hdfs:/tmp/test
2)现在我想以某种方式获得作业ID启动的任务。
3)当我有jobid时,我可以做hadoop job -status和hadoop job -counter查询。
UPDATE:
同步的情况下(等到完成,获得作业ID,然后索要状态/计数器)似乎是最低要求,但有时使用起来并不方便。有时我想同时运行一些hadoop流式作业(作为后台任务),并且我想记住所有稍后可以使用的jobids,例如进行工作流分析。
事实上,我已经想出了一些解决方案,但我认为它是一个黑客,这让我非常困扰。如果有人向我展示更优雅的解决方案,我将不胜感激。这里的解决方案:
1)当我运行hadoop串流作业时,我必须指定一个输出hdfs目录。
CONF_FILE_PATH=`hadoop fs -stat hdfs:<output_dir_path>/_logs/history/*.xml | awk '{print $NF}'`
3)最后,我可以提取从配置文件名称的作业ID
在您的例子情况,在shell继续之前,执行是否等待作业完成? (在这种情况下,没有多少点巡查状态)。或者你是否有兴趣查明工作是否成功/失败以及最终的工作计数器价值? –
同步大小写(等待完成,获取jobid然后询问状态/计数器)似乎是所需的最小值,但有时使用起来不方便。有时我想同时运行一些hadoop流式作业(作为后台任务),并且我想记住所有稍后可以使用的jobids,例如进行工作流分析。 事实上,我已经想出了一些解决方案,但我认为它是一种攻击,这让我非常困扰(请参阅更新后的文章)。如果有人向我展示更优雅的解决方案,我将不胜感激。 –