Как запустить нескомпилированный код Spark Scala / spark-shell в качестве задания Datapro c? - PullRequest
4 голосов
/ 09 марта 2020

Обычно, если я использую Scala для заданий Spark, я скомпилирую jarfile и отправлю его с gcloud dataproc jobs submit spark, но иногда для очень легких заданий я могу использовать некомпилированный код Scala в блокноте или использовать spark-shell REPL, где я предполагаю, что SparkContext уже доступен.

Для некоторых из этих простых случаев использования я могу эквивалентно использовать PySpark и отправлять с gcloud dataproc jobs submit pyspark, но иногда мне требуется более легкий доступ к Scala / Java библиотеки, такие как непосредственное создание объекта org.apache.hadoop.fs.FileSystem внутри функций карты. Есть ли какой-нибудь простой способ отправить такие эквивалентные задания «спарк-оболочка» непосредственно из командной строки, используя Datapro c Jobs API?

1 Ответ

2 голосов
/ 09 марта 2020

На данный момент нет специализированного Datapro верхнего уровня c Тип задания для некомпилированного Spark Scala, но под капотом spark-shell просто использует те же механизмы, что и spark-submit для запуска специализированный драйвер REPL: org.apache.spark.repl.Main. Таким образом, комбинируя это с флагом --files, доступным в gcloud dataproc jobs submit spark, вы можете просто написать фрагменты Scala, которые вы, возможно, протестировали в сеансе spark-shell или в записной книжке, и запустить его как всю работу Datapro c. при условии, что job.scala является локальным файлом на вашем компьютере:

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files job.scala \
    -- -i job.scala

Как и любой другой файл, вы также можете указать любой Had oop -совместимый путь в аргументе --files, например, как gs:// или даже hdfs://, при условии, что вы уже поместили туда свой файл job.scala:

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files gs://${BUCKET}/job.scala \
    -- -i job.scala

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files hdfs:///tmp/job.scala \
    -- -i job.scala

Если вы разместили файл задания на главном узле Datapro c через При выполнении действия init вы должны использовать file:///, чтобы указать, что файл находится в локальной файловой системе кластера, а не в локальной файловой системе, в которой вы запускаете gcloud:

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files file:///tmp/job.scala \
    -- -i job.scala

Обратите внимание, что во всех случаях файл становится локальным файлом в рабочем каталоге основного задания драйвера, поэтому аргумент «-i» может быть просто относительным путем к имени файла.

...