最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

亂用Hive調(diào)優(yōu),你的任務(wù)越調(diào)優(yōu)越慢

2022-06-21 17:03 作者:滌生大數(shù)據(jù)  | 我要投稿

有個小伙伴給我發(fā)了段代碼,其中一個job是一個子查詢很簡單,數(shù)據(jù)也不是很大,大概也就3億,100多個字段,跑3小時一直沒跑出來,任務(wù)沒有報錯,進(jìn)度一直正常;嘗試了各種方法,參數(shù)優(yōu)化,udf重構(gòu)等。

? ? ? 部分脫敏后代碼如下:

? ? ?運行截圖如下:

? ? ? ? 后來我讓他發(fā)我看下完整代碼以及參數(shù)配置;發(fā)現(xiàn)其中有個參數(shù)開啟了向量化(矢量化),一般來說開啟了矢量化,本來是為了一片好心提高計算效率的。但但是很多函數(shù)是不支持的矢量化的,造成數(shù)據(jù)量很大的時候就會幫倒忙。

??詢問為啥加這個參數(shù),說是公眾號看的調(diào)優(yōu)參數(shù)哈,噗。一個任務(wù)腳本配置了20多個參數(shù).....總之,牛逼。

讓我們看下官網(wǎng),為啥會有這個問題?

? ? ? ?矢量化查詢執(zhí)行是 Hive 的一項功能,可大大降低典型查詢操作(如掃描、過濾器、聚合和連接)的 CPU 使用率。標(biāo)準(zhǔn)查詢執(zhí)行系統(tǒng)一次處理一行。這涉及執(zhí)行內(nèi)部循環(huán)中的長代碼路徑和重要的元數(shù)據(jù)解釋。矢量化查詢執(zhí)行通過一次處理 1024 行的塊來簡化操作。在塊內(nèi),每一列都存儲為一個向量(原始數(shù)據(jù)類型的數(shù)組)。算術(shù)和比較等簡單操作是通過在緊密循環(huán)中快速迭代向量來完成的,循環(huán)內(nèi)沒有或很少有函數(shù)調(diào)用或條件分支。這些循環(huán)以簡化的方式編譯,使用相對較少的指令,平均而言,在更少的時鐘周期內(nèi)完成每條指令,通過有效地使用處理器流水線和高速緩存存儲器。

1.為啥向量化可以提高效率?

? ? ???簡單來說就是傳統(tǒng)hive的計算是一次處理一行數(shù)據(jù),矢量化開啟一次處理1024行數(shù)據(jù),看上去確實可以提高速度。傳統(tǒng)方式這些運算符設(shè)計為一次處理一行。一次處理一行的操作員效率不高,因為需要許多虛函數(shù)調(diào)用來處理掃描的每一行。此外,當(dāng)Operator一次處理一行時,無法利用支持 SIMD 指令集(如 SSE 或 AVX)的現(xiàn)代 CPU 架構(gòu)。

? ? ? ? Hive的矢量化是一次處理一批次行,而不是一次處理一行。與基于行的執(zhí)行相比,向量化執(zhí)行避免了大量的虛函數(shù)調(diào)用,從而提高了指令和數(shù)據(jù)緩存的命中率,它們一起處理一批行,而不是一次處理一行。與基于行的執(zhí)行相比,向量化執(zhí)行避免了大量的虛函數(shù)調(diào)用,從而提高了指令和數(shù)據(jù)緩存的命中率

? ? ? ?但是矢量化的使用是有限制的,不是對所有的語法都是支持,使用不當(dāng)會適得其反,這也就是為啥矢量化默認(rèn)是關(guān)閉的,需要手動開啟。就是為了防止大家不懂的亂用。

? ? ? ?看官網(wǎng)矢量化支持的表達(dá)式與類型

??? ?很明顯我們前面小伙伴使用的split函數(shù)并不在此列,所以使用split開啟矢量化時反而批處理適得其反。取消矢量化參數(shù)后,程序10多分鐘就跑完了。? ??

