Spark避免小檔案

2021-10-09 18:45:19 字數 573 閱讀 3144

select * from table1

distribute by rand();

select /+ repartition(200) / a. from table1 a;

select /+ coalesce(200) / a. from table1 a;

用 coalesce或者repartition,num=(1.0*(df.count())/7000000).ceil.toint

df.coalesce(num)

df.repartition(num)

spark sql自適應功能,目前spark 的各版本的release中其實也就兩個引數,設spark.sql.adaptive.enabled=true即可開啟該功能,spark.sql.adaptive.shuffle.targetpostshuffleinputsize設定reduce任務處理檔案的上限,配合結論3使用,解決小檔案問題事半功倍

注意:repartition會產生大量shuffle操作,會占用很大資源,有可能引入資料傾斜的問題,還有oom的風險,如果不需要輸出檔案大小均勻的情況下,推薦使用coalesce來合併小檔案

Spark 大 小檔案讀取優化

問題描述 使用spark寫複雜sql時,我們經常會遇到兩個尷尬的情況 對於第一種情況,會導致我們沒辦法充分利用我們已有的核,所以速度很慢。對於第二種情況,則會大量浪費排程時間。比如你有100萬個檔案,假設只有100個核,那麼需要排程一萬輪,每輪排程除了排程自身的消耗,還有很多額外的消耗。在沒有shu...

spark 匯入檔案到hive出現多小檔案的問題

環境 ambari 2.6.1 spark 2.1 python 3.6 oracle 11.2 sqoop 1.4 將sqoop採集到hdfs中的檔案匯入到hive資料庫,匯入成功後,發現hive資料庫中出現多個小檔案的問題,嚴重影響後期資料分析的載入速度。解決方法 sjtable spark.s...

spark寫入hdfs檔案小檔案解決辦法

我們在使用spark寫入hdfs檔案時,會經常由於partition的數目問題,導致最後儲存在hdfs中時產生了很多小檔案,之前也用過repartition的方法,但是會出現雖然會大量減少生成檔案的數目,但是會使得最後儲存檔案這一步的效率很低,主要也是當repartition數目很小時,task任務...