分析别人的Bug让自己“零”Bug
文章平均质量分 86
我们在大数据开发的时候会经常遇到各种bug,如果对技术底层原理理解不到位,就算通过网上搜的方案把问题“暂时”解决了,但是可能会带来潜在隐患。这个专栏就想通过分析各种bug,首先通过原理让我们更清楚地知道为什么会有这样的bug出现,然后才是如何避免或者解决这样bug。
SunnyRivers
在通信、游戏、互联网、新能源等不同行业从事过多年大数据开发相关工作,想通过博客和大家一起分享大数据技术带来的经验和乐趣。
展开
-
return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask
注意:set命令是一次性的,而且无法在shell脚本中使用,否则直接报错:Error: Error while processing statement: Cannot modify hive.msck.path.validation at runtime. It is not in list of params that are allowed to be modified at runtime (state=42000,code=1)原创 2024-03-20 18:25:14 · 149 阅读 · 0 评论 -
Set cancelled by MemoryScratchSinkOperator
这个参数决定了单个查询在执行过程中可以使用的最大内存量。了,那么是谁的内存不够呢?显然不是spark,因为spark内存一般直接报OutOfMemory,那么就是starrocks内存不够,我们的代码中显然没有设置有关starrocks内存相关的参数。如果你将这个参数设置得足够大,确实可以为查询提供更大的内存空间,从而可能加速查询的执行,尤其是对于那些需要大量内存来执行复杂计算的查询。也就是说spark一次只能从starrocks表中读2GB的数据,超过这个值就会抛异常,于是把该值调大。原创 2024-03-13 19:32:04 · 205 阅读 · 0 评论 -
Container killed on request. Exit code is 143
大部分时候都是直接加大内存来解决,不要把太多精力放在这方面的调优。原创 2024-02-29 18:19:58 · 282 阅读 · 0 评论 -
spark读sqlserver出现的异常
Spark通过JDBC读取数据之前很早写过一篇博客,本以为所有通过jdbc读取的方式都一样,谁知道这次读sqlserver的时候竟然出现的很多异常,这里把异常的问题进行记录。原创 2024-01-08 14:58:50 · 1174 阅读 · 0 评论 -
Flink往Starrocks写数据报错:too many filtered rows
这个其实比较郁闷,你抛出的异常是过滤出太多行,与not null有什么关系呢?但是,当你把not null去掉后,发现很多too many filtered rows的bug都能解决了。这个时候你把最新的数据导入,可能会报上面的错。正当你以为你根据字面意思就知道bug的本质的时候,你会发现有些场景,你日期写的完全没有问题依然会报上面的错(说明这个starrocks源码写的不严谨)。比如你写的是tinyint,但实际来的值超过这个范围,就会报错too many filtered rows(真有点扯淡啊)。原创 2023-11-06 10:40:36 · 1134 阅读 · 0 评论 -
error=‘Cannot allocate memory‘ (errno=12)
Linux中的top命令是一个动态显示过程,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。需要注意的是,在top命令运行的界面中,按下f键可以进入字段管理模式,可以选择要显示的列,并对列的顺序进行调整。NI:进程的nice值,表示进程的优先级调整值,数值越大,优先级越低。RES:进程使用的、未被换出的物理内存大小,单位为KB。PID:进程ID,每个进程都有一个唯一的ID。VIRT:进程使用的虚拟内存总量,单位为KB。PR:进程的优先级,数值越小,优先级越高。原创 2023-10-16 16:31:12 · 933 阅读 · 0 评论 -
java.lang.OutOfMemoryError: GC overhead limit exceeded
不同的管理模式下,这三部分占用的空间大小各不相同。Spark 对堆内内存的管理是一种逻辑上的”规划式”的管理,因为对象实例占用内存的申请和释放都由 JVM 完成,Spark 只能在申请后和释放前记录这些内存,我们来看其具体流程:原创 2023-10-09 09:23:03 · 540 阅读 · 0 评论 -
executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL TERM
大概的意思就是当把spark.dynamicAllocation.enabled参数设置为true的时候Spark自动根据任务的负载情况增加或减少执行者的数量。当executor空闲时间达到 spark.dynamicAllocation.executorIdleTimeout=60s的时间后,executor会被移除掉。首先程序能够正常运行,只是发现某些executor状态为Dead了,说明该executor被移除了,至于为什么会被移除,就得理解spark的动态分区了,这部分内容请参考。原创 2023-07-26 13:34:44 · 584 阅读 · 0 评论 -
Total size of serialized results of x tasks (x MB) is bigger than spark.driver.maxResultSize (y MB)
序列化是在网络传输过程中将数据对象转换为一系列字节的处理。在我们的Spark场景中,executor之间或driver和executor之间的数据传输是通过序列化数据进行的。原创 2023-07-26 10:03:10 · 599 阅读 · 0 评论 -
Container killed by YARN for exceeding memory limits
通过调整该参数,可以对executor的内存分配进行更精细的调节,以适应不同的任务和数据特征。那我们可以很明确了,如果是因为例如JVM堆外内存、Spark缓存、执行器本身的内部开销等导致的内存不足,的确增大这个参数有一定的效果,但是如果一个container的内存已经限制了,那么增加这个参数是没有任何效果的。关闭虚拟内存检测,有的时候的确能够让代码可以运行,但是关闭了对container内存的监控,虽然可以运行,但是明显没有实际性的处理问题,而且不可控的内存使用,对多租户的环境不友好。原创 2023-07-14 17:42:43 · 735 阅读 · 0 评论