Запуск искровых заданий с помощью REST
Я в последнее время пробовал apache spark. Мой вопрос более специфичен для запуска искровых работ. Здесь я разместил вопрос о понимании искровых работ. После того, как я испачкался на работе, я перешел к своему требованию.
У меня есть конечная точка REST, где я предоставляю API для запуска заданий, я использовал Spring4.0 для Rest Rest. Теперь, продолжая, я подумал о реализации Jobs в качестве службы весной, где я буду отправлять Job программно, то есть при запуске конечной точки с заданными параметрами я буду запускать задание. У меня сейчас мало вариантов дизайна.
Как и в случае с нижеприведенной письменной работой, мне нужно сохранить несколько заданий, вызываемых абстрактным классом:
JobScheduler
,/*Can this Code be abstracted from the application and written as as a seperate job. Because my understanding is that the Application code itself has to have the addJars embedded which internally sparkContext takes care.*/ SparkConf sparkConf = new SparkConf().setAppName("MyApp").setJars( new String[] { "/path/to/jar/submit/cluster" }) .setMaster("/url/of/master/node"); sparkConf.setSparkHome("/path/to/spark/"); sparkConf.set("spark.scheduler.mode", "FAIR"); JavaSparkContext sc = new JavaSparkContext(sparkConf); sc.setLocalProperty("spark.scheduler.pool", "test"); // Application with Algorithm , transformations
Расширение вышеупомянутого пункта имеет несколько версий заданий, обрабатываемых службой.
Или используйте для этого Spark Job Server.
Во-первых, я хотел бы знать, что является лучшим решением в этом случае, с точки зрения исполнения и масштабирования.
Примечание: я использую автономный кластер от искры. любезно помогите.
4 ответа
Просто используйте Spark JobServer https://github.com/spark-jobserver/spark-jobserver
Есть много вещей, которые нужно учитывать при создании сервиса, и Spark JobServer уже охватил большинство из них. Если вы находите вещи, которые недостаточно хороши, должно быть легко сделать запрос и добавить код в свою систему, а не изобретать его заново
Оказывается, у Spark есть скрытый API REST для отправки задания, проверки статуса и уничтожения.
Проверьте полный пример здесь: http://arturmkrtchyan.com/apache-spark-hidden-rest-api
Livy - это REST-интерфейс с открытым исходным кодом для взаимодействия с Apache Spark из любой точки мира. Он поддерживает выполнение фрагментов кода или программ в контексте Spark, который выполняется локально или в Apache Hadoop YARN.
Вот хороший клиент, который вам может пригодиться: https://github.com/ywilkof/spark-jobs-rest-client
Даже у меня было это требование, я мог сделать это с помощью Livy Server, как упомянул один из участников проекта Хосеми. Ниже приведены шаги, которые я предпринял, надеюсь, это кому-то поможет:
Download livy zip from https://livy.apache.org/download/
Follow instructions: https://livy.apache.org/get-started/
Upload the zip to a client.
Unzip the file
Check for the following two parameters if doesn't exists, create with right path
export SPARK_HOME=/opt/spark
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
Enable 8998 port on the client
Update $LIVY_HOME/conf/livy.conf with master details any other stuff needed
Note: Template are there in $LIVY_HOME/conf
Eg. livy.file.local-dir-whitelist = /home/folder-where-the-jar-will-be-kept/
Run the server
$LIVY_HOME/bin/livy-server start
Stop the server
$LIVY_HOME/bin/livy-server stop
UI: <client-ip>:8998/ui/
Submitting job:POST : http://<your client ip goes here>:8998/batches
{
"className" : "<ur class name will come here with package name>",
"file" : "your jar location",
"args" : ["arg1", "arg2", "arg3" ]
}