我使用YARN作为资源管理器,在Cloudera CDH5.3集群上运行Spark . 我正在用Python(PySpark)开发Spark应用程序 .
我可以提交作业并且它们成功运行,但是它们似乎永远不会在多台机器上运行(我提交的本地机器) .
我尝试了各种选项,比如将--deploy-mode设置为cluster,将master设置为yarn-client和yarn-cluster,但它似乎永远不会在多个服务器上运行 .
通过传递类似--master local [8]的东西,我可以让它在多个核心上运行,但这显然不会在多个节点上分配处理 .
我有一个非常简单的Python脚本处理来自HDFS的数据,如下所示:
import simplejson as json
from pyspark import SparkContext
sc = SparkContext("", "Joe Counter")
rrd = sc.textFile("hdfs:///tmp/twitter/json/data/")
data = rrd.map(lambda line: json.loads(line))
joes = data.filter(lambda tweet: "Joe" in tweet.get("text",""))
print joes.count()
我正在运行一个提交命令,如:
spark-submit atest.py --deploy-mode client --master yarn-client
我该怎么做才能确保作业在整个群集中并行运行?
4 回答
你可以交换命令的参数吗? spark-submit --deploy-mode client --master yarn-client atest.py
如果您看到该命令的帮助文本:
spark-submit
我相信@MrChristine是正确的 - 你指定的选项标志被传递给你的python脚本,而不是spark-submit . 此外,您还需要指定
--executor-cores
和--num-executors
,因为默认情况下它将在单个核心上运行并使用两个执行程序 .不正确的是python脚本不能在集群模式下运行 . 我不确定以前的版本,但这是在Hortonworks集群的spark 2.2版本中执行 .
Command : spark-submit --master yarn --num-executors 10 --executor-cores 1 --driver-memory 5g /pyspark-example.py
Python Code :
Output : 它很大,所以我不会粘贴 . 但它运行完美 .
似乎PySpark不使用Spark / YARN在分布式模式下运行 - 您需要将独立Spark与Spark Master服务器一起使用 . 在这种情况下,我的PySpark脚本在整个集群中运行得非常好,每个核心/节点都有一个Python进程 .