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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

调一调Hive on Spark参数,毫不夸张的说,使其性能达到最大化!

發(fā)布時(shí)間:2024/2/28 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 调一调Hive on Spark参数,毫不夸张的说,使其性能达到最大化! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

?

Hive on Spark是指使用Spark替代傳統(tǒng)MapReduce作為Hive的執(zhí)行引擎,在HIVE-7292提出。Hive on Spark的效率比on MR要高不少,但是也需要合理調(diào)整參數(shù)才能最大化性能,本文簡單列舉一些調(diào)優(yōu)項(xiàng)。為了符合實(shí)際情況,Spark也采用on YARN部署方式來說明。

Driver參數(shù)

spark.driver.cores

該參數(shù)表示每個(gè)Executor可利用的CPU核心數(shù)。其值不宜設(shè)定過大,因?yàn)镠ive的底層以HDFS存儲(chǔ),而HDFS有時(shí)對(duì)高并發(fā)寫入處理不太好,容易造成race condition。根據(jù)我們的實(shí)踐,設(shè)定在3~6之間比較合理。

假設(shè)我們使用的服務(wù)器單節(jié)點(diǎn)有32個(gè)CPU核心可供使用。考慮到系統(tǒng)基礎(chǔ)服務(wù)和HDFS等組件的余量,一般會(huì)將YARN NodeManager的yarn.nodemanager.resource.cpu-vcores參數(shù)設(shè)為28,也就是YARN能夠利用其中的28核,此時(shí)將spark.executor.cores設(shè)為4最合適,最多可以正好分配給7個(gè)Executor而不造成浪費(fèi)。又假設(shè)yarn.nodemanager.resource.cpu-vcores為26,那么將spark.executor.cores設(shè)為5最合適,只會(huì)剩余1個(gè)核。

由于一個(gè)Executor需要一個(gè)YARN Container來運(yùn)行,所以還需保證spark.executor.cores的值不能大于單個(gè)Container能申請(qǐng)到的最大核心數(shù),即yarn.scheduler.maximum-allocation-vcores的值。

?

spark.executor.memory/spark.yarn.executor.memoryOverhead

這兩個(gè)參數(shù)分別表示每個(gè)Executor可利用的堆內(nèi)內(nèi)存量和堆外內(nèi)存量。堆內(nèi)內(nèi)存越大,Executor就能緩存更多的數(shù)據(jù),在做諸如map join之類的操作時(shí)就會(huì)更快,但同時(shí)也會(huì)使得GC變得更麻煩。Hive官方提供了一個(gè)計(jì)算Executor總內(nèi)存量的經(jīng)驗(yàn)公式,如下:

yarn.nodemanager.resource.memory-mb * (spark.executor.cores / yarn.nodemanager.resource.cpu-vcores)

其實(shí)就是按核心數(shù)的比例分配。在計(jì)算出來的總內(nèi)存量中,80%~85%劃分給堆內(nèi)內(nèi)存,剩余的劃分給堆外內(nèi)存。

?

假設(shè)集群中單節(jié)點(diǎn)有128G物理內(nèi)存,yarn.nodemanager.resource.memory-mb(即單個(gè)NodeManager能夠利用的主機(jī)內(nèi)存量)設(shè)為120G,那么總內(nèi)存量就是:120 * 1024 * (4 / 28) ≈ 17554MB。再按8:2比例劃分的話,最終spark.executor.memory設(shè)為約13166MB,spark.yarn.executor.memoryOverhead設(shè)為約4389MB。

?

與上一節(jié)同理,這兩個(gè)內(nèi)存參數(shù)相加的總量也不能超過單個(gè)Container最多能申請(qǐng)到的內(nèi)存量,即yarn.scheduler.maximum-allocation-mb。

?

spark.executor.instances

該參數(shù)表示執(zhí)行查詢時(shí)一共啟動(dòng)多少個(gè)Executor實(shí)例,這取決于每個(gè)節(jié)點(diǎn)的資源分配情況以及集群的節(jié)點(diǎn)數(shù)。若我們一共有10臺(tái)32C/128G的節(jié)點(diǎn),并按照上述配置(即每個(gè)節(jié)點(diǎn)承載7個(gè)Executor),那么理論上講我們可以將spark.executor.instances設(shè)為70,以使集群資源最大化利用。但是實(shí)際上一般都會(huì)適當(dāng)設(shè)小一些(推薦是理論值的一半左右),因?yàn)镈river也要占用資源,并且一個(gè)YARN集群往往還要承載除了Hive on Spark之外的其他業(yè)務(wù)。

?

spark.dynamicAllocation.enabled

上面所說的固定分配Executor數(shù)量的方式可能不太靈活,尤其是在Hive集群面向很多用戶提供分析服務(wù)的情況下。所以更推薦將spark.dynamicAllocation.enabled參數(shù)設(shè)為true,以啟用Executor動(dòng)態(tài)分配。

?

Driver參數(shù)

spark.driver.cores

該參數(shù)表示每個(gè)Driver可利用的CPU核心數(shù)。絕大多數(shù)情況下設(shè)為1都?jí)蛴谩?/p>

spark.driver.memory/spark.driver.memoryOverhead

這兩個(gè)參數(shù)分別表示每個(gè)Driver可利用的堆內(nèi)內(nèi)存量和堆外內(nèi)存量。根據(jù)資源富余程度和作業(yè)的大小,一般是將總量控制在512MB~4GB之間,并且沿用Executor內(nèi)存的“二八分配方式”。例如,spark.driver.memory可以設(shè)為約819MB,spark.driver.memoryOverhead設(shè)為約205MB,加起來正好1G。

?

Hive參數(shù)

絕大部分Hive參數(shù)的含義和調(diào)優(yōu)方法都與on MR時(shí)相同,但仍有兩個(gè)需要注意。

?

hive.auto.convert.join.noconditionaltask.size

我們知道,當(dāng)Hive中做join操作的表有一方是小表時(shí),如果hive.auto.convert.join和hive.auto.convert.join.noconditionaltask開關(guān)都為true(默認(rèn)即如此),就會(huì)自動(dòng)轉(zhuǎn)換成比較高效的map-side join。而hive.auto.convert.join.noconditionaltask.size這個(gè)參數(shù)就是map join轉(zhuǎn)化的閾值,在Hive on MR下默認(rèn)為10MB。

?

但是Hive on MR下統(tǒng)計(jì)表的大小時(shí),使用的是數(shù)據(jù)在磁盤上存儲(chǔ)的近似大小,而Hive on Spark下則改用在內(nèi)存中存儲(chǔ)的近似大小。由于HDFS上的數(shù)據(jù)很有可能被壓縮或序列化,使得大小減小,所以由MR遷移到Spark時(shí)要適當(dāng)調(diào)高這個(gè)參數(shù),以保證map join正常轉(zhuǎn)換。一般會(huì)設(shè)為100~200MB左右,如果內(nèi)存充裕,可以更大點(diǎn)。

?

hive.merge.sparkfiles

小文件是HDFS的天敵,所以Hive原生提供了合并小文件的選項(xiàng),在on ?MR時(shí)是hive.merge.mapredfiles,但是on Spark時(shí)會(huì)改成hive.merge.sparkfiles,注意要把這個(gè)參數(shù)設(shè)為true。至于小文件合并的閾值參數(shù),即hive.merge.smallfiles.avgsize與hive.merge.size.per.task都沒有變化。

總結(jié)

以上是生活随笔為你收集整理的调一调Hive on Spark参数,毫不夸张的说,使其性能达到最大化!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。