首页 > 解决方案 > 如何向 Livy 提交 PySpark 和 Python 作业

问题描述

我正在尝试使用 /batches 端点向 Livy 提交 PySpark 作业,但我没有找到任何好的文档。生活很轻松,因为我们将 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 作业,其中包也有一些相对导入......有什么想法吗?

供参考,文件夹结构如下:

我想然后运行:

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

标签: apache-sparkpysparklivy

解决方案


您可以尝试传递 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”]

我尝试通过 bootstraping 将文件保存在主节点上,但注意到 Livy 会将请求随机发送到可能不存在文件的从节点。

您也可以将文件作为 .zip 传递,虽然我还没有尝试过


推荐阅读