YARN 集群上的 PySpark 分布式处理

PySpark distributed processing on a YARN cluster

我在 Cloudera CDH5.3 集群上安装了 Spark 运行ning,使用 YARN 作为资源管理器。我正在 Python (PySpark) 中开发 Spark 应用程序。

我可以提交工作并且他们 运行 成功,但是他们似乎从来没有 运行 在多台机器上(我提交的本地机器)。

我尝试了多种选择,比如将 --deploy-mode 设置为集群,将 --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

我可以做些什么来确保作业 运行s 在集群中并行?

PySpark 似乎没有 运行 在分布式模式下使用 Spark/YARN - 您需要将独立的 Spark 与 Spark 主服务器一起使用。在那种情况下,我的 PySpark 脚本 运行 在集群中非常好,每个 core/node.

有一个 Python 进程

你能交换命令的参数吗? spark-submit --deploy-mode client --master yarn-client atest.py

如果您看到命令的帮助文本:

火花提交

Usage: spark-submit [options] <app jar | python file>

我相信@MrChristine 是正确的——您指定的选项标志被传递给您的 python 脚本,而不是 spark-submit。此外,您需要指定 --executor-cores--num-executors,因为默认情况下它将 运行 在单个内核上并使用两个执行程序。

python 脚本在集群模式下不 运行 是不正确的。我不确定以前的版本,但这是在 Hortonworks 集群上的 spark 2.2 版本中执行的。

命令: spark-submit --master yarn --num-executors 10 --executor-cores 1 --driver-memory 5g /pyspark-example.py

Python代码:

from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext

conf = (SparkConf()
         .setMaster("yarn")
         .setAppName("retrieve data"))
sc = SparkContext(conf = conf)

sqlContext = SQLContext(sc)
parquetFile = sqlContext.read.parquet("/<hdfs-path>/*.parquet")

parquetFile.createOrReplaceTempView("temp")
df1 = sqlContext.sql("select * from temp limit 5")
df1.show()
df1.write.save('/<hdfs-path>/test.csv', format='csv', mode='append')
sc.stop()

输出:它很大所以我没有粘贴。但它 运行 非常完美。