无法在 hadoop 集群的所有节点上将 pyspark 作业发送到 运行
Can't get pyspark job to run on all nodes of hadoop cluster
总结:我无法在 所有 节点上将我的 python-spark 作业发送到 运行我的 hadoop 集群。
我已经为 hadoop 安装了 spark 'spark-1.5.2-bin-hadoop2.6'。启动 java spark 作业时,负载得到
分布在所有节点上,启动 python spark 作业时,只有一个节点承担负载。
设置:
- 为 4 个节点配置的 hdfs 和 yarn:nk01(名称节点)、nk02、nk03、nk04、运行在 xen 虚拟服务器上的 ning
- 版本:jdk1.8.0_66、hadoop-2.7.1、spark-1.5.2-bin-hadoop2.6
- hadoop 安装了所有 4 个节点
- spark 仅安装在 nk01 上
我复制了一堆 Gutenberg 文件(谢谢你,Johannes!)到 hdfs 上,并尝试使用 java 和 python 对文件的子集(开始的文件'e') :
Python:
使用自制 python 脚本进行字数统计:
/opt/spark/bin/spark-submit wordcount.py --master yarn-cluster \
--num-executors 4 --executor-cores 1
Python 代码分配了 4 个部分:
tt=sc.textFile('/user/me/gutenberg/text/e*.txt',4)
60 秒内 4 个节点上的负载:
Java:
使用在 spark 分布中找到的 JavaWordCount:
/opt/spark/bin/spark-submit --class JavaWordCount --master yarn-cluster \
--num-executors 4 jwc.jar '/user/me/gutenberg/text/e*.txt'
结论:java 版本将其负载分布在集群中,python 版本仅在 1 个节点上 运行s。
问题:如何获得 python 版本以在所有节点之间分配负载?
Spark 提交
./bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
这里有一些与scala/java提交参数位置不同的地方。
For Python applications, simply pass a .py file in the place of
application-jar instead of a JAR, and add Python .zip, .egg or .py files to the search path with --py-files.
您应该改用以下命令:
/opt/spark/bin/spark-submit --master yarn-cluster wordcount.py
--num-executors 4 --executor-cores 1
python-程序名确实是错误的位置,正如Shawn Guo所建议的那样。应该是 运行 这样的:
/opt/spark/bin/spark-submit --master yarn-cluster --num-executors 4
--executor-cores 1 wordcount.py
这给节点带来了这个负载:
总结:我无法在 所有 节点上将我的 python-spark 作业发送到 运行我的 hadoop 集群。 我已经为 hadoop 安装了 spark 'spark-1.5.2-bin-hadoop2.6'。启动 java spark 作业时,负载得到 分布在所有节点上,启动 python spark 作业时,只有一个节点承担负载。
设置:
- 为 4 个节点配置的 hdfs 和 yarn:nk01(名称节点)、nk02、nk03、nk04、运行在 xen 虚拟服务器上的 ning
- 版本:jdk1.8.0_66、hadoop-2.7.1、spark-1.5.2-bin-hadoop2.6
- hadoop 安装了所有 4 个节点
- spark 仅安装在 nk01 上
我复制了一堆 Gutenberg 文件(谢谢你,Johannes!)到 hdfs 上,并尝试使用 java 和 python 对文件的子集(开始的文件'e') :
Python:
使用自制 python 脚本进行字数统计:
/opt/spark/bin/spark-submit wordcount.py --master yarn-cluster \
--num-executors 4 --executor-cores 1
Python 代码分配了 4 个部分:
tt=sc.textFile('/user/me/gutenberg/text/e*.txt',4)
60 秒内 4 个节点上的负载:
Java:
使用在 spark 分布中找到的 JavaWordCount:
/opt/spark/bin/spark-submit --class JavaWordCount --master yarn-cluster \
--num-executors 4 jwc.jar '/user/me/gutenberg/text/e*.txt'
结论:java 版本将其负载分布在集群中,python 版本仅在 1 个节点上 运行s。
问题:如何获得 python 版本以在所有节点之间分配负载?
Spark 提交
./bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
这里有一些与scala/java提交参数位置不同的地方。
For Python applications, simply pass a .py file in the place of application-jar instead of a JAR, and add Python .zip, .egg or .py files to the search path with --py-files.
您应该改用以下命令:
/opt/spark/bin/spark-submit --master yarn-cluster wordcount.py
--num-executors 4 --executor-cores 1
python-程序名确实是错误的位置,正如Shawn Guo所建议的那样。应该是 运行 这样的:
/opt/spark/bin/spark-submit --master yarn-cluster --num-executors 4
--executor-cores 1 wordcount.py
这给节点带来了这个负载: