2016-01-20 59 views
3

我想使用泽西Rest-API通过java-Spark程序从HBASE表中获取记录然后我得到下面提到的错误,但是当我访问HBase表通过spark-Jar然后代码正在执行而没有错误。Spark-HBASE错误java.lang.IllegalStateException:未读块数据

我有一个2工作节点的Hbase和2个工人节点的火花,由同一主人维护。

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

+0

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

回答

3

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

原因很有可能会遗漏一些hbase jars,因为在spark runing期间,spark需要通过hbase jar来读取数据,如果不存在,那么有些异常会抛出,你应该怎么做?很容易

之前提交工作,你需要添加PARAMS --jars并加入一些罐中,如下:

--jars /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.j AR,
/ROOT/server/hbase/lib/hbase-protocol-0.98.12-hadoop2.jar,
/ROOT/server/hbase/lib/htrace-core-2.04.jar

若能, 好好享受 !

+0

我正在使用restAPI调用上面的函数通过火花从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核-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 –

+0

好的,你可以使用conf.setJars(Seq(.......))方法上传你的jar提交! –

+0

谢谢秦。问题使用上述库解决 –

0

我在CDH5.4中遇到了同样的问题。0提交使用Java API实现的火花作业时,这里是我的解决方案:
解决方案1:使用火花提交

--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.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 });

使用SparkConf

要汇总
该问题是由于火花项目中缺少罐子引起的,您需要添加这些ja rs添加到您的项目类路径中,另外,使用上述2个解决方案来帮助将这些罐子分配到您的Spark集群。