尝试从Spark查询HBase上的数据时出现NoSuchMethodError

我正在尝试使用SparkSQL / DataFrames查询加载到HBase表中的数据。我的集群基于Cloudera CDH 6.2.0(Spark版本2.4.0和HBase版本2.1.0)。

按照this指南,我在Spark Service的HBase Service属性中选择了HBase服务。此操作将以下jar添加到我的Spark类路径中:

/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hbase/bin/../lib/client-facing-thirdparty/audience-annotations-0.5.0.jar
/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hbase/bin/../lib/client-facing-thirdparty/commons-logging-1.2.jar
/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hbase/bin/../lib/client-facing-thirdparty/findbugs-annotations-1.3.9-1.jar
/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hbase/bin/../lib/client-facing-thirdparty/htrace-core4-4.2.0-incubating.jar
/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hbase/bin/../lib/shaded-clients/hbase-shaded-mapreduce-2.1.0-cdh6.2.0.jar
/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hbase/hbase-spark.jar

然后我开始了火花壳。在使用thisthis Spark-HBase Connector示例之后,我设法从HBase加载和检索数据并将它们放入DataFrame中。当我尝试使用SparkSQL或DataFrame API查询此DataFrame时,出现以下异常:

java.lang.NoSuchMethodError: org.apache.hadoop.hbase.util.ByteStringer.wrap([B)Lcom/google/protobuf/ByteString;
  at org.apache.hadoop.hbase.spark.SparkSQLPushDownFilter.toByteArray(SparkSQLPushDownFilter.java:256)
  at org.apache.hadoop.hbase.spark.datasources.SerializedFilter$$anonfun$toSerializedTypedFilter$1.apply(HBasetableScanRDD.scala:267)
  at org.apache.hadoop.hbase.spark.datasources.SerializedFilter$$anonfun$toSerializedTypedFilter$1.apply(HBasetableScanRDD.scala:267)
  at scala.Option.map(Option.scala:146)
  at org.apache.hadoop.hbase.spark.datasources.SerializedFilter$.toSerializedTypedFilter(HBasetableScanRDD.scala:267)
  at org.apache.hadoop.hbase.spark.datasources.HBasetableScanRDD$$anonfun$1.apply(HBasetableScanRDD.scala:88)
  at org.apache.hadoop.hbase.spark.datasources.HBasetableScanRDD$$anonfun$1.apply(HBasetableScanRDD.scala:80)
  at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
  at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
  at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
  at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:35)
  at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
  at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
  ...

我尝试按原样启动spark-shell,而没有通过上述连接器,结果是相同的。我读到这个问题可能是由不同版本的协议缓冲区引起的,但是我不知道如何解决它。

JHJ2008JHJ 回答:尝试从Spark查询HBase上的数据时出现NoSuchMethodError

我们在CDH 6.3.3中遇到了同样的问题,最终从源代码编译了Hortonworks shc-core,到目前为止,它似乎可以在CDH 6.3.3中正常工作而没有任何问题。

本文链接:https://www.f2er.com/3152684.html

大家都在问