Как отправить задания PySpark и Python в Livy - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь отправить задание PySpark в Livy, используя конечную точку / batches, но я не нашел хорошей документации. Жизнь была легкой, потому что мы отправляем скомпилированные Scala файлы JAR в 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. Ру
    • foo2.py
    • bar3
      • __ __ INIT. Ру
      • foo3.py

Я бы тогда хотел запустить:

from foo2 import ClassFoo
class_foo = ClassFoo(arg1, arg2)
class_foo.auto_run()

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Вы можете попробовать передать 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”]

Я попытался сохранить файлы на главном узле с помощью начальной загрузки,но заметил, что Ливи будет отправлять запрос случайным образом на подчиненные узлы, где файлы могут отсутствовать.

Также вы можете передавать файлы в формате .zip, хотя я не пробовал

0 голосов
/ 03 июня 2019

Вы должны отправить с file, являющимся основным исполняемым файлом Python, и pyFiles, являющимся используемыми дополнительными внутренними библиотеками.Я бы посоветовал предоставить серверу загрузочное действие, которое скопирует ваши собственные библиотеки и установит библиотеки pip-устанавливаемые на мастер и узлы.

...