yarn-cluster 模式下的 Pyspark
Pyspark on yarn-cluster mode
有什么方法可以在不使用 spark-submit 脚本的情况下使用 yarn-cluster 模式 运行 pyspark 脚本吗?我以这种方式需要它,因为我会将这段代码集成到 Django 网络应用程序中。
当我尝试 运行 yarn-cluster 模式下的任何脚本时,出现以下错误:
org.apache.spark.SparkException: Detected yarn-cluster mode, but isn't running on a cluster. Deployment to YARN is not supported directly by SparkContext. Please use spark-submit.
我正在通过以下方式创建 sparkContext:
conf = (SparkConf()
.setMaster("yarn-cluster")
.setAppName("DataFrameTest"))
sc = SparkContext(conf = conf)
#Dataframe code ....
谢谢
不支持 yarn-cluster
模式的原因是 yarn-cluster
意味着将驱动程序本身(例如使用 SparkContext 调用的程序)引导到 YARN 容器上。从您关于从 django web 应用程序提交的声明中猜测,听起来您希望包含 SparkContext 的 python 代码嵌入到 web 应用程序本身中,而不是将驱动程序代码发送到 YARN 容器中,然后处理一个单独的 spark 作业。
这意味着您的案例最适合 yarn-client
模式而不是 yarn-cluster
;在 yarn-client
模式下,您可以在任何地方 运行 您的 SparkContext 代码(例如在您的网络应用程序内部),同时它与 YARN 对话以获取 运行 宁作业的实际机制。
从根本上说,如果您在 Web 应用程序和 Spark 代码之间共享任何内存中状态,这意味着您将无法将 Spark 部分切断到 YARN 容器内的 运行 ,这就是 yarn-cluster
试图做的。如果您不共享状态,那么您可以简单地调用一个子进程,该子进程实际上会调用 spark-submit
以 yarn-cluster
模式将独立的 PySpark 作业捆绑到 运行。
总结一下:
- 如果您想将您的 Spark 代码直接嵌入到您的网络应用程序中,您需要改用
yarn-client
模式:SparkConf().setMaster("yarn-client")
- 如果 Spark 代码足够松散以至于
yarn-cluster
实际上可行,您可以发出 Python subprocess 以在 [=10= 中实际调用 spark-submit
]模式。
有什么方法可以在不使用 spark-submit 脚本的情况下使用 yarn-cluster 模式 运行 pyspark 脚本吗?我以这种方式需要它,因为我会将这段代码集成到 Django 网络应用程序中。
当我尝试 运行 yarn-cluster 模式下的任何脚本时,出现以下错误:
org.apache.spark.SparkException: Detected yarn-cluster mode, but isn't running on a cluster. Deployment to YARN is not supported directly by SparkContext. Please use spark-submit.
我正在通过以下方式创建 sparkContext:
conf = (SparkConf()
.setMaster("yarn-cluster")
.setAppName("DataFrameTest"))
sc = SparkContext(conf = conf)
#Dataframe code ....
谢谢
不支持 yarn-cluster
模式的原因是 yarn-cluster
意味着将驱动程序本身(例如使用 SparkContext 调用的程序)引导到 YARN 容器上。从您关于从 django web 应用程序提交的声明中猜测,听起来您希望包含 SparkContext 的 python 代码嵌入到 web 应用程序本身中,而不是将驱动程序代码发送到 YARN 容器中,然后处理一个单独的 spark 作业。
这意味着您的案例最适合 yarn-client
模式而不是 yarn-cluster
;在 yarn-client
模式下,您可以在任何地方 运行 您的 SparkContext 代码(例如在您的网络应用程序内部),同时它与 YARN 对话以获取 运行 宁作业的实际机制。
从根本上说,如果您在 Web 应用程序和 Spark 代码之间共享任何内存中状态,这意味着您将无法将 Spark 部分切断到 YARN 容器内的 运行 ,这就是 yarn-cluster
试图做的。如果您不共享状态,那么您可以简单地调用一个子进程,该子进程实际上会调用 spark-submit
以 yarn-cluster
模式将独立的 PySpark 作业捆绑到 运行。
总结一下:
- 如果您想将您的 Spark 代码直接嵌入到您的网络应用程序中,您需要改用
yarn-client
模式:SparkConf().setMaster("yarn-client") - 如果 Spark 代码足够松散以至于
yarn-cluster
实际上可行,您可以发出 Python subprocess 以在 [=10= 中实际调用spark-submit
]模式。