gpt4 book ai didi

hadoop - 获取 hadoop streaming jobid

转载 作者:可可西里 更新时间:2023-11-01 15:41:24 25 4
gpt4 key购买 nike

所有 Hadoop 作业都有唯一的 jobid。您可以使用 jobid 获取作业状态或作业计数器。问题是我如何才能获得刚刚从我的脚本运行的作业的 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) 现在我想以某种方式获取已启动任务的jobid

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

最佳答案

您可以选择为作业分配用户定义的名称:

|-D mapred.job.name="unique_name_within_the_user" \

然后从 Hadoop YARN REST API 的响应中识别您的 job_id:

curl -H "Accept: application/json" -X GET "http://host.domain.com:8088/ws/v1/cluster/apps"

关于hadoop - 获取 hadoop streaming jobid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191788/

25 4 0