首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用用户提供的Hadoop正确配置Spark2.4

如何使用用户提供的Hadoop正确配置Spark2.4
EN

Stack Overflow用户
提问于 2020-03-02 08:04:29
回答 2查看 4.5K关注 0票数 6

我想使用Spark2.4.5(当前的稳定星火版本)和Hadoop2.10( 2.x系列中当前稳定的Hadoop版本)。此外,我需要访问HDFS、Hive、S3和Kafka。

http://spark.apache.org提供了Spark2.4.5预构建并与Hadoop2.6或Hadoop2.7捆绑在一起。另一种选择是在用户提供的Hadoop中使用Spark,所以我尝试了这个方法。

由于与用户提供的Hadoop一起使用,Spark也不包括Hive库。会有一个错误,就像这里:如何使用Hive支持创建SparkSession (“找不到Hive类失败”)?

当我将星火-蜂巢依赖项添加到火花壳(火花-提交也会受到影响)时,请使用

代码语言:javascript
复制
spark.jars.packages=org.apache.spark:spark-hive_2.11:2.4.5

在火花-defaults.conf中,我得到了以下错误:

代码语言:javascript
复制
20/02/26 11:20:45 ERROR spark.SparkContext: 
Failed to add file:/root/.ivy2/jars/org.apache.avro_avro-mapred-1.8.2.jar to Spark environment
java.io.FileNotFoundException: Jar /root/.ivy2/jars/org.apache.avro_avro-mapred-1.8.2.jar not found
at org.apache.spark.SparkContext.addJarFile$1(SparkContext.scala:1838)
at org.apache.spark.SparkContext.addJar(SparkContext.scala:1868)
at org.apache.spark.SparkContext.$anonfun$new$11(SparkContext.scala:458)
at org.apache.spark.SparkContext.$anonfun$new$11$adapted(SparkContext.scala:458)
at scala.collection.immutable.List.foreach(List.scala:392)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:458)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$5(SparkSession.scala:935)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
at org.apache.spark.repl.Main$.createSparkSession(Main.scala:106)

因为shell不能将分类器与包依赖一起处理,所以请参阅https://github.com/apache/spark/pull/21339https://github.com/apache/spark/pull/17416

用于分类器问题的解决方案如下所示:

代码语言:javascript
复制
$ cp .../.ivy2/jars/org.apache.avro_avro-mapred-1.8.2-hadoop2.jar .../.ivy2/jars/org.apache.avro_avro-mapred-1.8.2.jar

但DevOps不会接受这一点。

依赖项的完整列表如下(为了更好的可读性,我添加了换行符)

代码语言:javascript
复制
root@a5a04d888f85:/opt/spark-2.4.5/conf# cat spark-defaults.conf
spark.jars.packages=com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.10,
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.10,
org.apache.spark:spark-hive_2.11:2.4.5,
org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.5,
org.apache.hadoop:hadoop-aws:2.10.0,
io.delta:delta-core_2.11:0.5.0,
org.postgresql:postgresql:42.2.5,
mysql:mysql-connector-java:8.0.18,
com.datastax.spark:spark-cassandra-connector_2.11:2.4.3,
io.prestosql:presto-jdbc:307

(一切正常--除了蜂巢)

  • 星火2.4.5和Hadoop2.10的组合是否在任何地方使用?多么?
  • 如何将Spark2.4.5与用户提供的Hadoop和Hadoop2.9或2.10相结合?
  • 是否有必要建立火花以避开蜂巢依赖问题?
EN

回答 2

Stack Overflow用户

发布于 2020-03-06 13:14:46

使用用户提供的Hadoop配置Spark2.4.5以使用Hadoop2.10.0似乎并不容易

由于我的任务实际上是最小化依赖问题,所以我选择了编译火花 2.4.5和Hadoop2.10.0。

代码语言:javascript
复制
./dev/make-distribution.sh \
  --name hadoop-2.10.0 \
  --tgz \
  -Phadoop-2.7 -Dhadoop.version=hadoop-2.10.0 \
  -Phive -Phive-thriftserver \
  -Pyarn

现在,Maven处理Hive依赖/分类器,生成的包已经准备好使用了。

在我个人看来,编译Spark实际上比用用户提供的Hadoop配置Spark更容易。

到目前为止,集成测试还没有显示出任何问题,Spark可以同时访问HDFS和S3 (MinIO)。

更新2021-04-08

如果要添加对Kubernetes的支持,只需将-Pkubernetes添加到参数列表中即可。

票数 5
EN

Stack Overflow用户

发布于 2020-03-02 14:52:29

假设你不想运行丝上火花--从捆绑“Spark2.4.5和Hadoop 2.7”开始,那么樱桃-选择Hadoop库从bundle“Hadoop2.10.x”升级

  1. 抛弃spark-yarn / hadoop-yarn-* / hadoop-mapreduce-client-* JAR,因为您不需要它们,除了 hadoop-mapreduce-client-core,它是由HDFS和S3 (cf )上的写操作引用的。"MR提交过程“V1或V2)
    • 您还可以丢弃spark-mesos / mesos-*和/或spark-kubernetes / kubernetes-* JAR,这取决于您计划在什么基础上运行火花。
    • 如果您不打算运行一个“节俭服务器”实例,那么您也可以放弃spark-hive-thriftserverhive-* JARS,除了 hive-metastore,正如您可能猜到的那样,这是管理Metastore (一个普通的Hive服务或Spark会话中的嵌入式Metastore )所必需的。

  1. 丢弃hadoop-hdfs / hadoop-common / hadoop-auth / hadoop-annotations / htrace-core* / xercesImpl罐子
  2. 用来自Hadoop2.10的hadoop-hdfs-client / hadoop-common / hadoop-auth / hadoop-annotations / htrace-core* / xercesImpl / stax2-api JAR替换(在common/common/lib/下,或hdfs/hdfs/lib/下)
  3. 从Hadoop2.10添加S3A连接器,即hadoop-aws / jets3t / woodstox-core JAR(在tools/lib/下)
  4. 从亚马逊下载aws-java-sdk (我想它不是Apache许可证,所以不能与Hadoop捆绑)
  5. 最后,做很多测试.

这对我有效,经过一些试验和错误--但有一个警告:我在一个与S3兼容的存储系统上运行我的测试,但不是针对“真正的”S3,而不是针对常规的HDFS。如果没有“真正的”Hive Metastore服务,则只有Spark默认运行的嵌入式内存和易失性Metastore。

为了记录在案,Spark 3.0.0预览版和Hadoop 3.2.1版的过程都是相同的,只是

  • 您还必须升级guava
  • 您不必升级xercesImplhtrace-corestax2-api
  • 你不再需要jets3t
  • 您需要保留更多的hadoop-mapreduce-client-* JAR(可能是因为新的"S3提交者“)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60484693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档