HBase模式案例:日志數(shù)據(jù)和時間序列數(shù)據(jù)

2018-03-21 15:31 更新

HBase案例:日志數(shù)據(jù)和時間序列數(shù)據(jù)

本節(jié)為你介紹了 HBase 模式案例之一:日志數(shù)據(jù)和時間序列數(shù)據(jù)

假設(shè)正在收集以下數(shù)據(jù)元素。

  • 主機名(Hostname)
  • 時間戳(timestamp)
  • 日志事件(Log event)
  • 值/消息(Value/message)

我們可以將它們存儲在名為 LOG_DATA 的 HBase 表中,但 rowkey 會是什么呢?從這些屬性中,rowkey 將是主機名,時間戳和日志事件的一些組合,但具體是什么?

行密鑰(Rowkey)主導位置中的時間戳(Timestamp)

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)主導位置中的主機(Host)

如果有大量的主機在整個密鑰空間中進行寫入和讀取操作,則 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:

  • [主機名的MD5哈希] = 16個字節(jié)([MD5 hash of hostname] = 16 bytes)
  • [事件類型的MD5哈希] = 16個字節(jié)([MD5 hash of event-type] = 16 bytes)
  • [時間戳] = 8個字節(jié)([timestamp] = 8 bytes)

具有數(shù)值替換的復合 Rowkey:

對于這種方法,除了 LOG_DATA(稱為LOG_TYPES)之外,還需要另一個查找表。LOG_TYPES 的 rowkey 是:

  • [type],(例如,指示主機名與事件類型的字節(jié))。
  • [bytes],原始主機名或事件類型的可變長度字節(jié)。

此 rowkey 的列可能是一個具有指定編號的長整數(shù),可通過使用 HBase 計數(shù)器獲得。

所以得到的復合 rowkey 將是:

  • [代替主機名長] = 8個字節(jié)([substituted long for hostname] = 8 bytes)
  • [長時間取代事件類型] = 8個字節(jié)([substituted long for event type] = 8 bytes)
  • [時間戳] = 8個字節(jié)([timestamp] = 8 bytes)

在 Hash 或 Numeric 替換方法中,主機名和事件類型的原始值可以存儲為列。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號