apache-spark - 将 pyspark 脚本提交到远程 Spark 服务器?
问题描述
这可能是一个非常愚蠢的问题,但我无法通过谷歌找到答案。我编写了一个简单的 pyspark ETL 脚本,它读取 CSV 并将其写入 Parquet,如下所示:
spark = SparkSession.builder.getOrCreate()
sqlContext = SQLContext(spark.sparkContext)
df = sqlContext.read.csv(input_filename)
df.write.parquet(output_path)
为了运行它,我在 Docker 中启动了一个本地 Spark 集群:
$ docker run --network=host jupyter/pyspark-notebook
我运行 Python 脚本,它连接到这个本地 Spark 集群,一切都按预期工作。
现在我想在远程 Spark 集群 (AWS EMR) 上运行相同的脚本。我可以在初始化 Spark 上下文时在某处指定一个远程 IP 地址吗?还是我误解了 Spark 的工作原理?
解决方案
您可以通过指定远程主机的 IP 地址来创建火花会话。
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/
推荐阅读
- c++ - RGBmatrixPanel 库干扰 IRremote 库
- css - Safari 拉伸 flex 项目高度
- react-native - 即使使用 React.memo 也会重新渲染 FlatList 项目
- angular - BehaviorSubject 订阅未侦听值更改
- ktor - 如何获取 ktor 服务的服务器 IP/端口?
- composer-php - 作曲家:在 php 8 上移动后,您的要求无法解决为一组可安装的软件包
- php - 如何使用 Laravel 查询检查一个数字是否介于 2 个值之间
- reactjs - 取消 useEffect 清理函数中的所有订阅和异步任务 - 我做错了什么?
- angular - 在子组件Angular中注入从url获取的值
- python - 我们如何找到簇内两点之间的距离?