国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Apache Hive 通用調(diào)優(yōu)featch抓取機(jī)制 mr本地模式

瀏覽:111日期:2023-03-07 14:40:16
目錄
  • Apache Hive-通用優(yōu)化-featch抓取機(jī)制 mr本地模式
    • Fetch抓取機(jī)制
    • mapreduce本地模式
    • 切換Hive的執(zhí)行引擎
  • Apache Hive-通用優(yōu)化-join優(yōu)化
    • - reduce端join
    • -map端join
    • reduce 端 join 優(yōu)化
    • map 端 join 優(yōu)化
  • Apache Hive--通用調(diào)優(yōu)--數(shù)據(jù)傾斜優(yōu)化
    • group by數(shù)據(jù)傾斜
    • join數(shù)據(jù)傾斜
  • Apache Hive--通用調(diào)優(yōu)--MR程序task個(gè)數(shù)調(diào)整
    • maptask個(gè)數(shù)
    • reducetask個(gè)數(shù)
  • 通用優(yōu)化-執(zhí)行計(jì)劃
    • 通用優(yōu)化-并行機(jī)制,推測(cè)執(zhí)行機(jī)制
    • Hive的嚴(yán)格模式

Apache Hive-通用優(yōu)化-featch抓取機(jī)制 mr本地模式

Fetch抓取機(jī)制

  • 功能:在執(zhí)行sql的時(shí)候,能不走M(jìn)apReduce程序處理就盡量不走M(jìn)apReduce程序處理.
  • 盡量直接去操作數(shù)據(jù)文件。

設(shè)置: 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本地模式

  • MapReduce程序除了可以提交到y(tǒng)arn集群分布式執(zhí)行之外,還可以使用本地模擬環(huán)境運(yùn)行,當(dāng)然此時(shí)就不是分布式執(zhí)行的程序,但是針對(duì)小文件小數(shù)據(jù)處理特別有效果。
  • 用戶可以通過(guò)設(shè)置hive.exec.mode.local.auto的值為true,來(lái)讓Hive在適當(dāng)?shù)臅r(shí)候自動(dòng)啟動(dòng)這個(gè) 優(yōu)化。

功能:如果非要執(zhí)行==MapReduce程序,能夠本地執(zhí)行的,盡量不提交yarn上執(zhí)行==。

默認(rèn)是關(guān)閉的。意味著只要走M(jìn)apReduce就提交yarn執(zhí)行。

mapreduce.framework.name = local 本地模式mapreduce.framework.name = yarn 集群模式 

Hive提供了一個(gè)參數(shù),自動(dòng)切換MapReduce程序?yàn)楸镜啬J剑绻粷M足條件,就執(zhí)行yarn模式。

set hive.exec.mode.local.auto = true;--3個(gè)條件必須都滿足 自動(dòng)切換本地模式The total input size of the job is lower than: hive.exec.mode.local.auto.inputbytes.max (128MB by default)  --數(shù)據(jù)量小于128MThe total number of map-tasks is less than: hive.exec.mode.local.auto.tasks.max (4 by default)  --maptask個(gè)數(shù)少于4個(gè)The total number of reduce tasks required is 1 or 0.  --reducetask個(gè)數(shù)是0 或者 1

切換Hive的執(zhí)行引擎

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.

如果針對(duì)Hive的調(diào)優(yōu)依然無(wú)法滿足你的需求 還是效率低, 嘗試使用spark計(jì)算引擎 或者Tez.

Apache Hive-通用優(yōu)化-join優(yōu)化

在了解join優(yōu)化的時(shí)候,我們需要了解一個(gè)前置知識(shí)點(diǎn):map端join 和reduce端join

- reduce端join

  • 這種join的弊端在于map階段沒有承擔(dān)太多的責(zé)任,所有的數(shù)據(jù)在經(jīng)過(guò)shuffle在reduce階段實(shí)現(xiàn)的,而shuffle又是影響性能的核心點(diǎn).

-map端join

  • 首先啟動(dòng)本地任務(wù)將join中小表數(shù)據(jù)進(jìn)行分布式緩存
  • 啟動(dòng)mr程序(只有map階段)并行處理大數(shù)據(jù),并且從自己的緩存中讀取小表數(shù)據(jù),進(jìn)行join,結(jié)果直接輸出到文件中
  • 沒有shuffle過(guò)程 也沒有reduce過(guò)程
  • 弊端:緩存太小導(dǎo)致表數(shù)據(jù)不能太大

reduce 端 join 優(yōu)化

