Я хочу выполнить задание Spark через HTTP-вызов извне кластера с помощью Livy, где Spark jar уже существует в HDFS.
Я могу spark-submit
выполнить задание из оболочки на узлах кластера, например:
spark-submit --class io.woolford.Main --master yarn-cluster hdfs://hadoop01:8020/path/to/spark-job.jar
Обратите внимание, что --master yarn-cluster
необходим для доступа к HDFS, где находится jar.
Я также могу отправлять команды через Ливи, используя 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
, когда она выполняется Ливи. На первый взгляд кажется, что это можно сделать, добавив аргументы в словарь JSON. К сожалению, они не проходят.
Кто-нибудь знает, как передать --master yarn-cluster
Livy, чтобы задания выполнялись в YARN без создания общесистемные изменения?