找不到 EmrOptimizedSparkSqlParquetOutputCommitter
EmrOptimizedSparkSqlParquetOutputCommitter not found
我正尝试按照以下概述的步骤启用 EmrOptimizedSparkSqlParquetOutputCommitter:
https://docs.amazonaws.cn/en_us/emr/latest/ReleaseGuide/emr-spark-committer-reqs.html
我正在使用 EMR 版本 5.23.0
我根据文档设置了以下配置选项(明确说明了配置值,尽管有些是默认值):
.config("spark.sql.hive.convertMetastoreParquet", "true")
.config("spark.sql.parquet.output.committer.class", "com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter")
.config("spark.sql.sources.commitProtocolClass", "org.apache.spark.sql.execution.datasources.SQLHadoopMapReduceCommitProtocol")
.config("spark.sql.sources.partitionOverwriteMode", "static")
.config("spark.sql.parquet.fs.optimized.committer.optimization-enabled", "true")
并在我的 spark (scala) 应用程序中具有以下依赖项
"com.amazonaws" % "aws-java-sdk" % "1.11.598" % "provided"
"com.amazonaws" % "aws-java-sdk-s3" % "1.11.598"
但是在部署应用程序时出现以下错误:
java.lang.RuntimeException:
java.lang.ClassNotFoundException:
Class com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter not found
我无法在任何地方找到该提交者所在库的引用。因此,我猜测它存在于上述 aws java sdk 依赖项之一中。我缺少依赖项吗?此外,spark 应用程序是否是提供此提交者 class 的正确位置?谢谢!
编辑:
还尝试按照@Lamanus 的建议添加 aws-java-sdk-emr
依赖项,但抛出相同的错误。
我遇到了https://github.com/aws/aws-sdk-java,幸运的是java sdk 是开源的。我没有看到对 EmrOptimizedSparkSqlParquetOutputCommitter
的引用,这向我建议应该将 to/by 集群提供。
问题出在远程 EC2 实例向 EMR 主机提交的 spark 作业中。
必须进行 3 项更改才能启用提交程序:
/usr/lib/spark/jars/hadoop*
的 EMR 主机上的 jars 需要复制到 /opt/spark/jars
的远程实例。特别是后缀为 -amzn
.
的 hadoop 罐子
需要将 /etc/spark/conf
下的 EMR Master 实例中的所有文件复制到 /etc/spark/conf
上的远程实例。这些文件包括 EMR 主节点 IP,否则文件的其余内容是可预测和可模板化的。
最后,我们必须确保我们使用的 Linux OS 用户名可以访问 HDFS。对于我们来说,这需要将 HADOOP_USER_NAME 从 spark 更改为 hadoop。
我们在 EMR 集群配置中看到这些变化:
**EMRFS consistent view:** Enabled
为了利用 EmrOptimizedSparkSqlParquetOutputCommitter
,防止 _temporary
目录最初被写入 S3,当未使用 EMRFS S3 优化提交器时 部分Requirements for the EMRFS S3-Optimized Committer
必须遵守。
class可以在jar中找到:/usr/share/aws/emr/goodies/lib/emr-spark-goodies-$version.jar
我正尝试按照以下概述的步骤启用 EmrOptimizedSparkSqlParquetOutputCommitter:
https://docs.amazonaws.cn/en_us/emr/latest/ReleaseGuide/emr-spark-committer-reqs.html
我正在使用 EMR 版本 5.23.0
我根据文档设置了以下配置选项(明确说明了配置值,尽管有些是默认值):
.config("spark.sql.hive.convertMetastoreParquet", "true")
.config("spark.sql.parquet.output.committer.class", "com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter")
.config("spark.sql.sources.commitProtocolClass", "org.apache.spark.sql.execution.datasources.SQLHadoopMapReduceCommitProtocol")
.config("spark.sql.sources.partitionOverwriteMode", "static")
.config("spark.sql.parquet.fs.optimized.committer.optimization-enabled", "true")
并在我的 spark (scala) 应用程序中具有以下依赖项
"com.amazonaws" % "aws-java-sdk" % "1.11.598" % "provided"
"com.amazonaws" % "aws-java-sdk-s3" % "1.11.598"
但是在部署应用程序时出现以下错误:
java.lang.RuntimeException:
java.lang.ClassNotFoundException:
Class com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter not found
我无法在任何地方找到该提交者所在库的引用。因此,我猜测它存在于上述 aws java sdk 依赖项之一中。我缺少依赖项吗?此外,spark 应用程序是否是提供此提交者 class 的正确位置?谢谢!
编辑:
还尝试按照@Lamanus 的建议添加 aws-java-sdk-emr
依赖项,但抛出相同的错误。
我遇到了https://github.com/aws/aws-sdk-java,幸运的是java sdk 是开源的。我没有看到对 EmrOptimizedSparkSqlParquetOutputCommitter
的引用,这向我建议应该将 to/by 集群提供。
问题出在远程 EC2 实例向 EMR 主机提交的 spark 作业中。
必须进行 3 项更改才能启用提交程序:
/usr/lib/spark/jars/hadoop*
的 EMR 主机上的 jars 需要复制到/opt/spark/jars
的远程实例。特别是后缀为-amzn
. 的 hadoop 罐子
需要将
/etc/spark/conf
下的 EMR Master 实例中的所有文件复制到/etc/spark/conf
上的远程实例。这些文件包括 EMR 主节点 IP,否则文件的其余内容是可预测和可模板化的。最后,我们必须确保我们使用的 Linux OS 用户名可以访问 HDFS。对于我们来说,这需要将 HADOOP_USER_NAME 从 spark 更改为 hadoop。
我们在 EMR 集群配置中看到这些变化:
**EMRFS consistent view:** Enabled
为了利用 EmrOptimizedSparkSqlParquetOutputCommitter
,防止 _temporary
目录最初被写入 S3,当未使用 EMRFS S3 优化提交器时 部分Requirements for the EMRFS S3-Optimized Committer
必须遵守。
class可以在jar中找到:/usr/share/aws/emr/goodies/lib/emr-spark-goodies-$version.jar