【问题标题】:PySpark distributed processing on a YARN clusterYARN 集群上的 PySpark 分布式处理
【发布时间】:2015-01-30 05:06:27
【问题描述】:

我在 Cloudera CDH5.3 集群上运行 Spark,使用 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

如何确保作业在集群中并行运行?

【问题讨论】:

    标签: apache-spark hadoop-yarn cloudera-cdh pyspark


    【解决方案1】:

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

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

    火花提交

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        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()
        

        输出:它很大,所以我不粘贴。但它运行完美。

        【讨论】:

          【解决方案4】:

          PySpark 似乎无法使用 Spark/YARN 在分布式模式下运行 - 您需要将独立的 Spark 与 Spark Master 服务器一起使用。在这种情况下,我的 PySpark 脚本在集群中运行得非常好,每个核心/节点都有一个 Python 进程。

          【讨论】:

          • 我猜这不是真的,Pyspark 可以在 yarn 集群上运行。
          • 如果你想运行 Pyspark。试试:pyspark --deploy-mode client --master yarn-client
          猜你喜欢
          • 1970-01-01
          • 2015-01-08
          • 1970-01-01
          • 2021-12-22
          • 1970-01-01
          • 2018-08-01
          • 1970-01-01
          • 2017-08-14
          • 2021-09-19
          相关资源
          最近更新 更多