Spark Read HBase с ошибкой java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу использовать scala для чтения Hbase от Spark, но я получил ошибку:

Exception in thread "dag-scheduler-event-loop" java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo()[Lorg/apache/hadoop/mapred/SplitLocationInfo;

Но я уже добавляю зависимости, эта проблема меня беспокоит. Моя среда выглядит следующим образом:

  • Скала: 2.11.12
  • Искра: 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"

Пожалуйста, помогите мне, спасибо!

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Вам необходимо исправить их версии, чтобы они соответствовали используемой вами версии 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

0 голосов
/ 03 ноября 2018

Могу ли я получить более подробную информацию о том, как вы выполняете задание на искру? Если вы используете пользовательский дистрибутив, такой как Cloudera или Horton works, вам, возможно, придется использовать их библиотеки для компиляции, и spark-submit будет использовать установленный путь к дистрибутиву для передачи задания в кластер.

Для начала добавьте % provided в библиотеку в файле sbt , чтобы она использовала определенную библиотеку из пути к классам установки spark.

...