【问题标题】:Hbase Spark ConnectorHbase Spark 连接器
【发布时间】:2017-02-15 11:11:56
【问题描述】:

我正在尝试从 https://github.com/nerdammer/spark-hbase-connector 复制 Hbase-Spark 连接器。但是我严重卡在了

rdd.toHBaseTable("mytable")
    .toColumns("column1", "column2")
    .inColumnFamily("mycf")
    .save()

运行这一行后,错误是这样的:

java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
    at it.nerdammer.spark.hbase.HBaseSparkConf.createHadoopBaseConfig(HBaseSparkConf.scala:11)
    at it.nerdammer.spark.hbase.HBaseWriter.save(HBaseWriterBuilder.scala:57)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:33)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:38)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:40)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:42)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:44)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:46)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:48)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:50)
    at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:52)
    at $iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:54)
    at $iwC$$iwC$$iwC$$iwC.<init>(<console>:56)
    at $iwC$$iwC$$iwC.<init>(<console>:58)
    at $iwC$$iwC.<init>(<console>:60)
    at $iwC.<init>(<console>:62)
    at <init>(<console>:64)
    at .<init>(<console>:68)
    at .<clinit>(<console>)
    at .<init>(<console>:7)
    at .<clinit>(<console>)
    at $print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:852)
    at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1125)
    at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:674)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:705)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:669)
    at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:828)
    at org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:873)
    at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:785)
    at org.apache.spark.repl.SparkILoop.processLine$1(SparkILoop.scala:628)
    at org.apache.spark.repl.SparkILoop.innerLoop$1(SparkILoop.scala:636)
    at org.apache.spark.repl.SparkILoop.loop(SparkILoop.scala:641)
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply$mcZ$sp(SparkILoop.scala:968)
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:916)
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:916)
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135)
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:916)
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:1017)
    at org.apache.spark.repl.Main$.main(Main.scala:31)
    at org.apache.spark.repl.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:367)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:77)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

另外,在

中要放置什么值而不是“主机”
sparkConf.set("spark.hbase.host", "thehost")

我们将非常感谢您在完成这项工作方面的任何快速帮助。

【问题讨论】:

  • 你能解决这个问题吗?请同时查看我的更新答案。
  • 您好,谢谢您的回复。现在就开始做。
  • 你能修复吗?
  • 对不起。几天后我必须回到这个问题上。但我在您的回答中观察到 Cloudera,我们正在使用 Hortonworks 沙箱。我不确定这两个沙箱是否同样适用。我会在几天内处理它,并会向您提供更新。非常感谢您的回答。
  • 这个 driver-java-options -Dspark.executor.extraClassPath= 很常见,与 CDH 或 HDP 无关

标签: scala apache-spark hbase connector bigdata


【解决方案1】:

明确指出类路径问题。

看示例提交 https://github.com/cloudera-labs/SparkOnHBase/blob/cdh5-0.0.2/README.md#scan-that-works-on-kerberos

你可以在其中看到

spark-submit --jars /opt/cloudera/parcels/CDH/lib/zookeeper/zookeeper-3.4.5-cdh5.3.1.jar,/opt/cloudera/parcels/CDH/lib/hbase/lib/guava-12.0.1.jar,/opt /cloudera/parcels/CDH/lib/hbase/lib/protobuf-java-2.5.0.jar,/opt/cloudera/parcels/CDH/lib/hbase/hbase-protocol.jar,/opt/cloudera/parcels/CDH /lib/hbase/hbase-client.jar,/opt/cloudera/parcels/CDH/lib/hbase/hbase-common.jar,/opt/cloudera/parcels/CDH/lib/hbase/hbase-hadoop2-compat.jar ,/opt/cloudera/parcels/CDH/lib/hbase/hbase-hadoop-compat.jar,/opt/cloudera/parcels/CDH/lib/hbase/hbase-server.jar,/opt/cloudera/parcels/CDH/ lib/hbase/lib/htrace-core.jar --class com.cloudera.spark.hbase.example.HBaseBulkPutExample --master yarn --deploy-mode client --executor-memory 512M --num-executors 4 --driver-java-options -Dspark.executor.extraClassPath=/opt/cloudera/parcels/CDH/lib/hbase/lib/* SparkHBase.jar t1 c

echo $HBASE_CLASSPATH

hbase classpath 是否显示需要在类路径中添加的信息

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HBASE_CLASSPATH

否则使用下面手动指向那些。

export HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/lib/hbase/lib/*:/opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-protocol-0.98.6-cdh5.3.0.jar:/etc/hbase/conf

【讨论】:

    【解决方案2】:

    spark.hbase.host 是运行 HBase 的系统的 ip 号。

    对于java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration的错误,你需要检查你的项目中是否有HBase依赖jar,如果你是作为jar运行的,你需要检查你的jar是否包含以下依赖jar。

    <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase</artifactId>
            <version>0.94.2</version>
    </dependency>
    

    更新:

    由于您使用的是 Spark Hbase 连接器,请检查 jar 中是否存在以下依赖项。

    <dependency>
      <groupId>it.nerdammer.bigdata</groupId>
      <artifactId>spark-hbase-connector_2.10</artifactId>
      <version>1.0.3</version>
    </dependency>
    

    【讨论】:

    • 嘿,当我使用 maven 样式版本时,正如他们在连接器文档中提到的那样,这将是必需的。我克隆了 repo 并做了成功构建的 sbt 包。我还是不明白问题出在哪里。
    猜你喜欢
    • 2020-11-04
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多