请输入
菜单

ETL常见报错

1. 数据倾斜导致ETL运行失败(超时)

【可能的原因】

1)表关联的时候,关联的键中存在大量的NULL值

2)字段(比如字段值为 -99 , ’’, null 等) 关联时产生的数据倾斜

【解决方法】

1)方法1:先筛选出key为非null的数据进行关联操作,再把key为null的数据拼接回去;


?方法1示例

image.png

2)把空值的 key 变成一个字符串加上随机数,就能把倾斜的数据分到不同的reduce上(进行分块),解决数据倾斜问题。


?方法2示例

image.png



2. 报错信息:org.apache.spark.SparkException: Could not execute broadcast in 300 secs. You can increase the timeout for broadcasts via spark.sql.broadcastTimeout or disable broadcast join by setting spark.sql.autoBroadcastJoinThreshold to –1

问题表象:
两个不同的ETL(之前近一个月都是稳定运行)报同样的错误,重新点击运行后也能正常运行;

【原因】:进入环境,排查相应ETL,客户join后的数据帧较大,需要耗费较长时间,而程序默认spark.sql.broadcastTimeout配置属性默认值为5 * 60秒,即300sec,这个远远不够,随着客户ETL复杂度越来越高,这个报错会很频繁

【解决方案】所以建议设置一下spark.sql.broadcastTimeout参数,将它调大:如config("spark.sql.broadcastTimeout", "3600")

3. ETL分组聚合节点提示丢失字段,但实际上并没有丢失该字段

【原因】:大概率是这个字段ID发生了改变,比如输入数据集字段做了变动(可能是把这个字段删除又重新建了一个,导致字段id变化),但是ETL里保留的是原先的字段id,所以两个id对不上就会报丢失字段的错误。
【解决方案】:重新拖下字段就可以了。

4. ETL里值替换报错的可能原因是什么?

【原因】:可能是字段类型的问题,比如数值字段如果替换为文本字段,那么就会报错。

【解决方案】:这种情况下可以在替换之前加一个新建字段的节点,转换下字段格式。

5. ETL更新报错Cannot broadcast the table that is larger than 8GB: * GB

原因是超出了spark表broadcast join的限制,常见的情况可能是关联节点有无法匹配到数据的关联,导致关联后的值出现大量Null(这时数据会大量膨胀,在后续进行计算时,就容易超出了spark的broadcast join限制-8GB)


上一个
ETL常见问题
下一个
可视化
最近修改: 1970-01-01Powered by