W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本節(jié)為你介紹了 HBase 模式案例之一:日志數(shù)據(jù)和時間序列數(shù)據(jù)
假設(shè)正在收集以下數(shù)據(jù)元素。
我們可以將它們存儲在名為 LOG_DATA 的 HBase 表中,但 rowkey 會是什么呢?從這些屬性中,rowkey 將是主機名,時間戳和日志事件的一些組合,但具體是什么?
rowkey [timestamp][hostname][log-event] 受單調(diào)遞增的行鍵/時間戳數(shù)據(jù)(Monotonically Increasing Row Keys/Timeseries Data)中描述的單調(diào)增長 rowkey 問題的影響。
通過在時間戳上執(zhí)行 mod 操作,在關(guān)于 "bucketing" 時間戳的 dist-lists 中經(jīng)常提到另一種模式。如果時間掃描很重要,這可能是一個有用的方法。必須注意 bucket 的數(shù)量,因為這需要相同數(shù)量的掃描來返回結(jié)果。
long bucket = timestamp % numBuckets;
構(gòu)造:
[bucket][timestamp][hostname][log-event]
如上所述,要選擇特定時間范圍(timerange)的數(shù)據(jù),需要為每個存儲 bucket 執(zhí)行 Scan。例如,100個存儲 bucket 將在密鑰空間中提供廣泛的分布,但它需要 100 次 Scan 才能獲得單個時間戳的數(shù)據(jù),因此存在權(quán)衡。
如果有大量的主機在整個密鑰空間中進行寫入和讀取操作,則 rowkey [hostname][log-event][timestamp] 是一個候選項。如果按主機名掃描是優(yōu)先事項,則此方法非常有用。
如果最重要的訪問路徑是拉取最近的事件,則將時間戳存儲為反向時間戳(例如,timestamp = Long.MAX_VALUE – timestamp)將創(chuàng)建能夠?qū)?[hostname][log-event] 執(zhí)行 Scan 以獲取最近捕獲的事件的屬性。
這兩種方法都不是錯的,它只取決于什么是最適合的情況。
反向掃描 API
HBASE-4811 實現(xiàn)了一個 API,它以反向掃描表格或范圍內(nèi)的表格,從而減少了對正向或反向掃描進行模式優(yōu)化的需求。此功能在 HBase 0.98 和更高版本中可用。
記住,在 HBase 的每一列上加蓋行密碼是非常重要的。如果主機名為 a,并且事件類型是 e1,那么結(jié)果 rowkey 會很小。但是,如果攝入的主機名是myserver1.mycompany.com 和事件類型是 com.package1.subpackage2.subsubpackage3.ImportantService,會怎么樣?
在 rowkey 中使用一些替換可能是有意義的。至少有兩種方法:哈希和數(shù)字。在 Rowkey Lead Position 示例中的主機名中,它可能如下所示:
帶有哈希的復合 Rowkey:
具有數(shù)值替換的復合 Rowkey:
對于這種方法,除了 LOG_DATA(稱為LOG_TYPES)之外,還需要另一個查找表。LOG_TYPES 的 rowkey 是:
此 rowkey 的列可能是一個具有指定編號的長整數(shù),可通過使用 HBase 計數(shù)器獲得。
所以得到的復合 rowkey 將是:
在 Hash 或 Numeric 替換方法中,主機名和事件類型的原始值可以存儲為列。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: