apache-spark - 如何以客户端模式远程提交到 EMR?
问题描述
我有一个 ECS 任务配置为运行 spark-submit 到 EMR 集群。spark-submit 配置为 Yarn Cluster 模式。
我的流应用程序假设将数据保存到 RDD 上的 Redshift,但我收到此错误:
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.amazon.ws.emr.hadoop.fs.EmrFileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
at com.databricks.spark.redshift.Utils$.assertThatFileSystemIsNotS3BlockFileSystem(Utils.scala:162)
at com.databricks.spark.redshift.RedshiftWriter.saveToRedshift(RedshiftWriter.scala:386)
at com.databricks.spark.redshift.DefaultSource.createRelation(DefaultSource.scala:108)
at org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:45)
...
我怀疑是因为“spark.yarn.jars”没有设置,所以它把我的远程服务器的 $SPARK_HOME 库推过来,它缺少 com.amazon.ws.emr.hadoop.fs.EmrFileSystem 的 jars。
因此,我也尝试"spark.yarn.jars=hdfs://nodename:8020/user/spark/jars/*.jar"
在复制 EMR 的主节点的 /usr/lib/spark/jars/* 后进行设置。然后它错误:
java.io.InvalidClassException: org.apache.spark.sql.execution.SparkPlan; local class incompatible: stream classdesc serialVersionUID = -7931627949087445875, local class serialVersionUID = -5425351703039338847
我认为远程客户端的 jar 与 EMR 集群的 jar 之间的 jar 可能不匹配。但它们都是 2.4.7 版本。
任何人都有任何聪明的解决方案来让我的流式火花提交工作在 EMR 作为纱线客户端模式下工作?
解决方案
二进制文件需要与 EMR 集群中的相同。
该资源帮助我解决了这个问题: https ://docs.dominodatalab.com/en/4.5.2/reference/spark/external_spark/Connecting_to_an_Amazon_EMR_cluster_from_Domino.html
推荐阅读
- opengl-es - 如何从非常稀疏的纹理中快速输出点?
- shiny - 如何使用 rmarkdown 将带有嵌入图像的表格格式化为 pdf 格式?
- python - 合并 CSV 文件时遇到问题
- html - Excel VBA Web从a和a中抓取表格元素
- javascript - 在 html 中使用 1 个按钮隐藏/显示多个对象
- apache-spark - Spark Pipeline - 如何从经过训练的特征转换器中提取属性
- ruby - 何时解析一行 Ruby?评价?执行?
- java - 通过在 Java 中重新使用浮点数组是否有显着的 GC 性能提升?
- c# - 如何在 GridView 中使用 TemplateFields 保留文本框的值
- php - Symfony 2:新实体参数不保存或返回 null