基于HBase的工業(yè)大數(shù)據(jù)存儲實戰(zhàn)
HBase解決方案:
MySQL + OSS的設(shè)計方案有兩個問題:第一,原本屬于同一條數(shù)據(jù)的內(nèi)容由于數(shù)據(jù)本身大小的原因無法存儲到一行里面,導(dǎo)致后續(xù)查下需要訪問兩個存儲系統(tǒng);第二,由于MySQL不支持動態(tài)列的特性,所以屬于同一個面板組的數(shù)據(jù)被拆成多行存儲。
針對這兩個問題,格創(chuàng)東智的大數(shù)據(jù)團(tuán)隊進(jìn)行了分析,認(rèn)為這是 HBase 的典型場景,原因如下:
——HBase 擁有動態(tài)列的特性,支持萬億行,百萬列;
——HBase 支持多版本,所有的修改都會記錄在 HBase 中;
——HBase 2.0 引入了MOB(Medium-Sized Object)特性,支持小文件存儲。
HBase 的 MOB 特性針對文件大小在 1k~10MB 范圍的,比如圖片,短視頻,文檔等,具有低延遲,讀寫強(qiáng)一致,檢索能力強(qiáng),水平易擴(kuò)展等關(guān)鍵能力。
格創(chuàng)東智的大數(shù)據(jù)團(tuán)隊使用這三個功能重新設(shè)計上面 MySQL + OSS 方案。結(jié)合應(yīng)用場景的兩大查詢需求,將面板組 id 作為 HBase 的 Rowkey,在創(chuàng)建表的時候打開 MOB 功能,如下:
create 'glass', {NAME => 'c', IS_MOB => true, MOB_THRESHOLD => 2048}
上面我們創(chuàng)建了名為 glass 的表,IS_MOB 屬性說明列簇 c 將啟用 MOB 特性,MOB_THRESHOLD 是 MOB 文件大小的閾值,單位是字節(jié),這里的設(shè)置說明文件大于 2k 的列都當(dāng)做小文件存儲。大家可能注意到上面原始方案中采用了 OSS 對象存儲,那我們?yōu)槭裁床恢苯邮褂?OSS 存儲面板特征數(shù)據(jù)呢,如果有這個疑問,可以看看下面表的性能測試:
對比屬性對象存儲云 HBase建模能力KVKV、表格、稀疏表、SQL、全文索引、時空、時序、圖查詢查詢能力前綴查找前綴查找、過濾器、索引性能優(yōu)優(yōu),特別對小對象有更低的延遲;在復(fù)雜查詢場景下,比對象存儲有10倍以上的性能提升成本按流量,請求次數(shù)計費,托管式,在高并發(fā),高吞吐場景有更低的成本適合訪問頻率低的場景擴(kuò)展性優(yōu)優(yōu)適用對象范圍通用<10MB
String CF_DEFAULT = "c";根據(jù)上面的對比,使用 HBase MOB特性來存儲小于10MB的對象相比直接使用對象存儲有一些優(yōu)勢。
我們現(xiàn)在來看看具體的表設(shè)計,使用面板id作為列名。我們只使用了HBase 的一張表就替換了之前方面的三張表!雖然我們啟用了 MOB,但是具體插入的方法和正常使用一樣,代碼片段如下:
Put put = new Put(groupId.getBytes());
put.addColumn(CF_DEFAULT.getBytes(),glassId1.getBytes(), feature1.getBytes());
put.addColumn(CF_DEFAULT.getBytes(),glassId2.getBytes(), feature2.getBytes());
……
put.addColumn(CF_DEFAULT.getBytes(),glassIdn.getBytes(), featuren.getBytes());
table.put(put);
用戶如果需要根據(jù)面板組id獲取所有面板數(shù)據(jù),可以使用下面方法:
Get get = new Get(groupId.getBytes());
Result re=table.get(get);
這樣我們可以拿到某個組id對應(yīng)的所有面板數(shù)據(jù)。如果需要根據(jù)組id+面板id查找某個面板的具體數(shù)據(jù),看可以使用下面方法:
Get get = new Get(groupId.getBytes());
get.addColumn(CF_DEFAULT.getBytes(), glassId1.getBytes())
Result re=table.get(get);
經(jīng)過上面的改造,在2臺 HBaseWorker 節(jié)點內(nèi)存為32GB,核數(shù)為8,每個節(jié)點掛載四塊大小為 250GB 的 SSD 磁盤,并寫入100W 行,每行有1W列,讀取一行的時間在100ms-500毫秒左右。在每行有1000個face的情況下,讀取一行的時間基本在20-50毫秒左右,相比之前的10秒提升200~500倍。
從下面這張對比表,我們可以清楚的看到HBase方案的巨大優(yōu)勢。
對比屬性對象存儲MySQL+對象存儲HBase MOB讀寫強(qiáng)一致YNY查詢能力弱強(qiáng)強(qiáng)查詢響應(yīng)時間高高低運維成本低高低水平擴(kuò)展YYY
現(xiàn)在,我們已經(jīng)將面板特征數(shù)據(jù)存儲在Cloudera HBase 之中,這個只是數(shù)據(jù)應(yīng)用的第一步,如何將隱藏在這些數(shù)據(jù)背后的價值發(fā)揮出來?這就得借助于數(shù)據(jù)分析,在這個場景就需要采用機(jī)器學(xué)習(xí)的方法進(jìn)行操作。我們可以借助大數(shù)據(jù)分析工具Spark 對存儲于 HBase 之中的數(shù)據(jù)進(jìn)行分析,而且 Spark 本身支持機(jī)器學(xué)習(xí)的。最后,用戶就可以通過訪問 HBase 里面已經(jīng)挖掘好的特征數(shù)據(jù)進(jìn)行其他的應(yīng)用了。
本文作者:格創(chuàng)東智大數(shù)據(jù)工程師王子超(轉(zhuǎn)載請注明作者及來源)
最新活動更多
-
3月27日立即報名>> 【工程師系列】汽車電子技術(shù)在線大會
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
即日-5.15立即報名>>> 【在線會議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評>> 【評選】維科杯·OFweek2025中國工業(yè)自動化及數(shù)字化行業(yè)年度評選
-
5月16日立即參評>> 【評選】維科杯·OFweek 2025 傳感器行業(yè)年度評選