是否将pyspark脚本提交到远程Spark服务器?

时间:2019-02-12 01:28:25

标签: apache-spark pyspark amazon-emr

这可能是一个非常愚蠢的问题,但是我找不到Google的答案。我编写了一个简单的pyspark ETL脚本,该脚本读取CSV并将其写入Parquet,如下所示:

var1   var2
a      1
b      1
c      1
d      2
e      2
f      3
g      3

要运行它,我在Docker中启动了一个本地Spark集群:

spark = SparkSession.builder.getOrCreate()
sqlContext = SQLContext(spark.sparkContext)
df = sqlContext.read.csv(input_filename)
df.write.parquet(output_path)

我运行Python脚本,它连接到此本地Spark集群,并且一切正常。

现在,我想在远程Spark集群(AWS EMR)上运行相同的脚本。初始化Spark上下文时,能否仅在某处指定远程IP地址?还是我误解了Spark的工作原理?

1 个答案:

答案 0 :(得分:2)

您可以通过指定远程主服务器的IP地址来创建Spark会话。

spark = SparkSession.builder.master("spark://<ip>:<port>").getOrCreate()

对于AWS EMR,不支持独立模式。您需要在客户端或群集模式下使用yarn,并将HADOOP_CONF_DIR指向本地服务器上的某个位置,该位置上存在/ etc / hadoop / conf中的所有文件。然后设置动态端口转发以连接到EMR群集。创建一个火花会话,例如:

spark = SparkSession.builder.master('yarn').config('spark.submit.deployMode', 'cluster').getOrCreate()

推荐https://aws.amazon.com/premiumsupport/knowledge-center/emr-submit-spark-job-remote-cluster/