【问题标题】:Spark-HBASE Error java.lang.IllegalStateException: unread block dataSpark-HBASE 错误 java.lang.IllegalStateException:未读块数据
【发布时间】:2016-04-26 08:59:56
【问题描述】:

我正在尝试使用 jersey Rest-API 通过 java-Spark 程序从 HBASE 表中获取记录,然后我得到下面提到的错误但是当我通过 spark-Jar 访问 HBase 表时,代码执行时没有错误。

我有 2 个 Hbase 工作节点和 2 个 spark 工作节点,由同一个 Master 维护。

WARN TaskSetManager: 在阶段 0.0 (TID 1, 172.31.16.140) 丢失任务 1.0: java.lang.IllegalStateException: 未读块数据 在 java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2421) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1382) 在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 在 org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:69) 在 org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:95) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:194) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 你能提供你写的代码吗?这个问题没有足够的信息

标签: apache-spark hbase apache-spark-sql


【解决方案1】:

好的,我可能知道你的问题,因为我刚刚经历过。

原因很可能是漏掉了一些hbase jar,因为spark运行过程中,spark需要通过hbase jar来读取数据,如果不存在,就会抛出一些异常,怎么办?很简单

在提交作业之前,您需要添加参数 --jars 并加入一些 jar 如下:

--罐子 /ROOT/server/hive/lib/hive-hbase-handler-1.2.1.jar,
/ROOT/server/hbase/lib/hbase-client-0.98.12-hadoop2.jar,
/ROOT/server/hbase/lib/hbase-common-0.98.12-hadoop2.jar,
/ROOT/server/hbase/lib/hbase-server-0.98.12-hadoop2.jar,
/ROOT/server/hbase/lib/hbase-hadoop2-compat-0.98.12-hadoop2.jar,
/ROOT/server/hbase/lib/guava-12.0.1.jar,
/ROOT/server/hbase/lib/hbase-protocol-0.98.12-hadoop2.jar,
/ROOT/server/hbase/lib/htrace-core-2.04.jar

如果可以,尽情享受吧!

【讨论】:

  • 我正在使用restAPI,它调用上面的函数通过spark从HBase获取数据,所以请让我知道如何传递这些罐子。我试图在spark-env.sh中设置罐子但是不工作 SPARK_CLASSPATH=/hbase-1.1.2/lib/hbase-protocol-1.1.2.jar:/hbase-1.1.2/lib/hbase-common-1.1.2.jar:/hbase-1.1.2/lib /htrace-core-3.1.0-incubating.jar:/hbase-1.1.2/lib/hbase-server-1.1.2.jar:/hbase-1.1.2/lib/hbase-client-1.1.2.jar :/hbase/hive-1.2.1/lib/hive-hbase-handler-1.2.1.jar:/hive-1.2.1/lib/hive-common-1.2.1.jar:/hive-1.2.1/ lib/hive-exec-1.2.1.jar
【解决方案2】:

我在CDH5.4.0提交使用java api实现的spark作业时遇到了同样的问题,这是我的解决方案:

解决方案 1:使用 spark-submit

--jars zookeeper-3.4.5-cdh5.4.0.jar, 
hbase-client-1.0.0-cdh5.4.0.jar, 
hbase-common-1.0.0-cdh5.4.0.jar,
hbase-server1.0.0-cdh5.4.0.jar,
hbase-protocol1.0.0-cdh5.4.0.jar,
htrace-core-3.1.0-incubating.jar,
// custom jars which are needed in the spark executors

解决方案 2:在代码中使用 SparkConf

SparkConf.setJars(new String[]{"zookeeper-3.4.5-cdh5.4.0.jar",
"hbase-client-1.0.0-cdh5.4.0.jar",
"hbase-common-1.0.0-cdh5.4.0.jar",
"hbase-server1.0.0-cdh5.4.0.jar",
"hbase-protocol1.0.0-cdh5.4.0.jar",
"htrace-core-3.1.0-incubating.jar",
// custom jars which are needed in the spark executors
});

总结
问题是 spark 项目中缺少 jars 引起的,您需要将这些 jars 添加到您的项目 classpath 中,此外,使用上述 2 种解决方案来帮助将这些 jars 分发到您的 spark 集群。

【讨论】:

    【解决方案3】:

    CDP/CDH:

    Step1:将hbase-site.xml文件复制到/etc/spark/conf/目录下。 cp /opt/cloudera/parcels/CDH/lib/hbase/conf/hbase-site.xml /etc/spark/conf/

    Step2:将以下库添加到 spark-submit/spark-shell。

    /opt/cloudera/parcels/CDH/jars/hive-hbase-handler-*.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-server-*.jar
    /opt/cloudera/parcels/CDH/lib/hbase/hbase-hadoop2-compat-*.jar
    /opt/cloudera/parcels/CDH/lib/hbase/hbase-protocol-*.jar
    /opt/cloudera/parcels/CDH/jars/guava-28.1-jre.jar
    /opt/cloudera/parcels/CDH/jars/htrace-core-3.2.0-incubating.jar
    

    Spark-shell:

    sudo -u hive spark-shell --master yarn --jars /opt/cloudera/parcels/CDH/jars/hive-hbase-handler-*.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-server-*.jar, /opt/cloudera/parcels/CDH/lib/hbase/hbase-hadoop2-compat-*.jar, /opt/cloudera/parcels/CDH/lib/hbase/hbase-protocol-*.jar,/opt/cloudera/parcels/CDH/jars/guava-28.1-jre.jar,/opt/cloudera/parcels/CDH/jars/htrace-core-3.2.0-incubating.jar --files /etc/spark/conf/hbase-site.xml
    

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 2016-01-30
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      相关资源
      最近更新 更多