日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive小文件优化

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive小文件优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考文檔
參考文檔
參考文檔

小文件優化

小文件產生的原因

  • 動態分區插入數據,產生大量小文件,從而導致map數量劇增
  • reduce數量越多,小文件也可能越多(reduce的數量等于輸出文件的數量)
  • 數據源本身包含大量的小文件
  • 小文件的影響

  • 從hive的角度,小文件過多會啟動很多map,一個map就是一個JVM進程,這些任務初始化,啟動,執行會浪費大量的資源,嚴重影響性能
  • 在hdfs中,每個小文件對象的元數據信息大約150byt。如果小文件過多會占用大量內存。這樣NameNode內存容量嚴重制約集群的擴展
  • 相關優化

  • 小文件的預防

    • 設置map和reduce個數,通用性不好// 設置map的數量 set mapred.map.tasks =10; // 設置reduce任務數,輸出文件數量對應reduce個數 set mapred.reduce.tasks=10;// 設置每個reduce處理文件最大字節長度,可以增加或減少reduce的數量 set hive.exec.reducers.bytes.per.reducer = 256000000;
    • 設置map輸入相關參數// 每個Map最大輸入大小(這個值決定了合并后文件的數量) set mapred.max.split.size=256000000; // 一個節點上split的至少的大小(這個值決定了多個DataNode上的文件是否需要合并) set mapred.min.split.size.per.node=100000000; // 一個交換機下split的至少的大小(這個值決定了多個交換機上的文件是否需要合并) set mapred.min.split.size.per.rack=100000000; // 執行Map前進行小文件合并 set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
    • 設置map和reduce輸出相關參數// 設置map端輸出進行合并,默認為true set hive.merge.mapfiles = true // 設置合并文件的大小 set hive.merge.size.per.task = 256000000 // 設置reduce端輸出進行合并,默認為false set hive.merge.mapredfiles = true // 控制一個job當中會有多少reduce來處理,依據的是輸入文件的總大小 set hive.exec.reducers.bytes.per.reducer=256000000 // 當輸出文件的平均大小小于該值時,啟動一個獨立的MapReduce任務進行文件merge。 set hive.merge.smallfiles.avgsize=16000000
  • 小文件解決

    • distribute by

      insert overwrite table test [partition(hour=...)] select * from test distribute by floor (rand()*5);
      • distribute by:主要是控制在map端如何拆分數據給reduce端,其后的列用于控制落地文件數,默認采用hash算法
      • rand():控制最終生成的文件個數

      注意:這個語句把test表的數據查詢出來,overwrite覆蓋test表,不用擔心如果overwrite失敗,數據沒了,這里面是有事務性保證的,可以觀察一下執行的時候,在test表hdfs文件目錄下面有個臨時文件夾。如果是分區表,加上partition,表示對該分區進行overwrite

    • concatenate

      // 這種方式只適用于orc文件存儲格式的表 alter table TableName [partition(...)] concatenate
  • 總結

    以上是生活随笔為你收集整理的Hive小文件优化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。