小言_互联网的博客

八、Flume的构架,安装和基本使用

377人阅读  评论(0)

@Author : By Runsen
@Date : 2020/6/21

作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件。导致翘课严重,专业排名中下。.在大学60%的时间,都在CSDN。

在一月到四月都没怎么写博客,因为决定写书,结果出书方说大学生就是一个菜鸟,看我确实还是一个菜鸟,就更新到博客算了。

我把第九章更新到博客上。

9.5 Sqoop和Flume

9.5.3 Flume基本架构和安装

(1) Flume基本架构

在一个完整的大数据处理系统中,除了HDFS,Mapreduce组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集的数据输出到HDFS、Hbase、kafka等众多外部存储系统中,Flume架构图如下图9-16所示。

Flume的设计是Agent,本身是一个java进程,运行在日志收集节点中,Agent里面包含三大核心组件:source,channel和sink,类似生产者、仓库、消费者的架构。

  • source是专门用来收集数据的,可以处理各种类型、各种格式的日志数据

  • source组件把数据收集以后,临时存放在channel中,channel对采集到的数据进行简单的缓存,可以存放在memory、jdbc、file等。

  • sink组件是用于把数据发送目的地的组件,目的地包括HDFS、hbse等。

(2)Flume安装

Flume官网地址 :http://flume.apache.org/,这里我们下载Flume1.9.0版本,下载链接:http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz

[root@node01 ~]# mkdir -p opt/module/flume
[root@node01 ~]# cd opt/module/flume
[root@node01 flume ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
[root@node01 flume]# tar -zxvf apache-flume-1.9.0-bin.tar.gz 
[root@node01 flume]# cd apache-flume-1.9.0-bin/conf/
[root@node01 conf]# mv flume-env.sh.template flume-env.sh
[root@node01 conf]# vim flume-env.sh
##########
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
[root@node01 conf]# vim /etc/profile
##########
export FLUME_HOME=/root/opt/module/flume/apache-flume-1.9.0-bin
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$PATH:$FLUME_HOME/bin
[root@node01 conf]# source /etc/profile

[root@node01 conf] ~]# flume-ng version
Flume 1.9.0
# 分发其他节点
[root@node01 conf]# cd ../../../
[root@node01 module]# scp -rp flume/ root@node02:/root/opt/module/flume/
[root@node01 module]# scp -rp flume/ root@node03:/root/opt/module/flume/

[root@node01 ]# scp -rp /etc/profile node02:/etc/profile
[root@node01 ]# scp -rp /etc/profile node03:/etc/profile

[root@node02]# source /etc/profile
[root@node03]# source /etc/profile

9.5.4 Flume基本使用

(1)监控44444端口

下面使用Flume官方实例监控44444端口,参考:http://flume.apache.org/FlumeUserGuide.html

在此之前,我们需要安装netca。netcat是一个简单而有用的工具,被誉为网络安全界的“瑞士军刀”,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具。

[root@node01]# yum install -y nc

我们在Flume安装目录下创建job文件夹,并编写netcat-flume-logger.conf,启动Flume

[root@node01 apache-flume-1.9.0-bin]# mkdir job
[root@node01 apache-flume-1.9.0-bin]# cd job/
[root@node01 job]# vim netcat-flume-logger.conf
##########
# agent的组件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# sources描述
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# sinks描述
a1.sinks.k1.type = logger
# 使用缓冲池
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 将sources和sinks绑定到缓冲池
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
[root@node01 job]# flume-ng agent --conf conf --conf-file netcat-flume-logger.conf --name a1 -Dflume.root.logger=INFO,console

2020-02-28 17:03:05,320 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]

我们新开一个连接,使用nc连接本机端口44444,输入Hello,这时候Flume就会监控44444在控制台的输出

[root@node01 ~]# nc localhost 44444
hello
OK

##########
2020-02-28 17:07:24,342 INFO sink.LoggerSink: Event: { headers:{} body: 68 65 6C 6C 6F  hello }

(2)监控Hive日志

实时监控hive 日志文件,并上传到HDFS中

Flume要想将数据输出到HDFS,必须持有Hadoop相关jar包。因此,我们需要拷贝Hadoop中的jat包到flume中的lib文件夹

[root@node01 lib]# pwd
/root/opt/module/flume/apache-flume-1.9.0-bin/lib
[root@node01 lib]# cp /root/opt/module/hadoop/hadoop-3.2.1/share/hadoop/hdfs/*.jar /lib
[root@node01 lib]# cp /root/opt/module/hadoop/hadoop-3.2.1/share/hadoop/common/*.jar /lib
[root@node01 lib]# cp /root/opt/module/hadoop/hadoop-3.2.1/share/hadoop/common/lib/*.jar /lib

[root@node01 lib]# cd ../job

[root@node01 job]# touch hive-flume-hdfs.conf
[root@node01 job]# vim hive-flume-hdfs.conf
# Name the components on this agent
a2.sources = r2
a2.sinks = k2
a2.channels = c2

# Describe/configure the source
a2.sources.r2.type = exec
a2.sources.r2.command = tail -F /root/opt/data/hive/logs/hive.log 
a2.sources.r2.shell = /bin/bash -c

# Describe the sink
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://node01:9000/flume/%Y%m%d/%H
#上传文件的前缀
a2.sinks.k2.hdfs.filePrefix = logs-
#是否按照时间滚动文件夹
a2.sinks.k2.hdfs.round = true
#多少时间单位创建一个新的文件夹
a2.sinks.k2.hdfs.roundValue = 1
#重新定义时间单位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地时间戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 1000
#设置文件类型,可支持压缩
a2.sinks.k2.hdfs.fileType = DataStream
#多久生成一个新的文件
a2.sinks.k2.hdfs.rollInterval = 600
#设置每个文件的滚动大小
a2.sinks.k2.hdfs.rollSize = 134217700
#文件的滚动与Event数量无关
a2.sinks.k2.hdfs.rollCount = 0
#最小冗余数
a2.sinks.k2.hdfs.minBlockReplicas = 1

# Use a channel which buffers events in memory
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100

# Bind the source and sink to the channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2

[root@node01 job]# flume-ng agent --conf conf/ --name a2 --conf-file hive-flume-hdfs.conf

# 启动hive
[root@node01 ]# hive
hive (default)> 

[root@node01 job]# cd /root/opt/data/hive/logs
[root@node01 logs]# cat hive.log 
2020-02-29T12:56:38,882  INFO [pool-10-thread-1] metadata.HiveMaterializedViewsRegistry: Materialized views registry has been initialized
···········
[root@node01 logs]# hdfs dfs -ls  /
drwxr-xr-x   - root supergroup          0 2020-02-29 12:56 /flume/

转载:https://blog.csdn.net/weixin_44510615/article/details/106889007
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场