我想通过使用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-cluster
Livy 执行它的时间。乍一看,这似乎可以通过向 JSON 字典添加参数来实现。不幸的是,这些都没有通过。
有谁知道如何传递--master yarn-cluster
给 Livy 以便在 YARN 上执行作业而不进行系统范围的更改?