使用`--master yarn-cluster`执行带有Livy的Spark作业,而不进行系统范围的更改

时间:2016-11-30 05:09:12

标签: apache-spark livy

我想使用Livy通过来自集群外部的HTTP调用来执行Spark作业,其中Spark jar已存在于HDFS中。

我能够从群集节点上的shell spark-submit spark-submit --class io.woolford.Main --master yarn-cluster hdfs://hadoop01:8020/path/to/spark-job.jar 作业,例如:

--master yarn-cluster

请注意,curl是访问jar所在的HDFS所必需的。

我也可以使用curl -X POST --data '{"file": "/path/to/spark-job.jar", "className": "io.woolford.Main"}' -H "Content-Type: application/json" hadoop01:8998/batches 通过Livy提交命令。例如,此请求:

spark-submit --class io.woolford.Main hdfs://hadoop01:8020/path/to/spark-job.jar

...在集群上执行以下命令:

--master yarn-cluster

这与有效的命令相同,减去/var/log/livy/livy-livy-server.out参数。通过尾随curl验证了这一点。

因此,我只需修改--master yarn-cluster命令,以便在Livy执行时包含--master yarn-cluster。乍一看,似乎可以通过向JSON字典添加参数来实现这一点。不幸的是,这些都没有通过。

有没有人知道如何将<selectclass="form-control" id="my_select"><optionvalue="0">List is Number</option><option value="1">List is Alphabetical</option></select> <liclass="ui-state-default " ng-repeat="damageResult in damageResultList> <span>{{damageResult.damageMechanismList}}hfgh</span></li> 传递给Livy,以便在YARN上执行作业而不会systemwide changes

2 个答案:

答案 0 :(得分:0)

我最近尝试过与你的问题类似的东西。我需要向Livy的API发送HTTP请求,而Livy已经安装在集群(YARN)中,然后我想让Livy启动Spark工作。

我打电话给Livy的命令没有包含--master yarn-cluster,但这似乎对我有用。也许您可以尝试将JAR文件放在本地而不是群集中?

答案 1 :(得分:0)

spark.master = yarn-cluster

将它设置在spark conf中,对我来说:/etc/spark2/conf/spark-defaults.conf