flume安装与使用

一,Flume 基础架构


1.1 Agent
  Agent 是一个 JVM 进程,它以事件的形式将数据从源头送至目的。
  Agent 主要有三个组成部分,Source、Channel、Sink。

1.2 Source
  Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类型、各种格式的日志数据,包括 avro、thrif、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。

1.3 Sink
  Sink 不断地轮询 Channel 中的事件且批量移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个 Flume Agent。
  Sink 组件的目的地包括 hdfs、logger、avro、thrif、file、HBase、solr、自定义。

1.4 Channel
  Channel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许 Source 和 Sink 运作在不同的速率上。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个 Sink 的读取操作。
  Flume 常用的 Channel:Memory Channel 和 File Channel。

1.5 Event
  Flume 数据传输的基本单元,以 Event 的形式将数据从源头送至目的地。Event 由 Header 和 Body 两个部分组成。Header 用来存放该 Event 的一些属性,为 K-V 结构;Body 用来存放该条数据,形式为字节数组。

1.6 Flume 

      数据源resource可以是多个,一个resource可以有多个channel,一个channel只能有一个sink

具体resource、channel、sink的各种配置类型可参考官网:Flume 1.11.0 User Guide — Apache Flume


二,安装flume

1,将安装包上传到 Linux 系统上。

2,解压

 tar -zxf flume-ng-1.6.0-cdh5.14.2.tar.gz

3,移到指定目录下,并重命名

mv apache-flume-1.6.0-cdh5.14.2-bin/ soft/flume160

4,进入soft/flume160/conf/下,将文件复制并重命名

cp flume-env.sh.template flume-env.sh

5,修改文件

vim flume-env.sh

6,将java_home改为自己的Java所在路径

export JAVA_HOME=/opt/soft/jdk1.8

7,配置环境变量

vim /etc/profile

添加如下内容
export FLUME_HOME=/opt/soft/flume160
export PATH=$PATH:$FLUME_HOME/bin

8,激活环境变量

source /etc/profile

9,测试是否安装成功

flume-ng version

三,安装netcat 工具

yum install -y net-tools
yum install -y nc

11,检查是否安装成功

nc -help

四,测试使用(我这里在opt/下建了几个文件夹,并把数据传入上去;然后重建个文件夹(自定义),留存放FLume Agent 的配置文件 如:opt/fmconf/qjc01.conf)

数据文件

mkdir -p data
mkdir -p data/users
mkdir -p data/user_friends
mkdir -p data/train
mkdir -p data/locale
mkdir -p data/events
mkdir -p data/event_attendees

 agent配置文件,即上面qjc01.conf

#定义三个组件,分别起名是s1,c1,k1;fn也可以自定义名字,不一定叫fn,但是上面叫fn,下面的也得都叫fn.
fn.sources=s1
fn.channels=c1
fn.sinks=k1

#设置source为netcat  端口号为8888,使用的channel为c1
fn.sources.s1.type=netcat
fn.sources.s1.bind=192.168.88.180
fn.sources.s1.port=8888
fn.sources.s1.channels=c1

#设置channel为capacity
fn.channels.c1.type=memory

#设置sink为logger模式,使用的channel为c1
fn.sinks.k1.channel=c1
fn.sinks.k1.type=logger

13,新开xshell界面,启动flume,用flume监听端口

#name为agent的名字,-f 为agent的配置目录,-c为flume配置目录,-Dflume为输出级别
#上面配置文件为fn,这里name就是fn

flume-ng agent --name fn -f /opt/fmconf/qjc01.conf -c /opt/soft/flume160/conf/ -Dflume.root.logger=INFO,console

14,另一个xshell界面进入netcat

nc 192.168.88.180 8888

此时此界面输入任意内容,另一个界面就能接受到你所写的内容

五,spooling源到hdfs          (qjc02.conf)

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

a1.sources.s1.type = spooldir
a1.sources.s1.channels = c1
#要读取数据的路径
a1.sources.s1.spoolDir = /opt/study/data/users
a1.sources.s1.fileHeader = true
#读取完后文件后缀名,默认为.completed
a1.sources.s1.fileSuffix = .FINISHED
#规定只读取.csv文件
a1.sources.s1.includePattern = ^.*\.csv$

a1.channels.c1.type = memory

a1.sinks.k1.channel=c1
a1.sinks.k1.type = hdfs
#设置存取文件位置,会自动创建
a1.sinks.k1.hdfs.path = hdfs://192.168.88.180:9000/flume/users/%y-%m-%d/
#设置使用本地时间戳,不设置可能会报错
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#设置文件尺寸(128M,另外两个需设置为0,否则会不起作用)
a1.sinks.k1.hdfs.rollSize = 134217728
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollCount = 0

2,执行(执行前需启动Hadoop)

flume-ng agent --name a1 -f /opt/fmconf/qjc02.conf -c /opt/soft/flume160/conf/ -Dflume.root.logger=INFO,console

3,完成过后,进入hdfs,就可查看对应目录下会有相应文件(L:表示显示多少行,l:表示显示最长那行有多少个字符)。上面路径下csv文件读取完时,后缀名会自动变为设置的.FINISHED。如果有其他文件,进入了读取的文件夹路径里,只要命令程序没停,他会自动继续读取,然后读取完后,将文件后缀名变更。(如果没有设置读取文件格式,其他类型文件也会读取)

 hdfs dfs -cat /flume/users/22-04-11/FlumeData.1649650833933.tmp | wc -L

六,spooling源到hbase       (qjc03.conf)

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

a1.sources.s1.type = spooldir
a1.sources.s1.channels = c1
a1.sources.s1.spoolDir = /opt/study/data/users
a1.sources.s1.fileHeader = true
a1.sources.s1.fileSuffix = .FINISHED
a1.sources.s1.includePattern = ^.*\.csv$
#过滤器,除去第一行表头
a1.sources.s1.interceptors=i1
a1.sources.s1.interceptors.i1.type=regex_filter
#为true,则排除满足正则的事件
a1.sources.s1.interceptors.i1.excludeEvents=true
a1.sources.s1.interceptors.i1.regex=user_id.*

a1.channels.c1.type = memory
a1.sinks.k1.channel = c1

a1.sinks.k1.type = org.apache.flume.sink.hbase.HBaseSink
#在hbase中的表名,须在hbase中创建此表
a1.sinks.k1.table = mydemo:users
#列簇
a1.sinks.k1.columnFamily = base
#正则序列化
a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer
#我的csv数据格式为user_id,locale,birthyear,gender,joinedAt,location,timezone
a1.sinks.k1.serializer.regex=(.*),(.*),(.*),(.*),(.*),(.*),(.*)
a1.sinks.k1.serializer.colNames=ROW_KEY,locale,birthday,gender,joinedAt,location,timezone
a1.sinks.k1.serializer.rowKeyIndex=0

hbase中建表 

2,执行命令

flume-ng agent --name a1 -f /opt/fmconf/qjc03.conf -c /opt/soft/flume160/conf/ -Dflume.root.logger=INFO,console

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值