2015-01-30 3 views
8

나는 자원 관리자로 YARN을 사용하여 Cloudera CDH5.3 클러스터에서 Spark를 실행합니다. Python (PySpark)에서 Spark 앱을 개발 중입니다.YARN 클러스터에서 PySpark 분산 처리

작업을 제출할 수 있으며 성공적으로 실행되지만 둘 이상의 컴퓨터 (제출 한 로컬 컴퓨터)에서 실행되는 것처럼 보이지는 않습니다.

클러스터에 --deploy-mode를 설정하고 --master와 원사 - 클러스터를 설정하는 것과 같은 다양한 옵션을 시도했지만 아직 둘 이상의 서버에서 실행되는 것처럼 보이지는 않습니다.

--master local [8]과 같이 전달하여 하나 이상의 코어에서 실행할 수는 있지만 여러 노드에서 처리가 분배되지 않습니다.

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

그리고 같은 제출 명령을 실행하고 있습니다 :

그래서 같은 HDFS에서 매우 간단하게 파이썬 스크립트 처리 데이터가 내가 작업 실행을 보장하기 위해 할 수있는 일

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

클러스터에서 병렬로?

답변

8

명령에 대한 인수를 바꿀 수 있습니까?

내가 믿는

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

PySpark가 Spark/YARN을 사용하는 분산 모드로 실행되지 않는 것 같습니다. Spark Master 서버가있는 독립 실행 형 Spark를 사용해야합니다. 이 경우, PySpark 스크립트는 코어/노드 당 파이썬 프로세스를 통해 클러스터에서 매우 잘 실행되었습니다.

+4

이것이 사실이 아니라고 생각합니다. Pyspark는 원사 클러스터에서 작동 할 수 있습니다. –

+0

Pyspark를 실행하려면. 시도해보십시오 : pyspark --deploy-mode client --master yarn-client – kennyut

4

을 스파크 제출 @ 명령에 대한 도움말 텍스트를 볼 경우

atest.py 원사 클라이언트 --master --deploy 모드 클라이언트를 스파크 제출 MrChristine은 정확합니다. 지정한 옵션 플래그가 파이썬 스크립트에 전달되고 스파크 제출에는 전달되지 않습니다. 또한 기본적으로 단일 코어에서 실행되고 두 개의 실행 프로그램을 사용하기 때문에 --executor-cores--num-executors을 지정하려고합니다.

0

python 스크립트가 클러스터 모드로 실행되지 않는다는 것은 사실이 아닙니다. 나는 이전 버전에 대해 확신하지 못했지만 이것은 Hortonworks 클러스터의 2.2 버전에서 실행됩니다.

명령 : --master 원사 --num-집행 10 --executor 코어 1 --driver 메모리 5g의 /pyspark-example.py

파이썬 코드를 스파크 제출

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

출력 : 너무 커서 붙여 넣을 수 없습니다. 그러나 완벽하게 실행됩니다.

관련 문제