flume事件头中应有时间戳,但为空

vwkv1x7d  于 2021-06-04  发布在  Flume
关注(0)|答案(3)|浏览(351)

我正在使用下面的配置详细信息使用flume将twitter提要推送到hdfs中,但是在flume事件头中得到了预期的时间戳,但是它是空的
推特.conf

TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.consumerKey = xxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.consumerSecret = xxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.accessToken =  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.accessTokenSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.keywords = bigdata, hadoop, hive, hbase
TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = /user/farooque/bigdata/tweets/%Y/%m/%d/%H/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 10
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000

TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 100

用命令运行

$ flume-ng agent --conf-file twitter.conf --name TwitterAgent

哪里 twitter.conf 是我的配置文件名
但得到的错误是:

java.lang.NullPointerException: Expected timestamp in the Flume event headers, but it was null
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:204)
        at org.apache.flume.formatter.output.BucketPath.replaceShorthand(BucketPath.java:200)
        at org.apache.flume.formatter.output.BucketPath.escapeString(BucketPath.java:396)
        at org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:388)
        at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68)
        at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:147)
        at java.lang.Thread.run(Thread.java:745)
15/06/04 18:26:01 ERROR flume.SinkRunner: Unable to deliver event. Exception follows.

寻求进一步帮助??

hfsqlsce

hfsqlsce1#

您正在使用 org.apache.flume.source.twitter.TwitterSource 这是apache提供的twitter源代码。它没有内置 timestamp 在Flume事件中。所以你有两个选择:
1) 在配置文件中使用com.cloudera.flume.source.twittersource。
2) 或者你可以加上 TwitterAgent.sinks.HDFS.hdfs.useLocalTimeStamp = true 属性。
请注意,您正面临这个问题,因为您在hdfs路径中指定了timestamp参数 /user/farooque/bigdata/tweets/%Y/%m/%d/%H/ . 如果不指定这些,那么apache和cloudera提供的源代码都可以正常工作。

um6iljoc

um6iljoc2#

使用选项“twitteragent.sinks.hdfs.hdfs.uselocaltimestamp=true”,它将使用目标(即hdfs sink)的时间戳。相反,如果您想使用实际事件的时间戳,那么我们必须使用拦截器。在配置或属性文件中使用下面的行。

TwitterAgent.sources.Twitter.interceptors = interceptor1
TwitterAgent.sources.Twitter.interceptors.interceptor1.type = timestamp
holgip5t

holgip5t3#

在twitter.conf中,又添加了一个config属性

TwitterAgent.sinks.HDFS.hdfs.useLocalTimeStamp = true

问题解决了。
有关更多详细信息,请参阅hadoop tutorial.info

相关问题