亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spark?SQL小文件問題如何處理

發布時間:2023-04-07 10:34:51 來源:億速云 閱讀:115 作者:iii 欄目:開發技術

本篇內容主要講解“Spark SQL小文件問題如何處理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spark SQL小文件問題如何處理”吧!

1.1、小文件危害

大量的小文件會影響Hadoop集群管理或者Spark在處理數據時的穩定性:

  • 1.Spark SQL寫Hive或者直接寫入HDFS,過多的小文件會對NameNode內存管理等產生巨大的壓力,會影響整個集群的穩定運行

  • 2.容易導致task數過多,如果超過參數spark.driver.maxResultSize的配置(默認1g),會拋出類似如下的異常,影響任務的處理

Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized results of 478 tasks (2026.0 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)

當然可以通過調大spark.driver.maxResultSize的默認配置來解決問題,但如果不能從源頭上解決小文件問題,以后還可能遇到類似的問題。此外,Spark在處理任務時,一個分區分配一個task進行處理,多個分區并行處理,雖然并行處理能夠提高處理效率,但不是意味著task數越多越好。如果數據量不大,過多的task運行反而會影響效率。最后,Spark中一個task處理一個分區從而也會影響最終生成的文件數。

1.2、產生小文件過多的原因

1、流式處理中,每個批次的處理執行保存操作也會產生很多小文件
2、為了解決數據更新問題,同一份數據保存了不同的幾個狀態,也容易導致文件數過多

1.3、如何解決這種小文件的問題呢?

  1. 通過repartition或coalesce算子控制最后的DataSet的分區數, 注意repartition和coalesce的區別

  2. 將Hive風格的Coalesce and Repartition Hint 應用到Spark SQL 需要注意這種方式對Spark的版本有要求,建議在Spark2.4.X及以上版本使用,

示例:
INSERT ... SELECT /*+ COALESCE(numPartitions) */ ...
INSERT ... SELECT /*+ REPARTITION(numPartitions) */ ...
  • 小文件定期合并可以定時通過異步的方式針對Hive分區表的每一個分區中的小文件進行合并操作

上述只是給出3種常見的解決辦法,并且要結合實際用到的技術和場景去具體處理,比如對于HDFS小文件過多,也可以通過生成HAR 文件或者Sequence File來解決。

1.3.1、調優參數

在小文件場景下,您可以通過如下配置手動指定每個Task的數據量(Split Size),確保不會產生過多的Task,提高性能。

當SQL邏輯中不包含Shuffle操作時,設置此配置項,不會有明顯的性能提升。

參數描述默認值
spark.sql.small.file.combine用于設置是否開啟小文件優化。
“true”表示開啟。開啟后,可以避免過多的小Task。
false
spark.sql.small.file.split.size合并小文件后,用于指定單個Task期望的數據量。
單位:Byte
256000000

set spark.default.parallelism = 400;

/*+ coalesce(40) */ 調整最后的task個數;

SELECT age, name FROM person DISTRIBUTE BY age;//按照某個字段重新分區重新分區。
對于使用動態分區的任務,使用distribute by。

insert overwrite table dm.dm_grw_retain_abtest_sd partition (year, month, day, retain_days)
select ……
distribute by retain_days -- 最終每個子分區一個文件
distribute by retain_days, cast(rand()*7 as int) -- 最終每個子分區7個文件

到此,相信大家對“Spark SQL小文件問題如何處理”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

华蓥市| 鹤庆县| 肃宁县| 武山县| 钟山县| 栖霞市| 贺兰县| 海盐县| 东兰县| 吐鲁番市| 晋江市| 桐梓县| 北宁市| 周口市| 喀喇沁旗| 衡南县| 余庆县| 习水县| 南开区| 连南| 积石山| 封开县| 紫金县| 电白县| 禹城市| 达拉特旗| 峨边| 新干县| 鞍山市| 姚安县| 新昌县| 红桥区| 上饶市| 民丰县| 兰西县| 石棉县| 沽源县| 寿光市| 库尔勒市| 井陉县| 扎鲁特旗|