我想使用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类失败”)?
当我将星火-蜂巢依赖项添加到火花壳(火花-提交也会受到影响)时,请使用
spark.jars.packages=org.apache.spark:spark-hive_2.11:2.4.5在火花-defaults.conf中,我得到了以下错误:
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/21339和https://github.com/apache/spark/pull/17416。
用于分类器问题的解决方案如下所示:
$ 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不会接受这一点。
依赖项的完整列表如下(为了更好的可读性,我添加了换行符)
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(一切正常--除了蜂巢)
发布于 2020-03-06 13:14:46
使用用户提供的Hadoop配置Spark2.4.5以使用Hadoop2.10.0似乎并不容易
由于我的任务实际上是最小化依赖问题,所以我选择了编译火花 2.4.5和Hadoop2.10.0。
./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添加到参数列表中即可。
发布于 2020-03-02 14:52:29
假设你不想运行丝上火花--从捆绑“Spark2.4.5和Hadoop 2.7”开始,那么樱桃-选择Hadoop库从bundle“Hadoop2.10.x”升级
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-thriftserver和hive-* JARS,除了 hive-metastore,正如您可能猜到的那样,这是管理Metastore (一个普通的Hive服务或Spark会话中的嵌入式Metastore )所必需的。
hadoop-hdfs / hadoop-common / hadoop-auth / hadoop-annotations / htrace-core* / xercesImpl罐子hadoop-hdfs-client / hadoop-common / hadoop-auth / hadoop-annotations / htrace-core* / xercesImpl / stax2-api JAR替换(在common/和common/lib/下,或hdfs/和hdfs/lib/下)hadoop-aws / jets3t / woodstox-core JAR(在tools/lib/下)aws-java-sdk (我想它不是Apache许可证,所以不能与Hadoop捆绑)这对我有效,经过一些试验和错误--但有一个警告:我在一个与S3兼容的存储系统上运行我的测试,但不是针对“真正的”S3,而不是针对常规的HDFS。如果没有“真正的”Hive Metastore服务,则只有Spark默认运行的嵌入式内存和易失性Metastore。
为了记录在案,Spark 3.0.0预览版和Hadoop 3.2.1版的过程都是相同的,只是
guavaxercesImpl、htrace-core或stax2-apijets3t了hadoop-mapreduce-client-* JAR(可能是因为新的"S3提交者“)https://stackoverflow.com/questions/60484693
复制相似问题