我使用hadoop2.7.1的rest api在集群外运行mapreduce作业。这个例子"http://hadoop-forum.org/forum/general-hadoop-discussion/miscellaneous/2136-how-can-i-run-mapreduce-job-by-rest-api"真的帮助了我。但是当我提交一个post response时,一些奇怪的事情发生了:
-
我看"http://master:8088/cluster/apps"和一个帖子响应产生两个工作如下图所示:奇怪的事情:一个响应产生两个作业
-
等待很长时间后,由于FileAlreadyExistsException,我在http响应体中定义的作业失败。原因是另一个作业创建了输出目录,所以输出目录hdfs://master:9000/output/output16已经存在。
这是我的响应体:
{
"application-id": "application_1445825741228_0011",
"application-name": "wordcount-demo",
"am-container-spec": {
"commands": {
"command": "{{HADOOP_HOME}}/bin/hadoop jar /home/hadoop/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /data/ /output/output16"
},
"environment": {
"entry": [{
"key": "CLASSPATH",
"value": "{{CLASSPATH}}<CPS>./*<CPS>{{HADOOP_CONF_DIR}}<CPS>{{HADOOP_COMMON_HOME}}/share/hadoop/common/*<CPS>{{HADOOP_COMMON_HOME}}/share/hadoop/common/lib/*<CPS>{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/*<CPS>{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/lib/*<CPS>{{HADOOP_YARN_HOME}}/share/hadoop/yarn/*<CPS>{{HADOOP_YARN_HOME}}/share/hadoop/yarn/lib/*<CPS>./log4j.properties"
}]
}
},
"unmanaged-AM": false,
"max-app-attempts": 2,
"resource": {
"memory": 1024,
"vCores": 1
},
"application-type": "MAPREDUCE",
"keep-containers-across-application-attempts": false
}
这是我的命令:
curl -i -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' http://master:8088/ws/v1/cluster/apps?user.name=hadoop -d @post-json.txt
有人能帮我吗?非常感谢。
当您运行map reduce时,请注意您没有输出文件夹,因为如果它存在,作业将不会运行。您可以编写程序,以便在文件夹存在时删除它,或者在调用rest api之前手动删除它。这只是为了防止数据丢失和避免覆盖其他作业的输出。