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

2vuwiymt  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(412)

摘要:我无法在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版本也在所有节点上分配负载?

bfnvny8b

bfnvny8b1#

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提交不同的参数位置。
对于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

emeijp43

emeijp432#

正如shawn guo所建议的那样,python程序名确实位于错误的位置。它应该这样运行:

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

在节点上提供此负载:

相关问题