Spark Read HBase with java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo error
Spark Read HBase with java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo error
我想用 scala 读取 Hbase 的 Spark,但是我得到了错误:
Exception in thread "dag-scheduler-event-loop" java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo()[Lorg/apache/hadoop/mapred/SplitLocationInfo;
但是我已经添加了依赖项,这个问题困扰着我。我的环境如下:
- scala:2.11.12
- Spark:2.3.1
- HBase:可能是 2.1.0(我不知道)
- Hadoop:2.7.2.4
而我的build.sbt
是:
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.11" % "2.3.1",
"org.apache.spark" % "spark-sql_2.11" % "2.3.1",
"org.apache.spark" % "spark-streaming_2.11" % "2.3.1",
"org.apache.spark" % "spark-streaming-kafka-0-10_2.11" % "2.3.1",
"org.apache.spark" % "spark-yarn_2.11" % "2.3.1",
"org.apache.hadoop" % "hadoop-core" % "2.6.0-mr1-cdh5.15.1",
"org.apache.hadoop" % "hadoop-common" % "2.7.2",
"org.apache.hadoop" % "hadoop-client" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapred" % "0.22.0",
"org.apache.hadoop" % "hadoop-nfs" % "2.7.2",
"org.apache.hadoop" % "hadoop-hdfs" % "2.7.2",
"org.apache.hadoop" % "hadoop-hdfs-nfs" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce-client-core" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce-client" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce-client-common" % "2.7.2",
"org.apache.hbase" % "hbase" % "2.1.0",
"org.apache.hbase" % "hbase-server" % "2.1.0",
"org.apache.hbase" % "hbase-common" % "2.1.0",
"org.apache.hbase" % "hbase-client" % "2.1.0",
"org.apache.hbase" % "hbase-protocol" % "2.1.0",
"org.apache.hbase" % "hbase-metrics" % "2.1.0",
"org.apache.hbase" % "hbase-metrics-api" % "2.1.0",
"org.apache.hbase" % "hbase-mapreduce" % "2.1.0",
"org.apache.hbase" % "hbase-zookeeper" % "2.1.0",
"org.apache.hbase" % "hbase-hadoop-compat" % "2.1.0",
"org.apache.hbase" % "hbase-hadoop2-compat" % "2.1.0",
"org.apache.hbase" % "hbase-spark" % "2.1.0-cdh6.1.0"
)
我真的不知道哪里错了,如果我添加错误的依赖或者我需要添加一些新的依赖,请告诉我在哪里可以下载它,例如:resolvers += "Apache HBase" at "https://repository.apache.org/content/repositories/releases"
请帮助我,谢谢!
我可以详细了解一下你是如何 运行 spark 工作的吗?
如果您使用自定义发行版,例如 Cloudera 或 Horton 作品,您可能必须使用他们的库进行编译,并且 spark-submit 将使用发行版安装的类路径将作业提交到集群。
要开始,请将 % provided
添加到 sbt 文件中的库,以便它将使用 spark 安装类路径中的特定库。
您需要修复这些版本以匹配您使用的 Hadoop 版本 运行,否则您可能会遇到 classpath/method 问题。具体来说,您的错误来自 mapreduce 包
"org.apache.hadoop" % "hadoop-core" % "2.6.0-mr1-cdh5.15.1",
"org.apache.hadoop" % "hadoop-mapred" % "0.22.0",
Spark 已经包括 大部分的 Hadoop 本身,所以不清楚为什么你要自己指定它们,但至少把 % "provided"
放在一些他们
对于 hbase-spark
,我怀疑您是否需要 cdh6
依赖项,因为 CDH 6 基于 Hadoop 3 库,而不是 2.7.2
我想用 scala 读取 Hbase 的 Spark,但是我得到了错误:
Exception in thread "dag-scheduler-event-loop" java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo()[Lorg/apache/hadoop/mapred/SplitLocationInfo;
但是我已经添加了依赖项,这个问题困扰着我。我的环境如下:
- scala:2.11.12
- Spark:2.3.1
- HBase:可能是 2.1.0(我不知道)
- Hadoop:2.7.2.4
而我的build.sbt
是:
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.11" % "2.3.1",
"org.apache.spark" % "spark-sql_2.11" % "2.3.1",
"org.apache.spark" % "spark-streaming_2.11" % "2.3.1",
"org.apache.spark" % "spark-streaming-kafka-0-10_2.11" % "2.3.1",
"org.apache.spark" % "spark-yarn_2.11" % "2.3.1",
"org.apache.hadoop" % "hadoop-core" % "2.6.0-mr1-cdh5.15.1",
"org.apache.hadoop" % "hadoop-common" % "2.7.2",
"org.apache.hadoop" % "hadoop-client" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapred" % "0.22.0",
"org.apache.hadoop" % "hadoop-nfs" % "2.7.2",
"org.apache.hadoop" % "hadoop-hdfs" % "2.7.2",
"org.apache.hadoop" % "hadoop-hdfs-nfs" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce-client-core" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce-client" % "2.7.2",
"org.apache.hadoop" % "hadoop-mapreduce-client-common" % "2.7.2",
"org.apache.hbase" % "hbase" % "2.1.0",
"org.apache.hbase" % "hbase-server" % "2.1.0",
"org.apache.hbase" % "hbase-common" % "2.1.0",
"org.apache.hbase" % "hbase-client" % "2.1.0",
"org.apache.hbase" % "hbase-protocol" % "2.1.0",
"org.apache.hbase" % "hbase-metrics" % "2.1.0",
"org.apache.hbase" % "hbase-metrics-api" % "2.1.0",
"org.apache.hbase" % "hbase-mapreduce" % "2.1.0",
"org.apache.hbase" % "hbase-zookeeper" % "2.1.0",
"org.apache.hbase" % "hbase-hadoop-compat" % "2.1.0",
"org.apache.hbase" % "hbase-hadoop2-compat" % "2.1.0",
"org.apache.hbase" % "hbase-spark" % "2.1.0-cdh6.1.0"
)
我真的不知道哪里错了,如果我添加错误的依赖或者我需要添加一些新的依赖,请告诉我在哪里可以下载它,例如:resolvers += "Apache HBase" at "https://repository.apache.org/content/repositories/releases"
请帮助我,谢谢!
我可以详细了解一下你是如何 运行 spark 工作的吗? 如果您使用自定义发行版,例如 Cloudera 或 Horton 作品,您可能必须使用他们的库进行编译,并且 spark-submit 将使用发行版安装的类路径将作业提交到集群。
要开始,请将 % provided
添加到 sbt 文件中的库,以便它将使用 spark 安装类路径中的特定库。
您需要修复这些版本以匹配您使用的 Hadoop 版本 运行,否则您可能会遇到 classpath/method 问题。具体来说,您的错误来自 mapreduce 包
"org.apache.hadoop" % "hadoop-core" % "2.6.0-mr1-cdh5.15.1",
"org.apache.hadoop" % "hadoop-mapred" % "0.22.0",
Spark 已经包括 大部分的 Hadoop 本身,所以不清楚为什么你要自己指定它们,但至少把 % "provided"
放在一些他们
对于 hbase-spark
,我怀疑您是否需要 cdh6
依赖项,因为 CDH 6 基于 Hadoop 3 库,而不是 2.7.2