中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Hive查詢HBase調(diào)用MapReduce性能優(yōu)化

2019-02-26    來源:多智時(shí)代

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

折騰了很久,被領(lǐng)導(dǎo)天天督促&指點(diǎn),算是有個(gè)最基本的性能優(yōu)化。

1. 背景介紹:

Hive使用hive-hbase-handler建立HBase external table。在hive查詢包含count(*)、join、以及Predicate Pushdown等操作時(shí),會(huì)調(diào)用MapReduce進(jìn)行處理。本文旨在查詢性能方面的優(yōu)化,算是對(duì)工作中的一點(diǎn)記錄。

優(yōu)化主要分為兩個(gè)方面:

  1. HBase預(yù)分區(qū)以及hive–hbase-storage-handler的實(shí)現(xiàn)。

  2. HBase參數(shù)調(diào)優(yōu)。

2. 一些基本知識(shí):

  1. 對(duì)Map過程的基本理解:Map是將原始數(shù)據(jù)拆分成split,根據(jù)split啟動(dòng)Mapper。

  2. Hadoop有兩套API,一套是org.apache.hadoop.mapred,一套是org.apache.hadoop.mapreduce。前者是舊API,特點(diǎn)是底層基本類是接口,實(shí)現(xiàn)類需implements interface,而后者是新API,底層基本類是抽象類,實(shí)現(xiàn)類需extends abstractClass。

  3. hive的hive-storage-handler,使用的是舊mapred API。在handler中,需指定實(shí)現(xiàn)org.apache.hadoop.mapred.InputFormat 接口。

3. org.apache.hadoop.mapred.InputFormat詳解

簡(jiǎn)單來說,InputFormat 主要用于描述輸入數(shù)據(jù)的格式,提供了以下兩個(gè)功能:

  1. 數(shù)據(jù)切分,按照某個(gè)策略將輸入數(shù)據(jù)且分成若干個(gè) split,以便確定 Map Task 的個(gè)數(shù)即 Mapper 的個(gè)數(shù),在 MapReduce 框架中,一個(gè) split 就意味著需要一個(gè) Map Task;

  2. 為 Mapper 提供輸入數(shù)據(jù),即給定一個(gè) split(使用其中的 RecordReader 對(duì)象)將之解析為一個(gè)個(gè)的 key/value 鍵值對(duì)。

該類接口定義如下:

publicinterfaceInputFormat{publicInputSplit[]getSplits(JobConfjob,intnumSplits)throwsIOException; publicRecordReadergetRecordReader(InputSplitsplit,JobConfjob,Reporterreporter)throwsIOException; }

其中,getSplit() 方法主要用于切分?jǐn)?shù)據(jù),每一份數(shù)據(jù)由,split 只是在邏輯上對(duì)數(shù)據(jù)分片,并不會(huì)在磁盤上將數(shù)據(jù)切分成 split 物理分片,實(shí)際上數(shù)據(jù)在 HDFS 上還是以 block 為基本單位來存儲(chǔ)數(shù)據(jù)的。InputSplit 只記錄了 Mapper 要處理的數(shù)據(jù)的元數(shù)據(jù)信息,如起始位置、長(zhǎng)度和所在的節(jié)點(diǎn)。

4. HBase預(yù)分區(qū)

在HBase Java API中,創(chuàng)建HBase table是可以指定TableDescriptor的。該TableDescriptor類似于一種預(yù)分區(qū)策略。默認(rèn)地,如果沒有指定TableDescriptor來創(chuàng)建一張表時(shí),只有一個(gè)region,正處于混沌時(shí)期,start-end key無邊界,可謂海納百川。什么樣的rowKey都可以接受,然而,當(dāng)數(shù)據(jù)越來越多,region的size越來越大時(shí),大到一定的閥值,hbase認(rèn)為再往這個(gè)region里塞數(shù)據(jù)已經(jīng)不合適了,就會(huì)找到一個(gè)midKey將region一分為二,成為2個(gè)region,這個(gè)過程稱為分裂(region-split).而midKey則為這二個(gè)region的臨界,左為N無下界,右為M無上界。< midKey則為陰被塞到N區(qū),> midKey則會(huì)被塞到M區(qū)。

