欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spark?SQL小文件問(wèn)題處理

 更新時(shí)間:2023年04月07日 09:56:56   作者:寶哥大數(shù)據(jù)  
大量的小文件會(huì)影響Hadoop集群管理或者Spark在處理數(shù)據(jù)時(shí)的穩(wěn)定性,這篇文章主要介紹了Spark?SQL小文件問(wèn)題的處理,感興趣的同學(xué)可以借鑒一下

1.1、小文件危害

大量的小文件會(huì)影響Hadoop集群管理或者Spark在處理數(shù)據(jù)時(shí)的穩(wěn)定性:

  • 1.Spark SQL寫(xiě)Hive或者直接寫(xiě)入HDFS,過(guò)多的小文件會(huì)對(duì)NameNode內(nèi)存管理等產(chǎn)生巨大的壓力,會(huì)影響整個(gè)集群的穩(wěn)定運(yùn)行
  • 2.容易導(dǎo)致task數(shù)過(guò)多,如果超過(guò)參數(shù)spark.driver.maxResultSize的配置(默認(rèn)1g),會(huì)拋出類(lèi)似如下的異常,影響任務(wù)的處理
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)

當(dāng)然可以通過(guò)調(diào)大spark.driver.maxResultSize的默認(rèn)配置來(lái)解決問(wèn)題,但如果不能從源頭上解決小文件問(wèn)題,以后還可能遇到類(lèi)似的問(wèn)題。此外,Spark在處理任務(wù)時(shí),一個(gè)分區(qū)分配一個(gè)task進(jìn)行處理,多個(gè)分區(qū)并行處理,雖然并行處理能夠提高處理效率,但不是意味著task數(shù)越多越好。如果數(shù)據(jù)量不大,過(guò)多的task運(yùn)行反而會(huì)影響效率。最后,Spark中一個(gè)task處理一個(gè)分區(qū)從而也會(huì)影響最終生成的文件數(shù)。

1.2、產(chǎn)生小文件過(guò)多的原因

1、流式處理中,每個(gè)批次的處理執(zhí)行保存操作也會(huì)產(chǎn)生很多小文件
2、為了解決數(shù)據(jù)更新問(wèn)題,同一份數(shù)據(jù)保存了不同的幾個(gè)狀態(tài),也容易導(dǎo)致文件數(shù)過(guò)多

1.3、如何解決這種小文件的問(wèn)題呢?

  1. 通過(guò)repartition或coalesce算子控制最后的DataSet的分區(qū)數(shù), 注意repartition和coalesce的區(qū)別
  2. 將Hive風(fēng)格的Coalesce and Repartition Hint 應(yīng)用到Spark SQL 需要注意這種方式對(duì)Spark的版本有要求,建議在Spark2.4.X及以上版本使用,
示例:
INSERT ... SELECT /*+ COALESCE(numPartitions) */ ...
INSERT ... SELECT /*+ REPARTITION(numPartitions) */ ...
  • 小文件定期合并可以定時(shí)通過(guò)異步的方式針對(duì)Hive分區(qū)表的每一個(gè)分區(qū)中的小文件進(jìn)行合并操作

上述只是給出3種常見(jiàn)的解決辦法,并且要結(jié)合實(shí)際用到的技術(shù)和場(chǎng)景去具體處理,比如對(duì)于HDFS小文件過(guò)多,也可以通過(guò)生成HAR 文件或者Sequence File來(lái)解決。

1.3.1、調(diào)優(yōu)參數(shù)

在小文件場(chǎng)景下,您可以通過(guò)如下配置手動(dòng)指定每個(gè)Task的數(shù)據(jù)量(Split Size),確保不會(huì)產(chǎn)生過(guò)多的Task,提高性能。

當(dāng)SQL邏輯中不包含Shuffle操作時(shí),設(shè)置此配置項(xiàng),不會(huì)有明顯的性能提升。

參數(shù)描述默認(rèn)值
spark.sql.small.file.combine用于設(shè)置是否開(kāi)啟小文件優(yōu)化。
“true”表示開(kāi)啟。開(kāi)啟后,可以避免過(guò)多的小Task。
false
spark.sql.small.file.split.size合并小文件后,用于指定單個(gè)Task期望的數(shù)據(jù)量。
單位:Byte
256000000

set spark.default.parallelism = 400;

/*+ coalesce(40) */ 調(diào)整最后的task個(gè)數(shù);

