org.apache.spark.shuffle.FetchFailedException: Connecting to xxx timed out (120000 ms)
原因:数据读取过多
结果:导致stage失败,然后重试
解决:暂无
原因:内存处理数据量过大,executor内存不足
结果:当前task失败
解决:
--conf spark.yarn.executor.memoryOverhead=4096
(注意这里的单位是MB)
https://blog.csdn.net/weixin_39750084/article/details/107637667
原因:有task占用的内存太大,而我们的yarn又是使用的公平调度机制,当有新任务来的时候,我的task对应的容器就会被别的任务抢占。
结果:task失败重试,失败次数很多后会产生FetchFailedException错误,导致stage失败
解决(maybe):避免资源紧张;减少不必要的数据,或者减少不必要的关联/操作,避免一个task中数据过多;改yarn的参数了,让资源抢占的门限值变高些。
Caused by: java.io.NotSerializableException: com.google.gson.Gson
Serialization stack:......
java.io.NotSerializableException是因为你试图序列化一个不可序列化的对象。在这个例子中,com.google.gson.Gson对象是不可序列化的。
问题定位:
def executeDiffLayer(dataDf: DataFrame): DataFrame = {
val gson = new Gson()
val changeDf = dataDf
.map(row => {
val value = row.getAsmutable.WrappedArray[String].map(gson.fromJson(, classOf[xxx])).toList
(value)
}).toDF()
}
在Spark中,map函数中的所有对象都需要被序列化以便在网络中传输。但是Gson对象是不可序列化的,所以在运行时会抛出NotSerializableException异常。
解决:
将Gson对象的创建放在map函数中,这样每次在executor上执行map函数时,都会创建一个新的Gson对象,而不需要将Gson对象序列化传输。