我想使用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
是访问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
命令,以便在's executed by Livy. At first glance, it seems like this should be possible by adding arguments to the JSON dictionary. Unfortunately, these aren'通过时包含 --master yarn-cluster
.
有谁知道如何将 --master yarn-cluster
传递给Livy,以便在YARN上执行作业而不制作systemwide changes?
2 回答
我最近尝试过类似你问题的东西 . 我需要向Livy的API发送HTTP请求,而Livy已经安装在集群(YARN)中,然后我想让Livy启动Spark工作 .
我打电话给Livy的命令不包括
--master yarn-cluster
,但这似乎对我有用 . 也许您可以尝试将JAR文件放在本地而不是群集中?spark.master = yarn-cluster
把它设置在spark conf中,对我来说:/etc/spark2/conf/spark-defaults.conf