无法在hadoop集群的所有节点上运行pyspark作业

时间:2015-12-16 10:57:26

标签: hadoop apache-spark pyspark

摘要:我无法让我的python-spark作业在我的hadoop集群的所有节点上运行。 我为hadoop安装了火花&spark; 1.5.2-bin-hadoop2.6'。启动java spark作业时,负载得到 分布在所有节点上,当启动python spark作业时,只有一个节点负载。

设置

  • 为4个节点配置的hdfs和yarn:nk01(namenode),nk02,nk03,nk04,在xen虚拟服务器上运行
  • 版本:jdk1.8.0_66,hadoop-2.7.1,spark-1.5.2-bin-hadoop2.6
  • hadoop安装了所有4个节点
  • spark仅安装在nk01

我将一堆Gutenberg文件(谢谢你,Johannes!)复制到hdfs上,并尝试在文件的一个子集上使用java和python进行wordcount(以' e' ):

的Python

使用自制的python脚本来执行wordcount:

/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个节点:

load

爪哇

使用火花分布中的 JavaWordCount

/opt/spark/bin/spark-submit --class JavaWordCount --master yarn-cluster \
    --num-executors 4 jwc.jar '/user/me/gutenberg/text/e*.txt'

load

结论:java版本在集群中分配负载,python版本只在1个节点上运行。

问题:如何让python版本在所有节点上分配负载?

2 个答案:

答案 0 :(得分:5)

根据Shawn Guo的建议,蟒蛇计划的名字确实处于错误的位置。它应该以这种方式运行:

/opt/spark/bin/spark-submit --master yarn-cluster --num-executors 4 
       --executor-cores 1 wordcount.py

这会在节点上产生这种负载: enter image description here

答案 1 :(得分:3)

Spark-submit

./bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

以下是参数位置中scala / java提交的一些不同之处。

  

对于Python应用程序,只需传递一个.py文件即可    application-jar 而不是JAR,并使用--py-files将Python .zip,.egg或.py文件添加到搜索路径。

您应该使用以下命令:
/ opt / spark / bin / spark-submit --master yarn-cluster wordcount.py     --num-executors 4 --executor-cores 1