我正在使用Flume收集推文并将其存储在HDFS上。 收集部分工作正常,我可以在我的文件系统中找到所有推文。
现在我想在一个文件中提取所有这些推文。 问题是不同的推文存储如下:
正如我们所看到的,推文存储在128 MB的块内,但只使用了几个Ko,如果我错了,HDFS的正常行为会纠正我。
但是,如何在一个文件中获取所有不同的推文?
这是我使用以下命令运行的conf文件:
flume-ng agent -n TwitterAgent -f ./my-flume-files/twitter-stream-tvseries.conf
twitter-stream-tvseries.conf:
TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource TwitterAgent.sources.Twitter.consumerKey =隐藏 TwitterAgent.sources.Twitter.consumerSecret =隐藏 TwitterAgent.sources.Twitter.accessToken =隐藏 TwitterAgent.sources.Twitter.accessTokenSecret =隐藏 TwitterAgent.sources.Twitter.keywords = GoT,GameofThrones
TwitterAgent.sources.Twitter.keywords = GoT,GameofThrones
TwitterAgent.sinks.HDFS.channel = MemChannel TwitterAgent.sinks.HDFS.type = HDFS TwitterAgent.sinks.HDFS.hdfs.path = HDFS:// IP-addressl:8020 /用户/根/数据/叽叽喳喳/ tvseries /鸣叫 TwitterAgent.sinks.HDFS.hdfs.fileType =的数据流中 TwitterAgent.sinks.HDFS.hdfs.writeformat =文本 TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000 TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
TwitterAgent.channels.MemChannel.type =存储器 TwitterAgent.channels.MemChannel.capacity = 10000 TwitterAgent.channels.MemChannel.transactionCapacity = 1000
TwitterAgent.sources.Twitter.channels = MemChannel TwitterAgent.sinks.HDFS.channel = MemChannel
答案 0 :(得分:0)
您可以配置HDFS接收器以按时间,事件或大小生成消息。因此,如果要保存多条消息,直到达到120MB限制,请设置
hdfs.rollInterval = 0 # This is to create new file based on time
hdfs.rollSize = 125829120 # This is to create new file based on size
hdfs.rollCount = 0 # This is to create new file based on events (different tweets in your case)
答案 1 :(得分:0)
您可以使用以下命令将文件连接到单个文件中:
find . -type f -name 'FlumeData*' -exec cat {} + >> output.file
或者如果要将数据存储到Hive表中以供以后分析,请创建一个外部表并将其用于Hive DB。