当前位置:首页 > 开发 > 开源软件 > 正文

【Flume二】HDFS sink细说

发表于: 2015-02-15   作者:bit1129   来源:转载   浏览:
摘要: 1. Flume配置   a1.sources=r1 a1.channels=c1 a1.sinks=k1 ###Flume负责启动44444端口 a1.sources.r1.type=avro a1.sources.r1.bind=0.0.0.0 a1.sources.r1.port=44444 a1.sources.r1.chan

1. Flume配置

 

a1.sources=r1  
a1.channels=c1  
a1.sinks=k1  

###Flume负责启动44444端口
  
a1.sources.r1.type=avro  
a1.sources.r1.bind=0.0.0.0  
a1.sources.r1.port=44444  
a1.sources.r1.channels=c1  
  
a1.channels.c1.type=memory  
a1.channels.c1.capacity=10000  
a1.channels.c1.transactionCapacity=1000  
a1.channels.c1.keep-alive=30  
  
a1.sinks.k1.type=hdfs  
a1.sinks.k1.channel=c1  
a1.sinks.k1.hdfs.path=hdfs://hadoop.master:9000/user/hadoop/flume
a1.sinks.k1.hdfs.fileType=DataStream  
a1.sinks.k1.hdfs.writeFormat=Text  
a1.sinks.k1.hdfs.rollInterval=0  
a1.sinks.k1.hdfs.rollSize=10240  
a1.sinks.k1.hdfs.rollCount=0  
a1.sinks.k1.hdfs.idleTimeout=60

 

此处,Flume开启了44444端口,用于接受avro event,

 

将 sink的type由logger变为hdfs,然后指定输出path, 默认是输出到HDFS后为sequencefile,里面的内容无法直接打开浏览,为了便于直观看到我们输出的日志信息,所以我这里将fileType为 DataStream, writeFormat=Text,这样就可以直接打开生成的文件进行查看了。

下面几个roll开头的参数都是用来控制滚动日志输出的,官方文档上的说明也很详细,我这里配置的只按文件大小来滚动rollSize=10240,也就 是10K滚动生成一个新的文件用来接收新的EVENTS。实际中这个Size应该更大一些,我觉得设置成HDFS的blocksize大小应该挺合适的。

idleTimeout设置为60秒(默认值为0),这里面的原理是这样的,flume里面每生成一个接收文件时的命名规则 如:FlumeData.1406251462179.tmp,.tmp表示这个文件正在被使用来接收EVENTS,当满10K之后,这个文件会被 rename成FlumeData.1406251462179,把.tmp后缀去掉,但是如果你停止了应用程序 后,FlumeData.1406251462179.tmp还没满10K,按照默认的idleTimeout设置,不会将它rename,也就 是.tmp后缀一直在,造成了这个文件一直在使用当中的一个假象,这是有问题的,我们设置idleTimeout=60,即60秒后这个文件还没有被写入 数据,就会关闭它然后rename它去掉.tmp,以后新进来的events,会新开一个.tmp文件来接收。

我们再运行第一篇文章中的那个示例应用程序,然后去path指定的目录下面就能看到log4j输出的日志信息了。

 

注意点:

首先在hdfs上创建/flume目录:hadoop fs -mkdir /flume
给该目录授权给flume用户和组:hadoop fs -chown -R flume:flume /flume
注意给目录授权很重要,不然会报错。

 

 

Flume启动44444端口,监听来自于44444端口的网络输出,那么如何往44444写入数据呢?目前有三种做法:

1. 实验目的,可以是用telnet localhost 44444,然后写入数据

2. 使用Flume提供的avro-client,写入一个文件到44444

3. 使用Flume结合log4j,log4j的日志打到两个位置:一个是本地日志文件,一个是使用FlumeAppender,将日志发送到指定的端口,如下配置:

log4j.properties配置:

log4j.rootLogger=INFO
log4j.category.com.besttone=INFO,flume
log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = localhost
log4j.appender.flume.Port = 44444

log4j.appender.flume.UnsafeMode = tr

 

 

 

参考:

http://blog.niubua.com/flume%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9Alog4j%E7%9B%B4%E6%8E%A5%E8%BE%93%E5%87%BA%E6%97%A5%E5%BF%97%E5%88%B0flume/

http://blog.niubua.com/flume%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%B8%89%EF%BC%89%EF%BC%9Aflume%E5%B0%86log4j%E6%97%A5%E5%BF%97%E6%95%B0%E6%8D%AE%E5%86%99%E5%85%A5%E5%88%B0hdfs/

【Flume二】HDFS sink细说

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
HDFS Sink介绍 Flume导入数据HDFS,目前只支持创建序列化(sequence)文件和文本(text)文件。还支
In order to flow the data across multiple agents or hops, the sink of the previous agent and
本文另一地址请见 HDFS的Rebalance功能 HDFS中的数据按照一定策略分布在集群中的多个数据节点上,但
1. Web server 集群数据采集采用的架构 2. 在每台web server上启动一个flume agent ( Flume1.3.1 :
在 细说中间人攻击(一)介绍了比较常见的中间人攻击做法,即用wireshark抓取数据包, 用ettercap来
在细说中间人攻击(一)介绍了比较常见的中间人攻击做法,即用wireshark抓取数据包, 用ettercap来
实现功能. 这部分让自己学到了很多技术上的东西,尤其是程序与数据库交互出现的问题,因为代码基本上
实现功能. 这部分让自己学到了很多技术上的东西,尤其是程序与数据库交互出现的问题,因为代码基本上
大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式。 一个文件一旦创建、写入、关闭之后
HDFS优点 高容错性 数据自动保存多个副本 副本丢失后,自动恢复 适合批处理 移动计算而非数据 数据
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号