#apache-spark #pyspark #livy
#apache-spark #pyspark #livy
Вопрос:
Я пытаюсь отправить задание PySpark в Livy, используя конечную точку / batches, но я не нашел никакой хорошей документации. Жизнь была легкой, потому что мы отправляем JAR-файлы, скомпилированные на Scala, в Livy и указываем задание с помощью className.
Для файла JAR мы используем:
data={
'file': 's3://foo-bucket/bar.jar',
'className': 'com.foo.bar',
'jars': [
's3://foo-bucket/common.jar',
],
'args': [
bucket_name,
'https://foo.bar.com',
"oof",
spark_master
],
'name': 'foo-oof bar',
'driverMemory': '2g',
'executorMemory': '2g',
'driverCores': 1,
'executorCores': 3,
'conf': {
'spark.driver.memoryOverhead': '600',
'spark.executor.memoryOverhead': '600',
'spark.submit.deployMode': 'cluster'
}
Я не уверен, как отправить задание PySpark аналогичным образом, где в пакете также есть некоторые относительные импорта…есть мысли?
Для справки структура папок приведена ниже:
-
bar2
- __init__.py
- foo2.py
- bar3
- __init__.py
- foo3.py
Я хотел бы затем запустить:
from foo2 import ClassFoo
class_foo = ClassFoo(arg1, arg2)
class_foo.auto_run()
Комментарии:
1. Никто не ответил? Я также пытаюсь выяснить, как отправлять задания pyspark с зависимостями python через Livy.
Ответ №1:
Вы можете попробовать передавать pyFiles
data={
'file': 's3://foo-bucket/bar.jar',
'className': 'com.foo.bar',
'jars': [
's3://foo-bucket/common.jar',
],
"pyFiles": ["s3://<busket>/<folder>/foo2.py", "s3://<busket>/<folder>/foo3.py”]
'args': [
bucket_name,
'https://foo.bar.com',
"oof",
spark_master
],
'name': 'foo-oof bar',
'driverMemory': '2g',
'executorMemory': '2g',
'driverCores': 1,
'executorCores': 3,
'conf': {
'spark.driver.memoryOverhead': '600',
'spark.executor.memoryOverhead': '600',
'spark.submit.deployMode': 'cluster'
}
В приведенном выше примере
"pyFiles": ["s3://<busket>/<folder>/foo2.py", "s3://<busket>/<folder>/foo3.py”]
Я попытался сохранить файлы на главном узле с помощью начальной загрузки, но заметил, что Livy случайным образом отправляет запрос на подчиненные узлы, где файлы могут отсутствовать.
Также вы можете передавать файлы в формате .zip, хотя я этого не пробовал
Ответ №2:
Вам нужно отправить, file
будучи основным исполняемым файлом Python и pyFiles
являясь дополнительными внутренними библиотеками, которые используются. Мой совет состоял бы в том, чтобы предоставить серверу действие bootstrap, которое копирует ваши собственные библиотеки и устанавливает библиотеки, устанавливаемые с помощью pip, на master и узлах.