適合于大表Join大表

bucket join-- 適合于大表Join大表

方式1:Bucktet Map Join 分桶表

語(yǔ)法: clustered by colName(參與join的字段)
參數(shù): set hive.optimize.bucketmapjoin = true
要求: 分桶字段 = Join字段 ,分桶的個(gè)數(shù)相等或者成倍數(shù),必須是在map join中

方式2:Sort Merge Bucket Join(SMB)

基于有序的數(shù)據(jù)Join
語(yǔ)法:clustered by colName sorted by (colName)
參數(shù)
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字段 = 排序字段,分桶的個(gè)數(shù)相等或者成倍數(shù)

map 端 join 優(yōu)化

  • hive.auto.convert.join.noconditionaltask
hive.auto.convert.join=trueHive老版本#如果參與的一個(gè)表大小滿足條件 轉(zhuǎn)換為map joinhive.mapjoin.smalltable.filesize=25000000  Hive2.0之后版本#是否啟用基于輸入文件的大小,將reduce join轉(zhuǎn)化為Map join的優(yōu)化機(jī)制。假設(shè)參與join的表(或分區(qū))有N個(gè),如果打開這個(gè)參數(shù),并且有N-1個(gè)表(或分區(qū))的大小總和小于hive.auto.convert.join.noconditionaltask.size參數(shù)指定的值,那么會(huì)直接將join轉(zhuǎn)為Map join。hive.auto.convert.join.noconditionaltask=true hive.auto.convert.join.noconditionaltask.size=512000000 

Apache Hive--通用調(diào)優(yōu)--數(shù)據(jù)傾斜優(yōu)化

數(shù)據(jù)傾斜優(yōu)化
什么是數(shù)據(jù)傾斜
描述的數(shù)據(jù)進(jìn)行分布式處理 分配不平均的現(xiàn)象
數(shù)據(jù)傾斜的后果
某個(gè)task數(shù)據(jù)量過(guò)大 執(zhí)行時(shí)間過(guò)長(zhǎng) 導(dǎo)致整體job任務(wù)遲遲不結(jié)束
執(zhí)行時(shí)間長(zhǎng) 出bug及風(fēng)險(xiǎn)幾率提高
霸占運(yùn)算資源 遲遲不釋放
通常如何發(fā)現(xiàn)數(shù)據(jù)傾斜
在yarn或者其他資源監(jiān)控軟件上 發(fā)現(xiàn)某個(gè)job作業(yè) 卡在某個(gè)進(jìn)度遲遲不動(dòng) (注意 倒不是報(bào)錯(cuò))
造成數(shù)據(jù)傾斜的原因
數(shù)據(jù)本身就傾斜
自定義分區(qū)、分組規(guī)則不合理
業(yè)務(wù)影響 造成數(shù)據(jù)短期高頻波動(dòng)
數(shù)據(jù)傾斜的通用解決方案
1、有錢 有預(yù)警
增加物理資源 單獨(dú)處理傾斜的數(shù)據(jù)
2、沒錢 沒有預(yù)警
傾斜數(shù)據(jù)打散 分步執(zhí)行
先將傾斜數(shù)據(jù)打散成多干份
處理的結(jié)果再最終合并
hive中數(shù)據(jù)傾斜的場(chǎng)景
場(chǎng)景一:group by 、count(distinct)
hive.map.aggr=true; map端預(yù)聚合
手動(dòng)將數(shù)據(jù)隨機(jī)分區(qū) select * from table distribute by rand();
如果有數(shù)據(jù)傾斜問(wèn)題 開啟負(fù)載均衡
先啟動(dòng)第一個(gè)mr程序 把傾斜的數(shù)據(jù)隨機(jī)打散分散到各個(gè)reduce中
然后第二個(gè)mr程序把上一步結(jié)果進(jìn)行最終匯總
hive.groupby.skewindata=true;
場(chǎng)景二:join
提前過(guò)濾,將大數(shù)據(jù)變成小數(shù)據(jù),實(shí)現(xiàn)Map Join
使用Bucket Join
使用Skew Join
將Map Join和Reduce Join進(jìn)行合并,如果某個(gè)值出現(xiàn)了數(shù)據(jù)傾斜,就會(huì)將產(chǎn)生數(shù)據(jù)傾斜的數(shù)據(jù)單獨(dú)使用Map Join來(lái)實(shí)現(xiàn)
最終將Map Join的結(jié)果和Reduce Join的結(jié)果進(jìn)行Union合并
Hive中通常指的是在reduce階段數(shù)據(jù)傾斜

