2

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

我可以spark-submit从集群节点上的 shell 完成工作,例如:

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

请注意,--master yarn-cluster访问 jar 所在的 HDFS 是必需的。

我还可以通过 Livy 提交命令,使用curl. 例如,这个请求:

curl -X POST --data '{"file": "/path/to/spark-job.jar", "className": "io.woolford.Main"}' -H "Content-Type: application/json" hadoop01:8998/batches

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

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-clusterLivy 执行它的时间。乍一看,这似乎可以通过向 JSON 字典添加参数来实现。不幸的是,这些都没有通过。

有谁知道如何传递--master yarn-cluster给 Livy 以便在 YARN 上执行作业而不进行系统范围的更改

4

2 回答 2

0

我最近尝试了与您的问题类似的事情。我需要向 Livy 的 API 发送一个 HTTP 请求,而 Livy 已经安装在一个集群(YARN)中,然后我想让 Livy 启动一个 Spark 作业。

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

于 2017-03-06T04:00:40.057 回答
0

spark.master = 纱线集群

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

于 2017-06-08T11:38:59.760 回答