SELECT age, name FROM person DISTRIBUTE BY age;//按照某個(gè)字段重新分區(qū)重新分區(qū)。
對(duì)于使用動(dòng)態(tài)分區(qū)的任務(wù),使用distribute by。

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

到此這篇關(guān)于Spark SQL小文件問(wèn)題處理的文章就介紹到這了,更多相關(guān)SQL小文件問(wèn)題處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于ADOX的相關(guān)知識(shí)

    關(guān)于ADOX的相關(guān)知識(shí)

    關(guān)于ADOX的相關(guān)知識(shí)...
    2006-12-12
  • SQL數(shù)據(jù)庫(kù)的所有命令(函數(shù)、運(yùn)算符)匯總大全

    SQL數(shù)據(jù)庫(kù)的所有命令(函數(shù)、運(yùn)算符)匯總大全

    結(jié)構(gòu)化查詢(xún)語(yǔ)言(Structured?Query?Language)簡(jiǎn)稱(chēng)SQL,結(jié)構(gòu)化查詢(xún)語(yǔ)言是一種數(shù)據(jù)庫(kù)查詢(xún)和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢(xún)、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。sql語(yǔ)句就是對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的一種語(yǔ)言。
    2023-01-01
  • 面試中常常被問(wèn)到sql優(yōu)化的幾種方案

    面試中常常被問(wèn)到sql優(yōu)化的幾種方案

    這篇文章主要給大家介紹了關(guān)于面試中常常被問(wèn)到sql優(yōu)化的幾種方案,現(xiàn)在?試過(guò)程中除了開(kāi)發(fā)的基礎(chǔ),?試官通常還會(huì)問(wèn)SQL優(yōu)化的??,SQL優(yōu)化也能體現(xiàn)出來(lái)平時(shí)對(duì)數(shù)據(jù)庫(kù)的理解和技術(shù)的?低,需要的朋友可以參考下
    2023-08-08
  • SQLite與MySQL區(qū)別及優(yōu)缺點(diǎn)介紹

    SQLite與MySQL區(qū)別及優(yōu)缺點(diǎn)介紹

    這篇文章介紹了SQLite與MySQL的區(qū)別及優(yōu)缺點(diǎn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Navicat Premium 15 永久破解激活工具及安裝教程(親測(cè)可用)

    Navicat Premium 15 永久破解激活工具及安裝教程(親測(cè)可用)

    這篇文章主要介紹了Navicat Premium 15 永久破解激活教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 很全的SQL中文解釋代碼

    很全的SQL中文解釋代碼

    學(xué)習(xí)sql的朋友可以參考下,中文版sql命令
    2008-04-04
  • 簡(jiǎn)單分析SQLite4的一些設(shè)計(jì)改變

    簡(jiǎn)單分析SQLite4的一些設(shè)計(jì)改變

    這篇文章主要介紹了SQLite4的一些設(shè)計(jì)改變,SQLite作為內(nèi)嵌式數(shù)據(jù)庫(kù)使用起來(lái)非常輕便,需要的朋友可以參考下
    2015-07-07
  • 數(shù)據(jù)庫(kù)查詢(xún)排除重復(fù)記錄的方法

    數(shù)據(jù)庫(kù)查詢(xún)排除重復(fù)記錄的方法

    這篇文章主要介紹了數(shù)據(jù)庫(kù)查詢(xún)排除重復(fù)記錄的方法,使用DISTINCT語(yǔ)句實(shí)現(xiàn),需要的朋友可以參考下
    2014-06-06
  • 開(kāi)源數(shù)據(jù)庫(kù)設(shè)計(jì)神器chiner的安裝及初體驗(yàn)介紹

    開(kāi)源數(shù)據(jù)庫(kù)設(shè)計(jì)神器chiner的安裝及初體驗(yàn)介紹

    最近在造輪子,從?0?到?1?的那種,就差前臺(tái)的界面了,大家可以耐心耐心耐心期待一下。其中需要設(shè)計(jì)一些數(shù)據(jù)庫(kù)表,可以通過(guò)?Navicat?這種圖形化管理工具直接開(kāi)搞,也可以通過(guò)一些數(shù)據(jù)庫(kù)設(shè)計(jì)工具來(lái)搞,比如說(shuō)?PowerDesigner,更專(zhuān)業(yè)一點(diǎn)
    2022-02-02
  • 基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫(kù)

    基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫(kù)

    這篇文章主要介紹了基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論