訂閱
糾錯
加入自媒體

基于HBase的工業大數據存儲實戰

2018-12-25 10:05
來源: 格創東智

HBase解決方案:

MySQL + OSS的設計方案有兩個問題:第一,原本屬于同一條數據的內容由于數據本身大小的原因無法存儲到一行里面,導致后續查下需要訪問兩個存儲系統;第二,由于MySQL不支持動態列的特性,所以屬于同一個面板組的數據被拆成多行存儲。

針對這兩個問題,格創東智的大數據團隊進行了分析,認為這是 HBase 的典型場景,原因如下:

——HBase 擁有動態列的特性,支持萬億行,百萬列;

——HBase 支持多版本,所有的修改都會記錄在 HBase 中;

——HBase 2.0 引入了MOB(Medium-Sized Object)特性,支持小文件存儲。

HBase 的 MOB 特性針對文件大小在 1k~10MB 范圍的,比如圖片,短視頻,文檔等,具有低延遲,讀寫強一致,檢索能力強,水平易擴展等關鍵能力。

格創東智的大數據團隊使用這三個功能重新設計上面 MySQL + OSS 方案。結合應用場景的兩大查詢需求,將面板組 id 作為 HBase 的 Rowkey,在創建表的時候打開 MOB 功能,如下:

create 'glass', {NAME => 'c', IS_MOB => true, MOB_THRESHOLD => 2048}

上面我們創建了名為 glass 的表,IS_MOB 屬性說明列簇 c 將啟用 MOB 特性,MOB_THRESHOLD 是 MOB 文件大小的閾值,單位是字節,這里的設置說明文件大于 2k 的列都當做小文件存儲。大家可能注意到上面原始方案中采用了 OSS 對象存儲,那我們為什么不直接使用 OSS 存儲面板特征數據呢,如果有這個疑問,可以看看下面表的性能測試:

對比屬性對象存儲云 HBase建模能力KVKV、表格、稀疏表、SQL、全文索引、時空、時序、圖查詢查詢能力前綴查找前綴查找、過濾器、索引性能優優,特別對小對象有更低的延遲;在復雜查詢場景下,比對象存儲有10倍以上的性能提升成本按流量,請求次數計費,托管式,在高并發,高吞吐場景有更低的成本適合訪問頻率低的場景擴展性優優適用對象范圍通用<10MB

String CF_DEFAULT = "c";根據上面的對比,使用 HBase MOB特性來存儲小于10MB的對象相比直接使用對象存儲有一些優勢。
我們現在來看看具體的表設計,使用面板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);

用戶如果需要根據面板組id獲取所有面板數據,可以使用下面方法:

Get get = new Get(groupId.getBytes());
Result re=table.get(get);

這樣我們可以拿到某個組id對應的所有面板數據。如果需要根據組id+面板id查找某個面板的具體數據,看可以使用下面方法:

Get get = new Get(groupId.getBytes());
get.addColumn(CF_DEFAULT.getBytes(), glassId1.getBytes())
Result re=table.get(get);

經過上面的改造,在2臺 HBaseWorker 節點內存為32GB,核數為8,每個節點掛載四塊大小為 250GB 的 SSD 磁盤,并寫入100W 行,每行有1W列,讀取一行的時間在100ms-500毫秒左右。在每行有1000個face的情況下,讀取一行的時間基本在20-50毫秒左右,相比之前的10秒提升200~500倍。

從下面這張對比表,我們可以清楚的看到HBase方案的巨大優勢。

對比屬性對象存儲MySQL+對象存儲HBase MOB讀寫強一致YNY查詢能力弱強強查詢響應時間高高低運維成本低高低水平擴展YYY

現在,我們已經將面板特征數據存儲在Cloudera HBase 之中,這個只是數據應用的第一步,如何將隱藏在這些數據背后的價值發揮出來?這就得借助于數據分析,在這個場景就需要采用機器學習的方法進行操作。我們可以借助大數據分析工具Spark 對存儲于 HBase 之中的數據進行分析,而且 Spark 本身支持機器學習的。最后,用戶就可以通過訪問 HBase 里面已經挖掘好的特征數據進行其他的應用了。

本文作者:格創東智大數據工程師王子超(轉載請注明作者及來源)

<上一頁  1  2  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

發表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續

暫無評論

暫無評論

    智能制造 獵頭職位 更多
    文章糾錯
    x
    *文字標題:
    *糾錯內容:
    聯系郵箱:
    *驗 證 碼:

    粵公網安備 44030502002758號