標籤:cee imp 情況 use 根據 inpu from NPU cti
代碼:
import com.mongodb.spark.config.ReadConfigimport com.mongodb.spark.sql._val config = sqlContext.sparkContext.getConf.set("spark.mongodb.keep_alive_ms", "15000").set("spark.mongodb.input.uri", "mongodb://10.100.12.14:27017").set("spark.mongodb.input.database", "bi").set("spark.mongodb.input.collection", "userGroupMapping")val readConfig = ReadConfig(config)val objUserGroupMapping = sqlContext.read.format("com.mongodb.spark.sql").mongo(readConfig)objUserGroupMapping.printSchema()val tbUserGroupMapping=objUserGroupMapping.toDF()tbUserGroupMapping.registerTempTable("userGroupMapping")select _id,c,g,n,rn,t,ut from userGroupMapping where ut>‘2018-05-02‘ limit 100
使用上述的代碼取userGroupMapping 集合過後的100條記錄,出現了executor time out 和GC overhead limit exceeded 異常。一開始以為推測是task 從mongodb取的資料太大,導致spark executor記憶體不夠,後來調研了一下spark mongodb connector 在取資料的時候是條件下發的,也就是先從mongodb過濾再取回spark 記憶體,這樣的話就不會出現記憶體不夠的情況。後來在網上調研後,有一種說法是說task 太多,導致task gc的時候爭奪gc時間和記憶體資源(這個不是很清楚),根據這種說法,我把本來task core 從16個調成6個後再跑程式,居然不會報錯了。至於 具體原因還不是很清楚,先在這裡記錄一下。
spark 讀取mongodb失敗,報executor time out 和GC overhead limit exceeded 異常