这可能是一个非常愚蠢的问题,但是我找不到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的工作原理?
答案 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/