【问题标题】:Loading csv data into hbase table in multiple columns using flume使用flume将csv数据加载到多列的hbase表中
【发布时间】:2014-11-16 13:21:24
【问题描述】:

假脱机目录 CSV 文件格式:sample.csv

8600000US00601,00601,006015-DigitZCTA,0063-DigitZCTA,11102
8600000US00602,00602,006025-DigitZCTA,0063-DigitZCTA,12869
8600000US00603,00603,006035-DigitZCTA,0063-DigitZCTA,12423
8600000US00604,00604,006045-DigitZCTA,0063-DigitZCTA,33548
8600000US00606,00606,006065-DigitZCTA,0063-DigitZCTA,10603

我的 Flume.Conf 代码:

agent.sources  = spool
agent.channels = fileChannel2
agent.sinks    = sink2

agent.sources.spool.type = spooldir
agent.sources.spool.spoolDir = /home/cloudera/cloudera
agent.sources.spool.fileSuffix = .completed
agent.sources.spool.channels = fileChannel2
#agent.sources.spool.deletePolicy = immediate

agent.sinks.sink2.type = org.apache.flume.sink.hbase.HBaseSink
agent.sinks.sink2.channel = fileChannel2
agent.sinks.sink2.table = sample
agent.sinks.sink2.columnFamily = s1
agent.sinks.sink2.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer
agent.sinks.sink1.serializer.regex = ^([^,]+),([^,]+),([^,]+),([^,]+)$
#agent.sinks.sink2.serializer.regexIgnoreCase = true
agent.sinks.sink1.serializer.colNames =col1,col2,col3,col4
agent.sinks.sink2.batchSize = 100
agent.channels.fileChannel2.type=memory

我可以使用 flume 将数据加载到单列中,但无法使用正则表达式将其加载到多列中,任何帮助,以便我可以将其加载到 hbase 中的多列中。谢谢。

【问题讨论】:

  • 你得到答案了吗?
  • 如果你有答案,请分享。谢谢。
  • 我也有同样的问题:(请分享!!!
  • agent.sinks.sink2.serializer.regex =(.+),(.+),(.+),(.+),(.+) 在正则表达式中使用它,它会有所帮助您在多列中加载 csv 数据。

标签: regex csv ubuntu-12.04 bigdata cloudera


【解决方案1】:

这样的东西对我有用:

agent.sinks.s1.type = hbase 
agent.sinks.s1.table = test
agent.sinks.s1.columnFamily = r 
agent.sinks.s1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer
agent.sinks.s1.serializer.rowKeyIndex = 0 
agent.sinks.s1.serializer.regex = ^(\\S+),(\\d+),(\\d+),(\\d)$
agent.sinks.s1.serializer.colNames = ROW_KEY,r:colA,r:colB,r:colC

如果你想指定 rowkey 而不是随机的,你可以使用:

agent.sinks.s1.serializer.rowKeyIndex = 0 
agent.sinks.s1.serializer.colNames = ROW_KEY,r:colA,r:colB,r:colC

如果您想获得更多灵活性,请点击此处链接。 http://www.rittmanmead.com/2014/05/trickle-feeding-log-data-into-hbase-using-flume/

简而言之,我认为是因为正则表达式不正确。

【讨论】:

  • 这对我来说很好:agent.sinks.sink2.serializer.regex =(.+),(.+),(.+),(.+),(.+)跨度>
【解决方案2】:

我得到了答案,在我上面的代码中有正则表达式问题。

我通过更正正则表达式代码解决了这个问题。

agent.sources  = spool
agent.channels = fileChannel2
agent.sinks    = sink2

agent.sources.spool.type = spooldir
agent.sources.spool.spoolDir = /home/cloudera/cloudera

#agent.sources.spool.type = exec
#agent.sources.spool.command = tail -F /home/cloudera/cloudera/data.csv
agent.sources.spool.fileSuffix = .completed
agent.sources.spool.channels = fileChannel2
#agent.sources.spool.deletePolicy = immediate

agent.sinks.sink2.type = org.apache.flume.sink.hbase.HBaseSink
agent.sinks.sink2.channel =fileChannel2
agent.sinks.sink2.table =sample
agent.sinks.sink2.columnFamily=s1
agent.sinks.sink2.serializer =org.apache.flume.sink.hbase.RegexHbaseEventSerializer
agent.sinks.sink2.serializer.regex =(.+),(.+),(.+),(.+),(.+)
agent.sinks.sink2.serializer.rowKeyIndex  = 0
agent.sinks.sink2.serializer.colNames =ROW_KEY,col2,col3,col4,col5
agent.sinks.sink2.serializer.regexIgnoreCase = true
agent.channels.fileChannel2.type = FILE 
agent.sinks.sink2.batchSize =100
agent.channels.fileChannel2.type=memory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多