解決方法

group by數(shù)據(jù)傾斜

方案一:開啟Map端聚合

hive.map.aggr=true;#是否在Hive Group By 查詢中使用map端聚合。#這個(gè)設(shè)置可以將頂層的部分聚合操作放在Map階段執(zhí)行,從而減輕清洗階段數(shù)據(jù)傳輸和Reduce階段的執(zhí)行時(shí)間,提升總體性能。但是指標(biāo)不治本。

方案二:實(shí)現(xiàn)隨機(jī)分區(qū)

實(shí)現(xiàn)隨機(jī)分區(qū)select * from table distribute by rand();

方案三:數(shù)據(jù)傾斜時(shí)==自動(dòng)負(fù)載均衡==只使用group by

hive.groupby.skewindata=true;#開啟該參數(shù)以后,當(dāng)前程序會(huì)自動(dòng)通過(guò)兩個(gè)MapReduce來(lái)運(yùn)行#第一個(gè)MapReduce自動(dòng)進(jìn)行隨機(jī)分布到Reducer中,每個(gè)Reducer做部分聚合操作,輸出結(jié)果#第二個(gè)MapReduce將上一步聚合的結(jié)果再按照業(yè)務(wù)(group by key)進(jìn)行處理,保證相同的分布到一起,最終聚合得到結(jié)果

join數(shù)據(jù)傾斜

  • 方案一:提前過(guò)濾,將大數(shù)據(jù)變成小數(shù)據(jù),實(shí)現(xiàn)Map Join
  • 方案二:使用Bucket Join
  • 方案三:使用Skew Join

數(shù)據(jù)單獨(dú)使用Map Join來(lái)實(shí)現(xiàn)

#其他沒有產(chǎn)生數(shù)據(jù)傾斜的數(shù)據(jù)由Reduce Join來(lái)實(shí)現(xiàn),這樣就避免了Reduce Join中產(chǎn)生數(shù)據(jù)傾斜的問(wèn)題#最終將Map Join的結(jié)果和Reduce Join的結(jié)果進(jìn)行Union合并#開啟運(yùn)行過(guò)程中skewjoinset hive.optimize.skewjoin=true;#如果這個(gè)key的出現(xiàn)的次數(shù)超過(guò)這個(gè)范圍set hive.skewjoin.key=100000;#在編譯時(shí)判斷是否會(huì)產(chǎn)生數(shù)據(jù)傾斜set hive.optimize.skewjoin.compiletime=true;set hive.optimize.union.remove=true;#如果Hive的底層走的是MapReduce,必須開啟這個(gè)屬性,才能實(shí)現(xiàn)不合并set mapreduce.input.fileinputformat.input.dir.recursive=true;

Apache Hive--通用調(diào)優(yōu)--MR程序task個(gè)數(shù)調(diào)整

maptask個(gè)數(shù)

  • 如果是在MapReduce中 maptask是通過(guò)==邏輯切片==機(jī)制決定的。
  • 但是在hive中,影響的因素很多。比如邏輯切片機(jī)制,文件是否壓縮、壓縮之后是否支持切割。
  • 因此在==Hive中,調(diào)整MapTask的個(gè)數(shù),直接去HDFS調(diào)整文件的大小和個(gè)數(shù),效率較高==。

合并的大小最好=block size

如果大文件多,就調(diào)整blocl size

reducetask個(gè)數(shù)

  • 如果在MapReduce中,通過(guò)代碼可以直接指定 job.setNumReduceTasks(N)
  • 在Hive中,reducetask個(gè)數(shù)受以下幾個(gè)條件控制的

hive.exec.reducers.bytes.per.reducer=256000000
每個(gè)任務(wù)最大的 reduce 數(shù),默認(rèn)為 1009
hive.exec.reducsers.max=1009
mapreduce.job.reduces
該值默認(rèn)為-1,由 hive 自己根據(jù)任務(wù)情況進(jìn)行判斷。

--如果用戶用戶不設(shè)置 hive將會(huì)根據(jù)數(shù)據(jù)量或者sql需求自己評(píng)估reducetask個(gè)數(shù)。
--用戶可以自己通過(guò)參數(shù)設(shè)置reducetask的個(gè)數(shù)
set mapreduce.job.reduces = N
--用戶設(shè)置的不一定生效,如果用戶設(shè)置的和sql執(zhí)行邏輯有沖突,比如order by,在sql編譯期間,hive又會(huì)將reducetask設(shè)置為合理的個(gè)數(shù)。

