上下文 群集配置如下:
问题: 我正在尝试在pyspark jupyter笔记本中创建一个以集群部署模式运行的spark会话。我正在尝试让驱动程序在不是运行jupyter笔记本的节点的节点上运行。现在我可以在集群上运行作业,但只能在node2上运行驱动程序。
经过大量挖掘后,我发现这个声称如果你运行带有spark的交互式shell,你只能在本地部署模式下运行(驱动程序位于你正在处理的机器上) 。该帖子继续说像jupyter hub这样的结果也不会在集群部署模式下工作,但是我找不到任何可以证实这一点的文档。有人可以确认jupyter hub是否可以在集群模式下运行吗?
我尝试在群集部署模式下运行spark会话:
/usr/spark/python/pyspark/sql/session.py in getOrCreate(self)
167 for key, value in self._options.items():
168 sparkConf.set(key, value)
--> 169 sc = SparkContext.getOrCreate(sparkConf)
170 # This SparkContext may be an existing one.
171 for key, value in self._options.items():
/usr/spark/python/pyspark/context.py in getOrCreate(cls, conf)
308 with SparkContext._lock:
309 if SparkContext._active_spark_context is None:
--> 310 SparkContext(conf=conf or SparkConf())
311 return SparkContext._active_spark_context
312
/usr/spark/python/pyspark/context.py in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls)
113 """
114 self._callsite = first_spark_call() or CallSite(None, None, None)
--> 115 SparkContext._ensure_initialized(self, gateway=gateway, conf=conf)
116 try:
117 self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer,
/usr/spark/python/pyspark/context.py in _ensure_initialized(cls, instance, gateway, conf)
257 with SparkContext._lock:
258 if not SparkContext._gateway:
--> 259 SparkContext._gateway = gateway or launch_gateway(conf)
260 SparkContext._jvm = SparkContext._gateway.jvm
261
/usr/spark/python/pyspark/java_gateway.py in launch_gateway(conf)
93 callback_socket.close()
94 if gateway_port is None:
---> 95 raise Exception("Java gateway process exited before sending the driver its port number")
96
97 # In Windows, ensure the Java child processes do not linger after Python has exited.
Exception: Java gateway process exited before sending the driver its port number
错误:
type
答案 0 :(得分:1)
You cannot use cluster mode with PySpark at all:
目前,独立模式不支持Python应用程序的集群模式。
即使你可以cluster mode is not applicable in interactive environment:
case (_, CLUSTER) if isShell(args.primaryResource) =>
error("Cluster deploy mode is not applicable to Spark shells.")
case (_, CLUSTER) if isSqlShell(args.mainClass) =>
error("Cluster deploy mode is not applicable to Spark SQL shell.")
答案 1 :(得分:0)
我不是PySpark的专家,但您是否尝试更改pyspark jupyter内核的kernel.json文件?
也许您可以在其中添加选项部署模式群集
"env": {
"SPARK_HOME": "/your_dir/spark",
"PYTHONPATH": "/your_dir/spark/python:/your_dir/spark/python/lib/py4j-0.9-src.zip",
"PYTHONSTARTUP": "/your_dir/spark/python/pyspark/shell.py",
"PYSPARK_SUBMIT_ARGS": "--master local[*] pyspark-shell"
}
你改变了这一行:
"PYSPARK_SUBMIT_ARGS": "--master local[*] pyspark-shell"
使用群集主IP和 - 部署模式群集
不确定会改变什么,但也许这样可行,我也很想知道!
祝你好运 编辑:我发现即使从2015年开始,这也许可以帮助你。答案 2 :(得分:0)
Jupyter
中间接使用 yarn-cluster 模式的一种“受支持”方式
通过
Apache Livy 基本上,Livy
是Spark
集群的REST API服务。
Jupyter
的扩展名“ spark-magic”允许将Livy
与Jupyter
绑定了Jupyter
的{{1}}的示例(如上所述,驱动程序在纱线簇中运行,而不是在本地运行):
在Jupyter中使用Spark-magic
模式的另一种方法是使用YARN-cluster
https://jupyter-enterprise-gateway.readthedocs.io/en/latest/kernel-yarn-cluster-mode.html#configuring-kernels-for-yarn-cluster-mode
还有一些商业选项通常使用我上面列出的方法之一。例如,我们的某些用户在IBM DSX(又名IBM Watson Studio Local)上使用Jupyter Enterprise Gateway
-上面的第一个选项。