我正在尝试使用/ 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作业,该程序包中还包含一些相对的输入...有什么想法吗?
作为参考,文件夹结构如下:
bar2
然后我想运行:
from foo2 import ClassFoo
class_foo = ClassFoo(arg1, arg2)
class_foo.auto_run()
答案 0 :(得分: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格式传递,尽管我还没有尝试过
答案 1 :(得分:0)
您需要提交file
是主要的Python可执行文件,而pyFiles
是正在使用的其他内部库。我的建议是为服务器提供引导操作,该操作将复制您自己的库,并在主服务器和节点上安装pip可安装的库。