开发者学堂课程【Flume 基础应用实战-企业全场景解决方案:Apache Flume- 安装部署&简单入门】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/715/detail/12767
Apache Flume- 安装部署 & 简单入门
内容介绍:
一、Flume 的安装部署
二、简单入门
三、小结
一、Flume 的安装部署
Flume 的安装部署,相比较于其他大数据软件显得非常简单,只需要在机器上解压安装包,配置一个环境变量即可。Flume 工作的重点在于配置一个叫做采集方案的文件,所谓的采集方案指需要个人根据业务需求描述清楚 Flume中三个组件source、channel、sink 的类型,我们只需要根据业务需求确定 source、channel、sink 的类型,比如把数据放在 HDFS 上,接下来去官网看有没有开发出这一个,然后只需要将它复制过来,把里面参数属性修改一下,并不需要从零去配置这些东西。
1、采集方案的取名:
这个采集方案的名字通常都是以 .conf 结尾的,至于前面叫什么名字没有强制的约束,可以给它起名叫做 1.conf、2.conf,但在企业中,要求见名知意,就是别人看到名字就知道它代表了什么含义。
2、采集方案的参数如何编写:
重点在里面的内容如何编写,打开官网会发现,网站左边有一个叫做Documentation 文档,点击一下打开之后,选择 user guide 用户指导手册,这里面有各种各样的选项,可以浏览一下。
configuration 怎么去配置,重点在下面。
第一块叫做 Flume 的数据源,这个模块当中列举出来了当下版本 Flume 支持的各种各样的数据源,有 Avro Source,Thrift Source,Exec Source (执行义务式命令),还有 JMS Source(java 消息队列),我们要做的就是根据需求找到对应的选项,然后看里面的相关配置参数。甚至下面还会给一个例子,只要把例子复制过来,根据需求修改即可。
同样其他两个组件也有官方自带的说明。
这里有好多 sink,比如把数据放在 HDFS上,存放在 Hive 等,只要官方支持的都可以来使用,同样的还是点击它根据需求来确定参数,如果不知道,这里有官方私例,后面有相关的文档说明。
Channel 也有相关的描述。
有缓存到内存当中的 memory channel, 有缓存到数据库当中 JDBC 来缓存的,还有缓存在卡夫卡当中等,每个类型各有优缺点,要根据需求来做一个相关的选择。
3、采集方案的内容:
做一个采集去监听一个网络端口,比如可以通过网络端口发送数据,只要端口有数据,就可以把数据通过 Flume 收集到,把它传递到屏幕终端上,也就是把它打印出来,但这个没有任何实战意义,只是为了做一个简单的入式。
首先,它的名字是 netcat-logger.conf,netcat 就是官方支持的一个组件,用于监听某个端口,logger 就是打印在屏幕中端以日志的形式来输出。
方案当中需要的东西:
(1)首先第一大块,需要给三个组件分别起个名字,这里起名字叫做 r1、k1、c1,命名规则来自于官网,官网带的例子当中都叫 r1、k1、c1 ,事实上名字可以任意起,描述清楚即可。
(2)描述和配置 source 组件 r1:它的类型叫做 netcat。通过官网会发现下面有解释说明,它可以去监听一个给定的端口,然后把收到的文本变成一个 event 传递,source 就是去监听端口的数据,把文本变成 event 放在 Flume 传递。下面绑定 localhost 这个端口,端口是44444,这三个选项就把 source 描述清楚了。
(3)描述和配置 sink 组件 s1:把数据放在屏幕终端上打印,这在企业当中没有实际的意义,这里是做一个 hello 的入门叫做 logger, 把它打印在屏幕上,后面可以把它改为 hive ,放在任何想放的地方叫它支持就可以.
(4)描述和配置 channel 组件 c1:它的类型叫做 memory, 是一个内存 channel,简单说就是把数据放在内存当中做一个缓存,但是内存的缓存可能不能无限释放,内存容易撑爆,来一个容量 capacity=1000 ,1000就表示 event 的个数,它把收集的数据包装成一个 event 的格式,它最多可以内存中放1000个,下面的 transaction 叫做事物的容量,这100个当中会存在一个事物概念,要么一起成功,要么一起失败.
(5)描述和配置 source、channel、sink 之间的连接关系:通过组件配置把这三个做一个拼接,source 的 channel 为 c1,sink 的 channel
也 c1,这两个条件写完之后就相当于构成了这样一个图。
中间就是 c1,一手拉着 sourcee,一手拉着sink,就构成了一个 agent 的进程,这就是采集方案文件,在这里只是一个简单的入门,在后续过程或者在企业当中,需要结合具体的业务来把采集方案描述的更加的详细清楚,方案当中参数拆除的写法可以去官网上寻找。
4、演示部署
打开服务器,进入到常见的安装软件的目录,在 export 下的 servers 下,把 Flume 的安装包拖进来,这里用的是版本1.8,选择软件 Flume 安装包拖上来,选择 tar-zxvf 然后上传,然后做解压,解压到当前路径下。
输入:tar zxvf apache-flume-1.8.0-bin.tar.ge
解压完后通常会删除安装包,做一个重命名。
接下来 cd 到当中,ll来查看一下文件的格式。
这个目录结构跟 Apache 的软件非常相似,上面这个 Bin 应该放的是启动相关的脚本,下面 conf 存放配置文件,文档、架包、工具等。
修改 conf 下的 flume-env.sh,在里面配置 JAVA HOME 即可。现在来做操作,cd到conf 路径下。
它叫做 flume-env.sh 脚本,但是这里有一个叫做 template 的后缀,一个模板。
因此第一步给它重命名,把 Flume-env.sh.template 改个名字,把后面的 .template 去掉。
接下来编辑一下这个脚本。
可以发现在光标闪烁这一行就导入 JAVA_HOME,但现在应该先把前面的注释给它释放开,那么 java 路径在哪里,这时候有一个小技巧 。
找一下本机来克隆一下,找一下 java(which java), 就可以知道 java 的所在路径下,但是指向 jdk 安装的根目录。配置好之后做一个快速保存,这样就配置好了。
现在这个脚本没有执行的权限,来一个 chmod a+x,所有的用户都加一个执行的的权限。
这样这个脚本就有执行权限了,也就配置好 Flume 了。
二、Hello World 简单入门
打开文件,首先给这个文件起个名字就叫做 netcat-logger ,再 cd 到 conf 当中做一个编辑 vim。
配置下图内容
然后打开编辑器粘贴,之后再做一个确认 ,r1,c1,k1, 尤其端口 IP 的一定要保持一致,确认工作做一个快速的保存,接下来就是启动 Flume 。启动 Flume 的命令也非常死。
首先 bin/flume-ng 表面它是新的 flume ,首先指定配置文件 conf 在哪里,然后指定它具体的采集方案的名字,这个名字就是刚才写的名字,然后的名字叫 a1,这有个小插曲,大家发现--name 叫 a1,这不是乱写,这里面都叫 a1,说明这个 agent进程名字就叫做 a1,那里面应该就是 a1的具体描述,里面就应该和外面对应上,后面是开启日志,把日志打印在 console 终端上。
接下来把命令做一个复制,做一个执行,看一下 Flume 怎样进行数据的采集。来到终端,因为没有配置环境变量,就返回到它的根目录做一个执行(回车 ),这时就启动了 flume。
它说现在正在监听本机的5个四端口,但现在并没有数据。
怎么模拟这个端口有数据?这有一个小命令叫做 telnet,可以跟本机进行一个交互。如下图
可以发现通过这个小工具连接到了本机五个四端口,现在比如说一句哈喽,然后回车。
可以看到这边敲个 hello 之后,有变成蓝色,说明有数据输出,也就是它把 hello数据输出来了。
这一个类型就是所说的 event 类型,ecent 相当于一个数据包,当中有 hand,看对面没有信息,然后后面是 body,数 headers, 数据 hello 就在 body 当中。这就正好演示了通过工具往本机端口发送的数据,把它收集到包装成一个 event 打印在屏幕终端上,这就完成了 Flume 数据搬运的工作。这个简单的 hello world 并没有任何实际的意义,只在这里帮助解释,重点感受一下 flume 的采集方案该如何编写以及如何去启动 flume。
三、小结
1、flume 的安装部署:
在 conf/flume-envsh 导入 java 环境变量,保证 flume 工作的时候一定可以正确的加载到环境变量。
2、flume 开发步骤
(1)重点就是根据业务需求编写采集方案配置文件;
(2)文件名见名知意,通常以 souce--sink.conf;
(3)具体需要描述清楚 sink 、source、 channel 组件配置信息,要结合官网配置;
(4)启动命令:
bin/flume-ng agent--conf conf--conf-file conf/netcat-1ogger
.
conf --name a1- Df1ume.root
.
logger=INF
O
.console
--conf 指定配置文件的目录;
--conf-file 指定采集方案路径;
--name agent 进程名字,要跟采集方案中保持一致。