1、一个问题的引出,scp,rsync,rcp,ftp,curl,Flume浅谈- 应用场景、原理、基本架构和案例分析,职能大数据研发部/阎守臣,目 录 CONTENTS,一、Flume背景及应用场景 二、Flume NG基本架构 三、Flume安装部署 四、Flume案例分析 五、Flume总结及其他 六、Q&A,Flume是什么,由Cloudera公司开源 分布式、可靠、和高可用的海量日志采集、聚合和传输的日志收集系统 数据源可定制、可扩展 数据存储系统可定制、可扩展 中间件:屏蔽了数据源和数据存储系统的异构性,Flume特点,可靠性 保证数据不丢失 可扩展性 各组件数目可扩展 高性能 高吞吐
2、量、能满足海量数据收集需求 可管理性 可动态增加、删除组件 文档丰富、社区活跃 Hadoop生态系统应用广泛,Flume NG基本架构,Flume NG架构,Flume NG架构,Flume NG核心概念,Event Client Agent Source Channel Sink 其他组件:Interceptor、Channel Selector、Sink Processor,Event,Event是Flume数据传输的基本单元 Flume以事件的形式将数据从源头传送到最终的目的 Event由可选的header和载有数据的byte array构成 载有数据的对flume是不透明的 Heade
3、r是容纳了key-value字符串对的无序集合,key在集合内是唯一的。 Header可以在上下文路由中使用扩展,Client,Client是一个将原始log包装成events并发送它们到一个或多个agent的实体。 目的是从数据源系统中解耦Flume 在Flume的拓扑结构中不是必须的 Client实例 Flume log4j Appender 可以使用Client SDK(org.apache.flume.api)定制特定的Client,Agent,一个Agent包含Source,Channel,Sink和其他组件 它利用这些组件将events从一个节点传输到另一个节点或最终目的 Agen
4、t是flume流的基础部分 Flume为这些组件提供了配置、生命周期管理、监控支持,Agent之Source,Agent之Source,Source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个Channel。 包含event驱动和轮询两种类型 不同类型的Source: 与系统集成的Source:Syslog,Netcat 自动生成事件的Source:Exec 用于Agent和Agent之间通信的RPC Source:Avro、Thrift Source必须至少和一个channel关联,Agent之Channel与Sink,Agent之Channel,Ch
5、annel位于Source和Sink之间,用于缓存进来的event 当Sink成功的将event发送到下一跳的Channel或最终目的,event从Channel移除 不同的Channel提供的持久化水平也是不一样的: Memory Channel:volatile File Channel:基于WAL(预写式日志Write-Ahead Logging)实现 JDBC Channel:基于嵌入Database实现 Channel支持事务, 可以和任何数量的Source和Sink工作,Agent之Sink,Sink负责将event传输到下一跳或最终目的,成功完成后将event从Channel移除
6、 不同类型的Sink: 存储event到最终目的的终端Sink.比如Hdfs,Hbase 自动消耗的sink。比如Null Sink 用于Agent间通信的IPC sink:Avro 必须作用于一个确切的Channel,其他几个组件,Interceptor作用于Source,按照预设的顺序在必要地方装饰和过滤events。 Channel Selector允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel Sink Processor多个Sink可以构成一个Sink Group。Sink Processor可以通过组中所有Sink实现负载均衡;也可以在一个Si
7、nk失败时转移到另一个。,安装Flume,1. 从官网 http:/flume.apache.org/download.html 下载最新的安装包2. 解压缩,比如我的解压到 /usr/local/flume-1.5.0目录3. 修改 flume-env.sh 配置文件,主要是JAVA_HOME变量设置JAVA_HOME=/usr/local/jdk1.7.0_724. 验证是否安装成功rootnode1 Desktop# /usr/local/flume-1.5.0/bin/flume-ng version出现:Flume 1.5.0Source code repository: https
8、:/git-wip-us.apache.org/repos/asf/flume.git表示安装成功,Flume NG部署-配置文件格式,Java Properties文件格式#注释key1=valuekey2=multi-line value 层级配置agent1.channels.myChannel.type=FILEagent1.channels.myChannel.capacity=1000 使用软引用配置链接关系agent1.sources.mySource.type=HTTPagent1.sources.mySource.channels=myChannel,Flume NG部署-简
9、单配置实例,Agent1.conf:#定义source、channel和sink名称agent1.sources = src1agent1.channels = ch1agent1.sinks = sink1#定义并配置src1agent1.sources.src1.type=netcatagent1.sources.src1.channels=ch1agent1.sources.src1.bind=127.0.0.1agent1.sources.src1.port=10112#定义并配置sink1agnet1.sinks.sink1.type=loggeragnet1.sinks.sink1
10、.channel=ch1#定义并配置channel1agent1.channels.ch1.type=memory,Flume NG案例(一),Flume NG案例(一),第一层(Tier)配置实例,a1.channels=c1 a1.sources=r1 a1.sinks=k1 k2 a1.sinkgroups=g1a1.sinkgroups.g1.processor.type=LOAD_BALANCE a1.sinkgroups.g1.processor.selector=ROUD_ROBIN a1.sinkgroups.g1.processor.backoff=truea1.channe
11、ls.c1.type=FILEa1.sources.r1.channels=c1 a1.sources.r1.type=AVRO a1.sources.r1.bind=0.0.0.0 a1.sources.r1.port=41414,a1.sinks.k1.channel=c1 a1.sinks.k1.type=AVRO a1.sinks.k1.hostname=a21.example.org a1.sinks.k1.port=41414a1.sinks.k2.channel=c1 a1.sinks.k2.type=AVRO a1.sinks.k2.hostname=a22.example.o
12、rg a1.sinks.k2.port=41414,Flume NG案例(一),第二层(Tier)配置实例,a2.channels=c1 a2.sources=r1 a2.sinks=k1a2.channels.c1.type=FILEa2.sources.r1.channels=c1 a2.sources.r1.type=AVRO a2.sources.r1.bind=0.0.0.0 a2.sources.r1.port=41414a2.sinks.k1.channel=c1 a2.sinks.k1.type=HDFS a2.sinks.k1.hdfs.path=hdfs:/namenode
13、.example.org a2.sinks.k1.hdfs.fileType=DataStream,Flume NG案例(二),Flume NG案例(二),第一层(Tier)配置实例,a1.channels=c1 a1.sources=r1 a1.sinks=k1 k2 a1.sinkgroups=g1 a1.sinkgroups.g1.sinks=k1 k2 a1.sinkgroups.g1.processor.type=LOAD_BALANCE a1.sinkgroups.g1.processor.selector=ROUD_ROBIN a1.sinkgroups.g1.processor
14、.backoff=true a1.channels.c1.type=FILEa1.sources.r1.channels=c1 a1.sources.r1.type=SYSLOGTCP a1.sources.r1.bind=0.0.0.0 a1.sources.r1.port=41414,a1.sinks.k1.channel=c1 a1.sinks.k1.type=AVRO a1.sinks.k1.hostname=a21.example.org a1.sinks.k1.port=41414a1.sinks.k2.channel=c1 a1.sinks.k2.type=AVRO a1.sin
15、ks.k2.hostname=a22.example.org a1.sinks.k2.port=41414,Flume NG案例(二),第二层(Tier)配置实例,a2.channels=c1 c2 a2.sources=r1 a2.sinks=k1 k2 a2.sinkgroups=g1a2.sinkgroups.g1.sinks=k1 k2 a2.sinkgroups.g1.processor.type=LOAD_BALANCE a2.sinkgroups.g1.processor.selector=ROUD_ROBIN a2.sinkgroups.g1.processor.backoff
16、=truea2.channels.c1.type= FILE a2.channels.c1.checkpointDir=/var/run/flume-ng/.flume/ch-1/checkpoint a2.channels.c1.dataDirs=/var/run/flume-ng/.flume/ch-1/dataa2.channels.c2.type= FILE a2.channels.c2.checkpointDir=/var/run/flume-ng/.flume/ch-2/checkpoint a2.channels.c2dataDirs=/var/run/flume-ng/.flu
17、me/ch-2/data,a2.sources.r1.channels=c1 c2 a2.sources.r1.type=AVRO a2.sources.r1.bind=0.0.0.0 a2.sources.r1.port=41414 a2.sources.r1.selector.type=MULTIPLEXING a2.sources.r1.selector.header=Severity a2.sources.r1.selector.default=c1 a2.sources.r1.selector.mapping.0=c1 c2 a2.sources.r1.selector.mappin
18、g.1=c1 c2 a2.sources.r1.selector.mapping.2=c1 c2 a2.sources.r1.selector.mapping.3=c1 c2 a2.sinks.k1.channel=c1 a2.sinks.k1.type=HDFS a2.sinks.k1.hdfs.path=hdfs:/nn.example.org/demo/%Y-%m-%d/%H%M/ a2.sinks.k1.hdfs.filePrefix=FlumeData-%host- a2.sinks.k1.hdfs.fileType=DataStream a2.sinks.k1.hdfs.round=true a2.sinks.k1.hdfs.roundUnit=minute a2.sinks.k1.hdfs.roundValue=10 a2.sinks.k2.channel=c2 a2.sinks.k2.type=org.apache.flume.sink.hbase.AsyncHBaseSink a2.sinks.k2.table=mytable1 a2.sinks.k2.columnFamily=mycolfam1,日志集群构建,Flume:日志收集HDFS/HBase:日志存储Hive:日志分析,Q&A,Q&A,谢谢! Thank you!,