java.lang.IllegalStateException: unread block data

news/2024/10/30 11:28:38/

Spark 通过HIVE ON HBASE表读取数据源,报错:unread block data

具体错误信息示例如下:

18/03/19 20:46:54 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.IllegalStateException: unread block dataat java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2400)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1379)at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1894)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75)at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114)at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:253)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:722)
18/03/19 20:46:54 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, localhost): java.lang.IllegalStateException: unread block dataat java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2400)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1379)at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1894)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75)at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114)at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:253)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:722)

问题原因分析:该问题查了好长时间(开始以为是数据源有问题;后来各种查、各种试,发现是缺少jar包,因为是CDH环境,通过增加spark/jars下面的jar即可:

cd  /opt/...../CDH/spark/jars/ln -s /opt/...../CDH/jars/hive-hbase-handler-***.jar  hive-hbase-handler***.jar

总结:引起该问题的原因有很多,最好由简入繁、从最简单直接的原因查起,逐一排除,提高排查问题效率。

相关的解决方案:

方法一:spark-submit --jars

根据spark官网,在提交任务的时候指定--jars,用逗号分开。这样做的缺点是每次都要指定jar包,如果jar包少的话可以这么做,但是如果多的话会很麻烦。可以封装一个sh脚本做目录/引用文件扫描也可以。

spark-submit --master yarn-client --jars ***.jar,***.jar(你的jar包,用逗号分隔) myjar.jar

方法二:extraClassPath
提交时在spark-default中设定参数,将所有需要的jar包考到一个文件里,然后在参数中指定该目录就可以了,较上一个方便很多:

spark.executor.extraClassPath=/extlib/*
spark.driver.extraClassPath=/extlib/*
# 修改为自己的目录

方法二:fat-jar

如果你还是觉得第二种麻烦,这种方法是将所有依赖的jar,包括你写的代码全部打包在一起(fat-jar),就是提交的时候比较慢,毕竟大啊。还有可能和系统jar冲突。自己注意解决把。

参考链接

  1. setting-spark-classpaths-on-ec2-spark-driver-extraclasspath-and-spark-executor
  2. Spark任务提交jar包依赖解决方案


http://www.ppmy.cn/news/21437.html

相关文章

【JavaSE】ArrayList的扩容机制源码分析

文章目录1. ArrayList概述2. ArrayList构造方法源码分析3. ArrayList.add()源码分析4. ArrayList.addAll()源码分析5. 总结1. ArrayList概述 ArrayList是Java集合框架中比较常用的一个数据结构了,它底层是基于数组实现的。数组是固定大小的,但是ArrayLi…

C++入门:变量类型

变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的类型间是可以互相转换的,转换又分为自动转换和强制转换。…

C++基础知识点整理笔记(五)

14. 类中 private,protect,public 三种访问限制类型的区别 (一) private 是私有类型,只有本类中的成员函数访问;(二) protect 是保护型的,本类和继承类可以访问;(三) public 是公有类型,任何类都可以访问. 15. struct…

消息队列简介

提高系统性能首先考虑的是数据库的优化,之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中,针对数据库需要注意的事项。但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所有我们一般会尽量把流量都挡在数据库…

spring中的JSR-303统一校验

1.在前后端的传输参数的过程中数据在何处校验? 在前后端都需要进行校验,只是分工不同. 2.各个层的校验内容: 1.Controller层主要负责校验残水的合法性,包括: 必填的参数字段,数据格式的校验 2.Service层的业务校验是审核业务中的规则的相关内容,比如:课程已经审核通过所以提…

SpringCloud_Alibaba Sentinel实现熔断与限流

目录一、Sentinel介绍1.官网2.是什么3.能干嘛4.去哪下5.怎么玩二、安装Sentinel控制台1.sentinel组件由2部分组成2.安装步骤三、初始化演示工程1.启动Nacos8848成功2.案例3.启动Sentinel80804.启动微服务84015.启动8401微服务后查看sentienl控制台四、流控规则1.基本介绍2.流控…

195136-58-4,2‘,7‘-Difluorofluorescein,2,7-二氟荧光素

产品描述:2,7-二氟荧光素中Fluorescein (Uranine) 生物应用中的荧光示踪剂,Fluorescein (Uranine) 是一种具有代表性的绿色荧光团,已被广泛用作实用绿色荧光探针的支架。结构式:理论分析:中文名&#xff1a…

【批处理脚本】-1.6-列文件名命令dir

点击返回「批处理BAT从入门到精通」总目录 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,使用“批处理(bat)”和“Python”制作脚本,从而实现编译功能(GreenHills…)的…