前景概要:
Kafka消息订阅系统在大数据业务中有着重要运用,尤其在实时业务中,kafka是必不可少的组件之一。
Flume是大数据组件中重要的数据采集工具,我们常利用Flume采集各种数据源的数据供其他组件分析使用。例如在实时业务中,我们常使用Flume将数据采集到Kafka中,以供实时组件Streaming或Spark等分析处理,Flume在大数据业务中有着重要的应用。
实验目的:
l 掌握kafka shell端生产者和消费者使用,实现数据的生成和实时消费(明天主要内容)
l 掌握Flume的配置和使用,能够使用Flume实现数据采集操作。
实验前提:
在已经完成部署Hadoop集群的情况下
启动Hadoop集群
步骤 1 在node1节点执行以下命令:
> start-dfs.sh ; start-yarn.sh
返回信息中有以下内容,表示hadoop集群启动成功:
Starting namenodes on [node1]
Starting secondary namenodes [node1]
starting yarn daemons

1.1.1 验证Hadoop状态
步骤 1 使用jps命令在node1-4中查看Java进程
在node1中可以查看到 NameNode,SecondaryNameNode,ResourceManager
进程,在node2-4中可以查看到 NodeManager 和 Datanode 进程,表示hadoop集群状态正常。
> jps
1538 WrapperSimpleApp
5732 SecondaryNameNode
5508 NameNode
6205 Jps
5918 ResourceManager
> jps
3026 Jps
2740 DataNode
1515 WrapperSimpleApp
2862 NodeManager

步骤 2 访问,可以登录Namenode的Web界面:

访问Yran界面:

1.2安装与测试Flume
步骤 1 下载并解压软件包
在node01上执行如下命令:
> cd /opt
> wget ++http://archive.apache.org/dist/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz++

> tar --zxvf apache-flume-1.8.0-bin.tar.gz


> mv apache-flume-1.8.0-bin /opt/flume-1.8.0
修改文件名字

步骤 2 设置环境变量
在node1执行命令vim /etc/profile后,在文件末尾添加以下内容:
export FLUME_HOME=/opt/flume-1.8.0
export PATH=PATH:FLUME_HOME/bin


添加完成后,执行命令source /etc/profile,使环境变量生效

步骤 3 修改配置文件
> cd /opt/flume-1.8.0/conf

> cp flume-conf.properties.template flume-conf.properties

步骤 4 运行验证
在node1上执行如下命令启动Flume测试用例
> cd /opt/flume-1.8.0/bin

> flume-ng agent --conf /opt/flume-1.8.0/conf/ --conf-file /opt/flume-1.8.0/conf/flume-conf.properties --name test -Dflume.root.logger=INFO,console (执行之后命令会不动,等1分钟,另开SSH界面)

在node1上执行如下命令,验证flume安装结果
> ps -ef |grep flume

当系统回显出现类似上面的信息时,表示flume安装成功
1.2.1 Flume数据到HDFS实验
在node1上执行以下命令
步骤 1 准备HDFS文件夹
在HDFS中创建flume存放数据的文件夹(作为sink的下沉地)
hdfs dfs -mkdir -p /flume/data

步骤 2 拷贝hadoop的jar包到$FLUME_HOME/lib下
cd /home/modules/hadoop-2.8.3/share/hadoop/common

cp *.jar $FLUME_HOME/lib

步骤 3 编辑flume conf配置文件
vim $FLUME_HOME/conf/hdfs.conf
#1、定义agent中各组件名称
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#2、source1组件的配置参数
agent1.sources.source1.type=exec
#手动生成/home/source.log手动生成
agent1.sources.source1.command=tail -n +0 -F /home/source.log
#3、channel1的配置参数
agent1.channels.channel1.type=memory
agent1.channels.channel1.capacity=1000
agent1.channels.channel1.transactionCapactiy=100
#4、sink1的配置参数
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://node1:8020/flume/data
agent1.sinks.sink1.hdfs.fileType=DataStream
#时间类型
agent1.sinks.sink1.hdfs.useLocalTimeStamp=true
agent1.sinks.sink1.hdfs.writeFormat=TEXT
#文件前缀
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d-%H-%M
#60秒滚动生成一个文件
agent1.sinks.sink1.hdfs.rollInterval=60
#HDFS块副本数
agent1.sinks.sink1.hdfs.minBlockReplicas=1
#不根据文件大小滚动文件
agent1.sinks.sink1.hdfs.rollSize=0
#不根据消息条数滚动文件
agent1.sinks.sink1.hdfs.rollCount=0
#不根据多长时间未收到消息滚动文件
agent1.sinks.sink1.hdfs.idleTimeout=0
#5、将source和sink 绑定到channel
agent1.sources.source1.channels=channel1
agent1.sinks.sink1.channel=channel1
过程如下:

步骤 4 启动Flume
cd /opt/flume-1.8.0/bin/

./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/hdfs.conf --name agent1 Dflume.root.logger=DEBUG,console

保持链接不变
步骤 5 测试并查看结果
创建新的node1终端,新建/home/source.log并写入文件
touch /home/source.log
echo 111 >> /home/source.log
echo 111 >> /home/source.log
echo 111 >> /home/source.log
在旧终端中可以查看到输出采集信息,接下来我们查看HDFS
[root@node1 ~]# hdfs dfs -ls /flume/data
[root@node1 ~]# hdfs dfs -cat /flume/data/2020-04-21-17-57.1587463023152

1.3 结论
Apache Flume 作为大数据生态系统中重要的数据收集和传输工具,通过其灵活的架构和强大的功能,为企业解决了日志管理、数据集成和实时数据处理的关键问题。深入理解 Flume 的定义、架构、原理、应用场景及常见命令,有助于读者在实际应用中更加高效地使用和管理 Flume。
通过本文的介绍,希望读者能够对 Apache Flume 的部署有一个清晰的认识,并能够在实际工作中应用 Flume 解决复杂的数据收集和处理挑战。