Распределенная обработка PySpark на кластере пряжи

У меня есть искра, работающая на Cloudera CDH5.3 кластер, используя YARN в качестве менеджера ресурсов. Я разрабатываю приложения Spark в Python (PySpark).

Я могу отправить задания, и они работают успешно, однако они никогда не работают на более чем одной машине (локальная машина, с которой я отправляю).

Я пробовал различные варианты, такие как настройка --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()

и я запускаю команду submit, такую как:

spark-submit atest.py --deploy-mode client --master yarn-client

что я могу сделать, чтобы обеспечить параллельное выполнение задания в кластере?

4 ответов


можете ли вы поменять аргументы для команды? СПАРК-представить-развернуть-режиме клиент-мастер пряжа-клиент atest.py

Если вы видите текст справки для команды:

Искра-представить

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

Я считаю, что @MrChristine правильно - флаги опции, которые вы указываете, передаются вашему скрипту python, а не spark-submit. Кроме того, вы захотите указать --executor-cores и --num-executors так как по умолчанию он будет работать на одном ядре и использовать двух исполнителей.


неверно, что скрипт python не работает в режиме кластера. Я не уверен в предыдущих версиях, но это выполняется в версии spark 2.2 в кластере Hortonworks.

: spark-submit --master yarn --num-исполнители 10 --исполнитель-ядра 1 --драйвер-память 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()

выход : его большой, поэтому я не вставляю. Но он работает идеально.


кажется, что PySpark не работает в распределенном режиме с помощью Spark/YARN - вам нужно использовать автономную Spark с сервером Spark Master. В этом случае мой скрипт PySpark очень хорошо работал в кластере с процессом Python на ядро/узел.