? ? ?而且矢量化的使用apache版本的hive的表存儲要是orc格式文件存儲。cdh集群6.x支持parquet格式的使用,這塊cdh做了二開,性能相比傳統(tǒng)提升了大概30%左右。

2. 關(guān)于組件調(diào)優(yōu)幾點看法

??? 大數(shù)據(jù)開發(fā)面臨的代碼調(diào)優(yōu)一般就分為兩類,代碼調(diào)優(yōu)+參數(shù)調(diào)優(yōu)。

代碼調(diào)優(yōu)我這里先不說。說一下大家常關(guān)注的參數(shù)調(diào)優(yōu)。參數(shù)調(diào)優(yōu)又分為集群層面參數(shù)調(diào)優(yōu)和用戶層面參數(shù)調(diào)優(yōu)。我們大部分大數(shù)據(jù)開發(fā)(數(shù)倉開發(fā))小伙伴在企業(yè)里需要參數(shù)調(diào)優(yōu)的都是用戶角度參數(shù)調(diào)優(yōu);

? ? 因為集群層面的參數(shù)調(diào)優(yōu)一般是大數(shù)據(jù)運維,在建設(shè)集群與維護集群時就已經(jīng)配置好了比如下:

? ? ? ?這些大家在公眾號網(wǎng)上看到的參數(shù)都是集群層面優(yōu)化好的,一般來說大數(shù)據(jù)運維會結(jié)合公司的業(yè)務(wù)進(jìn)行調(diào)優(yōu)適配的,很多參數(shù)是不需要大家去調(diào)優(yōu)的,而且很多參數(shù)是默認(rèn)自動優(yōu)化的等等。

? ? ? ? ?大家在企業(yè)日常運行代碼時,如果你們集群運維做的好,甚至不需要加什么參數(shù)(我個人運維集群架構(gòu)這塊最討厭小白算法分析師不懂瞎搞搜一堆亂七八糟的參數(shù)調(diào)優(yōu)進(jìn)去,然后代碼越跑越慢),更多的是從代碼層面進(jìn)行優(yōu)化,而不是寫一堆堆參數(shù)放上去。代碼層面的優(yōu)化,邏輯的設(shè)計,優(yōu)質(zhì)的代碼才是根本上避免問題的出現(xiàn)。

? ? ? ?參數(shù)調(diào)優(yōu)更多的是應(yīng)對一些生產(chǎn)上特殊場景特殊情況的使用,而不是常規(guī)化使用;

? ? ? ?大家學(xué)習(xí)東西要沉下心去研讀官網(wǎng),權(quán)威書籍,這個進(jìn)步是明顯的。而不是讀一些人云亦云的轉(zhuǎn)來轉(zhuǎn)去的文章。客觀來說,國內(nèi)大數(shù)據(jù)類的公眾號質(zhì)量是真的很差,基本都是一些千禧年00后運營的,有些甚至還沒畢業(yè)工作。主要是真的大佬都在忙著悶聲發(fā)大財,低調(diào)向上,務(wù)實不務(wù)虛。???

? ? ? ? ?吐槽一句,多用google,質(zhì)量跟百度檢索出來的真有很大差別。


亂用Hive調(diào)優(yōu),你的任務(wù)越調(diào)優(yōu)越慢的評論 (共 條)

分享到微博請遵守國家法律
邹平县| 博罗县| 邻水| 永善县| 镶黄旗| 卢湾区| 全南县| 佳木斯市| 木里| 五台县| 玛沁县| 青神县| 大化| 志丹县| 方正县| 青河县| 谢通门县| 买车| 德保县| 睢宁县| 策勒县| 宾阳县| 牡丹江市| 漳浦县| 镇坪县| 白水县| 永靖县| 定陶县| 长沙市| 镇宁| 临沭县| 阿拉尔市| 河北区| 靖安县| 松江区| 瓮安县| 青岛市| 洪雅县| 始兴县| 日喀则市| 沙洋县|