<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
設定: hive.fetch.task.conversion= more。
--在下述3種情況下 sql不走mr程式 --全域性查詢 select * from student; --欄位查詢 select num,name from student; --limit 查詢 select num,name from student limit 2;
功能:如果非要執行==MapReduce程式,能夠本地執行的,儘量不提交yarn上執行==。
預設是關閉的。意味著只要走MapReduce就提交yarn執行。
mapreduce.framework.name = local 本地模式 mapreduce.framework.name = yarn 叢集模式
Hive提供了一個引數,自動切換MapReduce程式為本地模式,如果不滿足條件,就執行yarn模式。
set hive.exec.mode.local.auto = true; --3個條件必須都滿足 自動切換本地模式 The total input size of the job is lower than: hive.exec.mode.local.auto.inputbytes.max (128MB by default) --資料量小於128M The total number of map-tasks is less than: hive.exec.mode.local.auto.tasks.max (4 by default) --maptask個數少於4個 The total number of reduce tasks required is 1 or 0. --reducetask個數是0 或者 1
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
如果針對Hive的調優依然無法滿足你的需求 還是效率低, 嘗試使用spark計算引擎 或者Tez.
在瞭解join優化的時候,我們需要了解一個前置知識點:map端join 和reduce端join
適合於大表Join大表
bucket join-- 適合於大表Join大表
方式1:Bucktet Map Join 分桶表
語法: clustered by colName(參與join的欄位)
引數: set hive.optimize.bucketmapjoin = true
要求: 分桶欄位 = Join欄位 ,分桶的個數相等或者成倍數,必須是在map join中
方式2:Sort Merge Bucket Join(SMB)
基於有序的資料Join
語法:clustered by colName sorted by (colName)
引數
set hive.optimize.bucketmapjoin = true;
set hive.auto.convert.sortmerge.join=true;
set hive.optimize.bucketmapjoin.sortedmerge = true;
set hive.auto.convert.sortmerge.join.noconditionaltask=true;
要求: 分桶欄位 = Join欄位 = 排序欄位,分桶的個數相等或者成倍數
hive.auto.convert.join=true Hive老版本 #如果參與的一個表大小滿足條件 轉換為map join hive.mapjoin.smalltable.filesize=25000000 Hive2.0之後版本 #是否啟用基於輸入檔案的大小,將reduce join轉化為Map join的優化機制。假設參與join的表(或分割區)有N個,如果開啟這個引數,並且有N-1個表(或分割區)的大小總和小於hive.auto.convert.join.noconditionaltask.size引數指定的值,那麼會直接將join轉為Map join。 hive.auto.convert.join.noconditionaltask=true hive.auto.convert.join.noconditionaltask.size=512000000
資料傾斜優化
什麼是資料傾斜
描述的資料進行分散式處理 分配不平均的現象
資料傾斜的後果
某個task資料量過大 執行時間過長 導致整體job任務遲遲不結束
執行時間長 出bug及風險機率提高
霸佔運算資源 遲遲不釋放
通常如何發現資料傾斜
在yarn或者其他資源監控軟體上 發現某個job作業 卡在某個進度遲遲不動 (注意 倒不是報錯)
造成資料傾斜的原因
資料本身就傾斜
自定義分割區、分組規則不合理
業務影響 造成資料短期高頻波動
資料傾斜的通用解決方案
1、有錢 有預警
增加物理資源 單獨處理傾斜的資料
2、沒錢 沒有預警
傾斜資料打散 分步執行
先將傾斜資料打散成多幹份
處理的結果再最終合併
hive中資料傾斜的場景
場景一:group by 、count(distinct)
hive.map.aggr=true; map端預聚合
手動將資料隨機分割區 select * from table distribute by rand();
如果有資料傾斜問題 開啟負載均衡
先啟動第一個mr程式 把傾斜的資料隨機打散分散到各個reduce中
然後第二個mr程式把上一步結果進行最終彙總
hive.groupby.skewindata=true;
場景二:join
提前過濾,將巨量資料變成小資料,實現Map Join
使用Bucket Join
使用Skew Join
將Map Join和Reduce Join進行合併,如果某個值出現了資料傾斜,就會將產生資料傾斜的資料單獨使用Map Join來實現
最終將Map Join的結果和Reduce Join的結果進行Union合併
Hive中通常指的是在reduce階段資料傾斜
解決方法
方案一:開啟Map端聚合
hive.map.aggr=true; #是否在Hive Group By 查詢中使用map端聚合。 #這個設定可以將頂層的部分聚合操作放在Map階段執行,從而減輕清洗階段資料傳輸和Reduce階段的執行時間,提升總體效能。但是指標不治本。
方案二:實現隨機分割區
實現隨機分割區 select * from table distribute by rand();
方案三:資料傾斜時==自動負載均衡==只使用group by
hive.groupby.skewindata=true; #開啟該引數以後,當前程式會自動通過兩個MapReduce來執行 #第一個MapReduce自動進行隨機分佈到Reducer中,每個Reducer做部分聚合操作,輸出結果 #第二個MapReduce將上一步聚合的結果再按照業務(group by key)進行處理,保證相同的分佈到一起,最終聚合得到結果
資料單獨使用Map Join來實現
#其他沒有產生資料傾斜的資料由Reduce Join來實現,這樣就避免了Reduce Join中產生資料傾斜的問題 #最終將Map Join的結果和Reduce Join的結果進行Union合併 #開啟執行過程中skewjoin set hive.optimize.skewjoin=true; #如果這個key的出現的次數超過這個範圍 set hive.skewjoin.key=100000; #在編譯時判斷是否會產生資料傾斜 set hive.optimize.skewjoin.compiletime=true; set hive.optimize.union.remove=true; #如果Hive的底層走的是MapReduce,必須開啟這個屬性,才能實現不合並 set mapreduce.input.fileinputformat.input.dir.recursive=true;
合併的大小最好=block size
如果大檔案多,就調整blocl size
hive.exec.reducers.bytes.per.reducer=256000000
每個任務最大的 reduce 數,預設為 1009
hive.exec.reducsers.max=1009
mapreduce.job.reduces
該值預設為-1,由 hive 自己根據任務情況進行判斷。--如果使用者使用者不設定 hive將會根據資料量或者sql需求自己評估reducetask個數。
--使用者可以自己通過引數設定reducetask的個數
set mapreduce.job.reduces = N
--使用者設定的不一定生效,如果使用者設定的和sql執行邏輯有衝突,比如order by,在sql編譯期間,hive又會將reducetask設定為合理的個數。Number of reduce tasks determined at compile time: 1
通過執行計劃可以看出==hive接下來是如何打算執行這條sql的==。
語法格式:explain + sql語句
並行執行機制
引數
set hive.exec.parallel=true; --是否並行執行作業。適用於可以並行執行的 MapReduce 作業,例如在多次插入期間移動檔案以插入目標 set hive.exec.parallel.thread.number=16; --最多可以並行執行多少個作業。預設為8。
設定
set hive.mapred.mode = strict --預設是嚴格模式 nonstrict
解釋
1、如果是分割區表,沒有where進行分割區裁剪 禁止執行
2、order by語句必須+limit限制
推測執行機制 ==建議關閉==。
一個job底層可能有多個task執行,如果某些拖後腿的task執行慢,可能會導致最終job失敗。
所謂的==推測執行機制就是通過演演算法找出拖後腿的task,為其啟動備份的task==。
兩個task同時處理一份資料,誰先處理完,誰的結果作為最終結果。
以上就是Apache Hive 通用調優featch抓取機制 mr本地模式的詳細內容,更多關於Apache Hive 通用調優的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45