1、表和sql的優化 -》大表拆分成小表、分區表、外部表、臨時表都是屬於優化的一塊 -》分區表:檢索更快速 -》外部表:數據安全性 -》臨時表&拆分子表:簡化複雜的SQL以及需求 2、SQL可以從join和fliter兩方面深入 3、MR優化 -》map和reduce的個數 -》一個分片就是一個塊, ...
1、表和sql的優化
-》大表拆分成小表、分區表、外部表、臨時表都是屬於優化的一塊
-》分區表:檢索更快速
-》外部表:數據安全性
-》臨時表&拆分子表:簡化複雜的SQL以及需求
2、SQL可以從join和fliter兩方面深入
3、MR優化
-》map和reduce的個數
-》一個分片就是一個塊,一個塊對應一個maptask
-》Hadoop源碼中有一個計算公式
min(max_split_size,max(min_split_size,block_size))
-》min_split_size預設值0(最小分片大小)
-》max取的時候取的是block_size,block_size預設是128
-》max_split_size預設值256(最大分片大小)
-》這個公式決定了map的個數
-》肯定不能直接去修改HDFS的block_size
-》一般在實際的生產環境中HDFS一旦format格式化之後,block_size大小不會去修改的
-》通過修改max_split_size和min_split_size來影響map的個數
-》並行執行
-》針對有些互相沒有依賴關係的獨立的job,可以選擇併發的執行job
hive.exec.parallel
-》是否開啟 並行執行的功能
hive.exec.parallel.thread.number
-》設置並行執行的線程個數
-》一般在工作中會選擇去開啟該功能
-》根據實際的集群的狀況和伺服器的性能合理的設置線程數目
-》JVM重用
-》mapreduce.job.jvm.numtasks通過合理的測試,設置一個合理的數目
-》推測執行
-》當某個任務出現遲遲不結束的情況,那麼會考慮開啟推測執行,開啟一個一模一樣的任務去完成
-》兩個任務誰先完成,就會關閉另一個
-》分為map端的推測和reduce端的推測
-》不好的地方:過多的消耗資源
mapreduce.map.speculative
mapreduce.reduce.speculative
-》額外消耗節點資源
-》可能會出現重覆寫入的情況,產生異常
4、hive本地模式
-》業務場景:處理小數據集的時候,速度會更快一些
-》hive.exec.mode.local.auto
-》本地模式的限制:數據的輸入大小不能超過128MB
-》本地模式的限制:map數不能超過4個
-》本地模式的限制:reduce的個數不能超過1個