摘要:我无法在hadoop集群的所有节点上运行pythonspark作业。我已经为hadoop安装了spark'spark-1.5.2-bin-hadoop2.6'。当启动javaspark作业时,负载分布在所有节点上,当启动pythonsark作业时,只有一个节点承担负载。
设置:
hdfs和yarn为4个节点配置:nk01(namenode)、nk02、nk03、nk04,在xen虚拟服务器上运行
版本:jdk1.8.0\u66、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版本也在所有节点上分配负载?
2条答案
按热度按时间bfnvny8b1#
spark提交
这里有一些与scala/java提交不同的参数位置。
对于python应用程序,只需传递一个.py文件来代替应用程序jar而不是jar,然后使用--py文件将python.zip、.egg或.py文件添加到搜索路径中。
您应该改用以下命令:
/opt/spark/bin/spark submit--master warn cluster wordcount.py--num executors 4--executor cores 1
emeijp432#
正如shawn guo所建议的那样,python程序名确实位于错误的位置。它应该这样运行:
在节点上提供此负载: