所有Hadoop作业都有唯一的Jobid。您可以使用jobid获取工作状态或工作计数器。
问题是如何从脚本中获取刚刚完成的工作的作业ID?当然,我想以可靠且容易的方式(如果可能)进行此操作。
例:
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)现在我想以某种方式获取启动任务的名称。
3)当我有jobid时,我可以执行hadoop job -status和hadoop job -counter查询。
更新:
同步大小写(等待完成,获取jobid,然后询问状态/计数器)似乎是必需的最小值,但是有时使用起来并不方便。有时我想同时运行一些hadoop流作业(作为后台任务),并且想记住以后可以使用的所有Jobid,例如用于工作流分析。
实际上,我已经找到了一些解决方案,但是我认为它是一种hack,这让我非常困扰。如果有人向我展示更优雅的解决方案,我将不胜感激。解决方法如下:
1)当我运行hadoop流作业时,必须指定输出hdfs目录。
2)使用此目录,我可以访问hdfs中的作业配置文件:
CONF_FILE_PATH=`hadoop fs -stat hdfs:<output_dir_path>/_logs/history/*.xml | awk '{print $NF}'`
3)最后,我可以从配置文件的名称中提取Jobid
最佳答案
您在当前的“hack”之外有两个选择(其中一个只是另一个“hack”!)
Running job: <jobid>
。 关于hadoop - 获取hadoop流Jobid,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11191788/