spark on hive问题记录--持续更新

1. 在执行Sparksql操作orc类型的表时抛出:java.lang.IndexOutOfBoundsException 或 java.lang.NullPointerException

原因:分区或者表下存在空的orc文件。该BUG在Spark2.3.0之后才修复

解决方法:规避解决。修改ORC的默认分割策略为:hive.exec.orc.split.strategy=BI进行解决。Orc的分split有3种策略(ETL、BI、HYBIRD),默认是HYBIRD(混合模式,根据文件大小和文件个数自动选择ETL还是BI模式),BI模式是按照文件个数来分split。

2. 操作snappy压缩的表时抛出:java.lang.RuntimeException: native snappy library not available: this version of libhadoop was built without snappy support.

原因:是由于没有在java.library.path上加上snappy库

解决方法:修改spark-default.conf配置文件加上:

spark.executor.extraLibraryPath /data/Install/hadoop/lib/native

或者

spark.executor.extraJavaOptions -Djava.library.path=/data/Install/hadoop/lib/native

3. Spark-sql在执行时将一个很小的文件拆分成了20个task进行运行,导致运行速度太慢。

原因:是由于HaddopRDD生成过程中partitions是会拿参数mapreduce.job.maps或mapred.map.tasks(20)和spark默认分区数(2)做最大值比较,所以导致默认为20
解决方法:修改该参数就可以将task降下来。

4. 使用jdbc的方式连接到ThriftServer,可以执行类似与show tabls的等操作,但是不能执行select相关的操作:java.io.IOException: Failed to create local dir in /tmp/blockmgr-adb70127-0a28-4256-a205-c575acc74f9d/06.

原因:用户很久没使用ThriftServer导致系统清理了该上级目录或者用户根本就对该目录没有写权限
解决方法:重启ThriftServer和设置目录权限:spark.local.dir

5. 在Spark SQL中运行的SQL语句过于复杂的话,会出现 java.lang.StackOverflowError 异常

原因:这是因为程序运行的时候 Stack 大小大于 JVM 的设置大小

解决方法:通过在启动 Spark-sql 的时候加上 --driver-java-options “-Xss10m” 选项解决这个问题

6. INSERT INTO重复执行出现:

Unable to move source hdfs://bigdata05/tmp/hive-hduser1101_hive_2017-09-11_14-50-56_038_2358196375683362770-82/-ext-10000/part-00000 to destination hdfs://bigdata05/user/hive

原因:该问题是2.1.0的Bug,在Spark2.1.1中已经解决2.1.0。

解决方法:2.1.0规避办法INSERT OVERWRITE不带分区重复执行不会出现问题

7. 数据倾斜

详情参考Spark性能优化指南——高级篇 - 美团技术团队 (meituan.com)

错误汇总参考:

【精选】【Spark】Spark常见错误问题汇总(~持续更新)_spark常见问题-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值