Number of reduce tasks determined at compile time: 1

通用優(yōu)化-執(zhí)行計(jì)劃

通過(guò)執(zhí)行計(jì)劃可以看出==hive接下來(lái)是如何打算執(zhí)行這條sql的==。

語(yǔ)法格式:explain + sql語(yǔ)句

通用優(yōu)化-并行機(jī)制,推測(cè)執(zhí)行機(jī)制

并行執(zhí)行機(jī)制

  • 如果hivesql的底層某些stage階段可以并行執(zhí)行,就可以提高執(zhí)行效率。
  • 前提是==stage之間沒有依賴== 并行的弊端是瞬時(shí)服務(wù)器壓力變大。

參數(shù)

set hive.exec.parallel=true; --是否并行執(zhí)行作業(yè)。適用于可以并行運(yùn)行的 MapReduce 作業(yè),例如在多次插入期間移動(dòng)文件以插入目標(biāo)set hive.exec.parallel.thread.number=16; --最多可以并行執(zhí)行多少個(gè)作業(yè)。默認(rèn)為8。

Hive的嚴(yán)格模式

  • 注意。不要和動(dòng)態(tài)分區(qū)的嚴(yán)格模式搞混淆。
  • 這里的嚴(yán)格模式指的是開啟之后 ==hive會(huì)禁止一些用戶都影響不到的錯(cuò)誤包括效率低下的操作==,不允許運(yùn)行一些有風(fēng)險(xiǎn)的查詢。

設(shè)置

set hive.mapred.mode = strict --默認(rèn)是嚴(yán)格模式  nonstrict

解釋

1、如果是分區(qū)表,沒有where進(jìn)行分區(qū)裁剪 禁止執(zhí)行

2、order by語(yǔ)句必須+limit限制

推測(cè)執(zhí)行機(jī)制 ==建議關(guān)閉==。

  • MapReduce中task的一個(gè)機(jī)制。
  • 功能:

一個(gè)job底層可能有多個(gè)task執(zhí)行,如果某些拖后腿的task執(zhí)行慢,可能會(huì)導(dǎo)致最終job失敗。

所謂的==推測(cè)執(zhí)行機(jī)制就是通過(guò)算法找出拖后腿的task,為其啟動(dòng)備份的task==。

兩個(gè)task同時(shí)處理一份數(shù)據(jù),誰(shuí)先處理完,誰(shuí)的結(jié)果作為最終結(jié)果。

  • 推測(cè)執(zhí)行機(jī)制默認(rèn)是開啟的,但是在企業(yè)生產(chǎn)環(huán)境中==建議關(guān)閉==。

以上就是Apache Hive 通用調(diào)優(yōu)featch抓取機(jī)制 mr本地模式的詳細(xì)內(nèi)容,更多關(guān)于Apache Hive 通用調(diào)優(yōu)的資料請(qǐng)關(guān)注其它相關(guān)文章!

標(biāo)簽: Linux Apache
主站蜘蛛池模板: 欧美 亚洲 在线 | 亚洲ay | 亚洲精品大片 | 国产亚洲视频在线播放大全 | 久久久久亚洲国产 | 99在线视频免费 | 国产精品视频免费观看调教网 | 亚洲 欧美 日韩中文字幕一区二区 | 亚洲精品国产一区二区三区在 | 欧美激情精品久久久久久久久久 | 精品国产呦系列在线看 | 在线观看免费精品国产 | 国产精品久久久久久久久久一区 | 久久久久久免费精品视频 | 日本色中色 | 成人亚洲精品777777 | 成人爽a毛片在线视频 | 欧美亚洲国产精品久久久 | 农村寡妇一级毛片免费看视频 | 国产精品欧美亚洲 | 欧美日韩在线观看视频 | 国产综合精品久久亚洲 | 国产精品久久久久毛片真精品 | 国内精自线一二区 | 韩国在线精品福利视频在线观看 | 在线综合亚洲欧美自拍 | 欧美日韩精品高清一区二区 | 美女动作一级毛片 | 国产高清视频免费 | 中文字幕成人网 | 亚洲高清免费 | 国产精品嘿咻嘿咻在线播放 | 精品国产香蕉伊思人在线 | 中国黄色一级毛片 | 欧美激情久久久久久久大片 | 国产精品露脸脏话对白 | 国产精品国产国产aⅴ | 国产欧美综合精品一区二区 | 草草影院私人免费入口 | 一区二区日韩 | 好吊妞国产欧美日韩视频 |