2012-09-20 32 views
0

我正在嘗試使用Flume NG將日誌文本文件收集到HBase中。日誌文件中的每一行都是JSON文本,我將它們作爲值插入到HBase表中。問題是我不知道如何自定義行鍵模式。例如,當我在一個表中計算行時:在Flume NG中使用HBaseSink時,我可以自定義行密鑰模式嗎?

hbase(main):001:0> count 'flume-ng-test', 100000 
Current count: 100000, row: default32e473e0-4f54-48b5-8081-c3f845b38456   
Current count: 200000, row: default65b0cc3d-5421-4bb1-87e2-b21c2841fcd6   
Current count: 300000, row: default98be85e3-bb9f-402e-8f36-0db74cb8ab44   
Current count: 400000, row: defaultcbf888dc-e2bb-492f-ab17-63f5e0327344   
Current count: 500000, row: defaultfedc40e5-04b4-49a4-8734-655f43956d6e   
502224 row(s) in 8.1540 seconds 

行鍵是default + UUID_like_string。如果我想使用當前時間戳(升序或降序)更改行鍵模式,我該怎麼辦?

感謝您的任何意見。

回答

5

在flume-ng的HBase接收器中,HbaseEventSerializer實現負責生成行密鑰。默認實現org.apache.flume.sink.hbase.SimpleHbaseEventSerializer已經支持以prefix + current timestamp的格式生成時間戳行密鑰,以便使用它只是簡單地修改您的flume配置。

hbase-agent.sinks.sink1.type = org.apache.flume.sink.hbase.HBaseSink 
hbase-agent.sinks.sink1.channel = ch1 
hbase-agent.sinks.sink1.table = demo 
hbase-agent.sinks.sink1.columnFamily = cf 
hbase-agent.sinks.sink1.serializer = org.apache.flume.sink.hbase.SimpleHbaseEventSerializer 
hbase-agent.sinks.sink1.serializer.payloadColumn = col1 
hbase-agent.sinks.sink1.serializer.keyType = timestamp 

如果提供的基於時間戳的密鑰生成方法是不是你所追求的,那麼你就需要提供一個定製HbaseEventSerializer實施水槽,它會要求你:

  1. 創建您自己的(默認值爲org.apache.flume.sink.hbase.SimpleRowKeyGenerator
  2. 創建您自己的HbaseEventSerializer接口實現(默認實現爲org.apache.flume.sink.hbase.SimpleHbaseEventSerializer),該接口將使用您在第一步中創建的自定義行密鑰生成器
  3. 修改您的flume hbase接收器配置以使用自定義HbaseEventSerializer實現。
相關問題