无法在 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 作业时,只有一个节点承担负载。

设置

我复制了一堆 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

这给节点带来了这个负载: