學習記錄5 Hadoop生態(tài)圈技術棧(三)

HiveServer2

這是一個服務端接口,可以使用遠程客戶端執(zhí)行對hive的查詢,并返回結果。

Hive的調優(yōu)策略

作為大數(shù)據(jù)領域的數(shù)據(jù)倉庫組件,在設計和開發(fā)的時候,都需要注意效率。這個時候調優(yōu)就顯得很重要了。數(shù)據(jù)傾斜、數(shù)據(jù)冗余、job或者I/O過多、MapReduce分配不合理都會導致hive的效率降低。

而如何對hive進行調優(yōu)呢?其實主要就是架構優(yōu)化,參數(shù)優(yōu)化和SQL優(yōu)化。

那我們一個一個來看吧,首先是架構優(yōu)化。

架構優(yōu)化

執(zhí)行引擎

既然是架構,那么先從核心引擎來看,hive本身呢是支持多種引擎的,MapReduce、TeZ、spark、flink。都是hive可以支持的引擎。這些在hivesite.xml中的hive.execution.engine來控制。

相對來說Tez是一個比較好的選擇,可以拆分MapReduce的過程,減少文件的儲存,提高性能。

優(yōu)化器

這點就和sql很像,在執(zhí)行計算之前,生成和優(yōu)化邏輯執(zhí)行計劃與物理執(zhí)行計劃。hive有兩種優(yōu)化器。

其一是向量優(yōu)化器,就是執(zhí)行變成一批1024行,而不是一行一行來執(zhí)行。這樣就縮短了時間,但是缺陷不明。。。并且數(shù)據(jù)儲存必須用ORC格式。

其二就是成本優(yōu)化器。。。具體不詳。。。

除了優(yōu)化器,還有的就是我們之前就知道的分區(qū)表和分桶表了,通過切割數(shù)據(jù)來降低時耗。

其實做到這一步了,基本也調優(yōu)的差不多了,在架構上如果想繼續(xù)優(yōu)化,就得改變數(shù)據(jù)的儲存格式了,畢竟這就要犧牲掉一些信息了。

文件格式里面最簡單的就是TextFile(純文本儲存格式),不過我想一般應該走不到這步吧。

最后還不行,就只能對數(shù)據(jù)進行壓縮了,減少map和reduce間的數(shù)據(jù)傳輸,從而提升性能。

參數(shù)優(yōu)化

本地模式

前面討論的都是hive處理的數(shù)據(jù)量較大時的調優(yōu),當然了,hive大多時應該都是處理大數(shù)據(jù)集的。那么當數(shù)據(jù)集小的時候,hive用分布式去處理其實是有些牛刀殺雞了,因為分布式啟動的時間甚至都比數(shù)據(jù)處理的時間要長,這個時候就需要將hive轉至本地模式(前面提到過)了。

嚴格模式

聽起來好像還挺厲害的,本質就是禁止三種有風險的語句,第一就是查詢時不限定分區(qū);第二是join時的重復;第三是order by排序后不使用limit來限制。說實話感覺效果就那樣。

SQL優(yōu)化

列裁剪和分區(qū)裁剪

簡單理解就是查詢的時候只取需要的列和分區(qū),多余的碰都不碰。將節(jié)儉進行到底

sort by 代替 order by

就是排序方法的一個替換,個人覺得加個limit就可以了,不必這么大費周章吧。

group by代替count

這個count的確得謹慎使用,不過大哥你group by也沒好到哪去吧,數(shù)據(jù)傾斜你group by比count還惡心。

明天寫個優(yōu)化的實戰(zhàn)吧,待我先看一看

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容