HDFS 使用Spark-Submit在“本地”模式下使用S3 A目录提交程序写入S3

whhtz7ly  于 2022-12-09  发布在  HDFS
关注(0)|答案(1)|浏览(286)

我目前正在本地模式下运行PySpark。我希望能够通过S3 Directory Committer高效地将parquet文件输出到S3。这个PySpark示例使用的是本地磁盘,而不是HDFS,因为它是通过spark-submit --master local[*]提交的。
我可以在不启用目录提交程序的情况下成功地写入我的S3示例。但是,这涉及到将暂存文件写入S3并对其进行重命名,这是缓慢且不可靠的。我希望Spark写入我的本地文件系统作为临时存储,然后复制到S3。
在我的PySpark conf中有以下配置:

self.spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
self.spark.conf.set("spark.hadoop.fs.s3a.committer.name", "directory")
self.spark.conf.set("spark.sql.sources.commitProtocolClass", "org.apache.spark.internal.io.cloud.PathOutputCommitProtocol")
self.spark.conf.set("spark.sql.parquet.output.committer.class", "org.apache.spark.internal.io.cloud.BindingParquetOutputCommitter")

我的spark-submit命令如下所示:

spark-submit --master local[*] --py-files files.zip --packages com.amazonaws:aws-java-sdk:1.11.375,org.apache.hadoop:hadoop-aws:3.2.0,org.apache.spark.internal.io.cloud.PathOutputCommitProtocol --driver-memory 4G --name clean-raw-recording_data main.py

spark-submit出现以下错误,这是由于所需的JAR不存在:

java.lang.ClassNotFoundException: org.apache.spark.internal.io.cloud.PathOutputCommitProtocol

我的问题是:
1.为了能够引用PathOutputCommitProtocol,我需要在spark-submit --packages中包含哪个JAR(具体地说,maven坐标)?
1.一旦我有了(1)工作,我是否可以使用PySpark的本地模式在本地文件系统上暂存临时文件?或者HDFS是一个严格的要求?
我需要它在本地模式下运行,而不是在集群模式下运行。

编辑:

我得到了这个工作与以下配置:使用pyspark版本3.1.2和软件包
org.apache.spark:spark-hadoop-cloud_2.12:3.1.1.3.1.7270.0-253 .
我需要使用spark-submit--repositories选项添加cloudera存储库:

spark-submit --repositories https://repository.cloudera.com/artifactory/cloudera-repos/ --packages com.amazonaws:aws-java-sdk:1.11.375,org.apache.hadoop:hadoop-aws:3.2.0,org.apache.spark:spark-hadoop-cloud_2.12:3.1.1.3.1.7270.0-253
5gfr0r5j

5gfr0r5j1#

1.您需要spark-hadoop-cloud模块来发布您正在使用的spark
1.提交者很乐意使用本地fs(现在是公共集成测试套件work https://github.com/hortonworks-spark/cloud-integration)。所需要的只是一个在所有worker和spark驱动程序之间共享的“真实的”文件系统,因此驱动程序可以获得每个未决提交的清单。
1.在作业后打印_SUCCESS文件以查看提交者执行了什么操作:0字节文件==旧提交者,带诊断的JSON ==新提交者

相关问题