TableDescriptor是一個(gè)byte[][]數(shù)組,其中每一個(gè)byte[]相當(dāng)于split key,如指定了63個(gè)split key,就會(huì)分成64個(gè)分區(qū)。預(yù)分區(qū)是不會(huì)被HBase Compact所合并的。

由于HBase是字典排序,所以如果要將表數(shù)據(jù)分散到預(yù)分區(qū)中,需要在rowkey指定一個(gè)prefix并保證盡量分散。常見的散列設(shè)計(jì)如hash或mod都是可以的。

5. 基于預(yù)分區(qū)的并發(fā)mapper設(shè)計(jì)

在HBase中,不同的RegionServer管理著不同的Region,我們希望能并發(fā)scan所有的region以達(dá)到并行化。由于mapper本身是并行的,所以只需在split上做文章,也就是改寫getSplits方法。具體做法是:

  1. 實(shí)現(xiàn)InputSplit接口,編寫一個(gè)Split對(duì)象類,在默認(rèn)hive-hbase-handler中已有實(shí)現(xiàn)。

  2. 拿到table的region list。

  3. 遍歷list,獲取每一個(gè)region的startKey和endKey。

  4. 將二者寫入繼承的Split對(duì)象類。有多少region就有多少split,并且在Split對(duì)象類的readFields()方法中根據(jù)startKey和endKey讀取,write方法類似。

這樣recordReader就會(huì)讀取設(shè)置的每一個(gè)split。具體代碼不做贅述,只提供思路。

6. 參數(shù)調(diào)優(yōu)

由于hive查詢hbase的handler,底層依舊是用HBase的scan實(shí)現(xiàn)的,所以可以對(duì)HBase client端進(jìn)行參數(shù)調(diào)優(yōu)。比較有用的如:

hbase.scan.cache,可以在集群管理中配置,也可以由client端的scan自行設(shè)置:scan.setCaching(),默認(rèn)是1,設(shè)置大些可為一次scan拿回更多數(shù)據(jù),減少網(wǎng)絡(luò)I/O。

另有server段參數(shù)如:

hbase.ipc.server.read.threadpool.size。默認(rèn)值 10,Reader 網(wǎng)絡(luò) IO 個(gè)數(shù),reader 的個(gè)數(shù)決定了從網(wǎng)絡(luò) io 里讀取數(shù)據(jù)的速度也就是網(wǎng)絡(luò)I/O。

同樣也可以設(shè)置server端cache大。ū砑(jí)別),減少磁盤I/O。

經(jīng)測(cè)試,實(shí)現(xiàn)上述優(yōu)化,在我所能訪問到的集群里,count 一千萬數(shù)據(jù),能夠從最初的5分鐘降至最低48秒。

作者:orisonchan

鏈接:https://www.jianshu.com/p/cbcc20342ce0

在不久的將來,云計(jì)算一定會(huì)徹底走入我們的生活,有興趣入行未來前沿產(chǎn)業(yè)的朋友,可以收藏云計(jì)算,及時(shí)獲取人工智能、大數(shù)據(jù)、云計(jì)算和物聯(lián)網(wǎng)的前沿資訊和基礎(chǔ)知識(shí),讓我們一起攜手,引領(lǐng)人工智能的未來!

標(biāo)簽: 大數(shù)據(jù) 代碼 網(wǎng)絡(luò) 云計(jì)算

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:云計(jì)算性能操作測(cè)試靠譜嗎?

下一篇:互聯(lián)網(wǎng)趨勢(shì)下如何鑒別云計(jì)算與信息化