【持续更新…】
之前不记录碰到的问题,解决的思路,导致之后再次碰到又在查查查…
spark常见问题汇总
————————————————————————————————————
!!!!!!进不去主类
表象:运行某个.scala文件的时候,一直进不去类
原因:最终找到的原因是,packages名没有写对!!!!!!少写了一个字母
————————————————————————————————————
spark-shell进不去或者进去非常慢
表象:spark-shell太卡了,在进去之后报java内存不够的问题
原因: 开了太多spark-shell,又异常关闭
解决:命令行运行
pgrep java
pkill java
————————————————————————————————————
插入到hive表乱码
附带一个彻底解决mysql中文乱码,起因是读取的sql表乱码了。
表象:插入到hive表中文乱码,但是中间临时表中的编码正常,中间没有别的操作,只有将临时表中的插入到目标hive表中
原因:过程中有很多编码的问题,尽量将编码全部设置一致。
中间尝试过的办法:
尝试1: alter table BUCKETING_COLS default character set utf8;
结果1: 失败
尝试2:alter table xxx set SERDEPROPERTIES(“serialization.encoding”=’UTF-8′);
结果2:失败
尝试3:创建表时候添加编码:ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe’ WITH SERDEPROPERTIES(“serialization.encoding”=’UTF-8′);
结果3: 失败
尝试4: default charset utf8
结果4: 建表失败
解决:再spark-submit的时候增加如下参数 参考1 参考2
--conf spark.driver.extraJavaOptions=" -Dfile.encoding=utf-8 " \
--conf spark.executor.extraJavaOptions=" -Dfile.encoding=utf-8 " \
————————————————————————————————————
org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow
参考:https://blog.youkuaiyun.com/xinganshenguang/article/details/54586110
解决:spark-submit时候增加参数:
--conf spark.kryoserializer.buffer.max=256m
--conf spark.kryoserializer.buffer=64
————————————————————————————————————
OOM:GC overhead limit exceeded
问题:出现java.lang.OutOfMemoryError: GC overhead limit exceeded
原因:
在Java中, 创建一个新对象时, 例如 Integer num = new Integer(5); , 并不需要手动分配内存。因为 JVM 自动封装并处理了内存分配. 在程序执行过程中, JVM 会在必要时检查内存中还有哪些对象仍在使用, 而不再使用的那些对象则会被丢弃, 并将其占用的内存回收和重用。这个过程称为 垃圾收集. JVM中负责垃圾回收的模块叫做 垃圾收集器(GC)。
Java的自动内存管理依赖 GC, GC会一遍又一遍地扫描内存区域, 将不使用的对象删除. 简单来说, Java中的内存泄漏, 就是那些逻辑上不再使用的对象, 却没有被 垃圾收集程序 给干掉. 从而导致垃圾对象继续占用堆内存中, 逐渐堆积, 最后造成 java.lang.OutOfMemoryError: Java heap space 错误
方案:
- 原文链接:https://plumbr.io/outofmemoryerror/java-heap-space
- 翻译版链接:https://blog.youkuaiyun.com/renfufei/article/details/76350794
PS: 造成这个问题的根本原因并非如此,而是数据量大造成的的 .collect()部分的问题,需要再程序中修改这个部分
———————————————————————————————————
待查询的问题:
flatmap() 的使用,输入是rdd(arraybuffer(string,string,string))