YARN REST API - Spark作业提交

taz*_*azo 5 hadoop hadoop-yarn apache-spark

我正在尝试使用YARN REST API来提交spark-submit作业,我通常通过命令行运行.

我的命令行spark-submit看起来像这样

JAVA_HOME=/usr/local/java7/ HADOOP_CONF_DIR=/etc/hadoop/conf /usr/local/spark-1.5/bin/spark-submit \
--driver-class-path "/etc/hadoop/conf" \
--class MySparkJob \
--master yarn-cluster \
--conf "spark.executor.extraClassPath=/usr/local/hadoop/client/hadoop-*" \
--conf "spark.driver.extraClassPath=/usr/local/hadoop/client/hadoop-*" \
spark-job.jar --retry false --counter 10
Run Code Online (Sandbox Code Playgroud)

通过纱线REST API文档阅读https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Applications_APISubmit_Application,我试图创建的JSON有效载荷POST看上去像

{
  "am-container-spec": {
    "commands": {
      "command": "JAVA_HOME=/usr/local/java7/ HADOOP_CONF_DIR=/etc/hadoop/conf org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster  --jar spark-job.jar --class MySparkJob --arg --retry --arg false --arg --counter --arg 10"
    }, 
    "local-resources": {
      "entry": [
        {
          "key": "spark-job.jar", 
          "value": {
            "resource": "hdfs:///spark-job.jar", 
            "size": 3214567, 
            "timestamp": 1452408423000, 
            "type": "FILE", 
            "visibility": "APPLICATION"
          }
        }
      ]
    }
  }, 
  "application-id": "application_11111111111111_0001", 
  "application-name": "test",
  "application-type": "Spark"   
}
Run Code Online (Sandbox Code Playgroud)

我看到的问题是,Hadoop的CONFIGS目录是以前本地我是从运行作业的机器,现在我通过REST API提交作业,还是直接对RM,我不知道如何提供这些细节?

Amo*_*ale 1

如果您尝试通过 REST API 提交 Spark 作业,我建议您查看Livy。这是将 Spark 作业提交到集群的一种简单且最简单的方法。

Livy 是一个开源 REST 接口,用于从任何地方与 Apache Spark 交互。它支持在本地或 Apache Hadoop YARN 中运行的 Spark 上下文中执行代码或程序片段。

  • 交互式 Scala、Python 和 R shell
  • Scala、Java、Python 中的批量提交
  • 多个用户可以共享同一服务器(支持模拟)
  • 可用于通过 REST 从任何地方提交作业
  • 不需要对您的程序进行任何代码更改

我们还尝试通过 Java RMI 选项提交应用程序。