通过rest api运行MapReduce作业



我使用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时,一些奇怪的事情发生了:

  1. 我看"http://master:8088/cluster/apps"和一个帖子响应产生两个工作如下图所示:奇怪的事情:一个响应产生两个作业

  2. 等待很长时间后,由于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之前手动删除它。这只是为了防止数据丢失和避免覆盖其他作业的输出。

相关内容

  • 没有找到相关文章

最新更新