摘要:我无法让我的python-spark作业在hadoop集群的所有节点上运行。我已经安装了hadoop'spark-1.5.2-bin-hadoop2.6'的火花。启动java spark作业时,负载分布在所有节点上,而启动python spark作业时,只有一个节点承担负载。
设置:
为xen虚拟服务器上运行的4个节点配置的hdfs和yarn:nk01(namenode),nk02,nk03,nk04
版本:jdk1.8.0_66,hadoop-2.7.1,spark-1.5.2-bin-hadoop2.6
hadoop已安装所有4个节点
仅在nk01上安装了spark
我将一堆古腾堡文件(谢谢约翰内斯!)复制到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个节点上运行。
问题:如何同时获得python版本以在所有节点之间分配负载?
正如肖恩·郭(Shawn Guo)所建议的那样,Python程序名称的位置确实错误。应该以这种方式运行:
/opt/spark/bin/spark-submit --master yarn-cluster --num-executors 4 --executor-cores 1 wordcount.py
这会在节点上产生此负载: