八、Flume的構架,安裝和基本使用

@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/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章