環境準備:
1、1臺centos系統機器
2、jdk安裝包
3、flume安裝包
步驟:
1、flume安裝的前提是先安裝了JDK
如下:
centos7.2使用rpm安裝jdk8
①下載jdk
到官網下載:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
我下載的這個版本:
Linux x64 | 56.52 MB | jdk-8u221-linux-x64-demos.rpm |
②安裝jdk
rpm -ivh jdk-8u221-linux-x64-demos.rpm
③配置環境變量(告訴電腦jdk在哪裏)
vim /etc/profile //打開環境變量文件
進入insert模式(按字母i) 在最後面加上下面這段,然後按esc 然後保存退出(按 :wq回車)
PS:FLUME_HOME和PATH裏面關於FLUME的路徑是安裝完FLUME後加上的。
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
FLUME_HOME=/opt/flume-1.8.0
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$FLUME_HOME/bin
source /etc/profile //重新載入
④檢查是否完成安裝
java -version
rmp卸載jdk
rpm -qa|grep jdk //查看版本
rpm -e jdk版本 //卸載
2、安裝flume
①首先去官網下載http://flume.apache.org/download.html
選擇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
(放到想要安裝的目錄下,目錄名保存爲flume-1.8.0,如/opt)
到這裏已經安裝完成了吧!!!記得去上面PS增加java裏flume的配置(紅色文字)
下面是一個案例,我們在一臺機器上來做測試就可以了!!!
案例來了
我們去到/opt/flume-1.8.0/conf 目錄下新建一個example.conf來測試(
vi example.conf),當然也可以直接在flume.conf中寫測試配置,我們這裏用新建example.conf,裏面填寫要測試的內容:
#配置agent
agent1.sources=source1
agent1.channels=channel1
agent1.sinks=sink1
#配置source1
agent1.sources.source1.type=spooldir
#指定監控的目錄,監控/home/hadoop/logs,如果監控的文件夾有更新,那麼就同步數據文件到/home/hadoop/logs/fileRoll文件夾中
agent1.sources.source1.spoolDir=/home/hadoop/logs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader=false
agent1.sources.source1.interceptors=i1
agent1.sources.source1.interceptors.i1.type=timestamp
#配置sink1
agent1.sinks.sink1.type=file_roll
#配置sink類型爲追加文件
agent1.sinks.sink1.channel=channel1
#配置作用於哪個channel
agent1.sinks.sink1.sink.directory=/home/hadoop/logs/fileRoll
#配置channel1
agent1.channels.channel1.type=file
#channel存放數據的備份目錄
agent1.channels.channel1.checkpointDir=/home/hadoop/channel_data.backup
#channel數據存放目錄
agent1.channels.channel1.dataDirs=/home/hadoop/channel_data
寫完這個文件後保存,接着就是啓動了!
bin/flume-ng agent -n agent1 -c conf -f conf/example.conf -Dflume.root.logger=DEBUG,console
啓動時如果沒有報錯的話, 我們就再啓動一個xshell命令框,也是登陸到同樣的服務器。
我們可以先查看下/home/hadoop/logs目錄下有無文件,只有一個fileRoll,
我們在這個目錄下(/home/hadoop/logs
)新增一個有測試內容的文件:echo "Abby test">1.txt
回車後我們會在fileRoll文件下產生一些文件,其中大小不爲0的文件中,查看內容,cat 1563498683527-8
就可以看到我們剛纔寫的:Abby test
成功啦!!!
以上是操作
我是分割線——————————————————————————————————————————————————————
下面是理論
一.Apache Flume
1.概述
Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集聚合和傳輸的軟件。
Flume的核心是把數據從數據源(source)收集過來,再將收集到的數據送到指定的目的地(sink),爲了保證傳輸過程一定成功,在送到目的地(sink)之前,會先緩存(channel),待數據真正到達目的地(sink)之後,Flume再刪除自己緩存的數據。
Flume支持定製各類數據發送方,用於收集各類型數據;同時,Flume支持定製各種數據接受方,用於最終存儲數據。一般的採集需求,通過對Flume的簡單配置即可實現。針對特殊場景也具備良好的自定義擴展能力。因此,Flume可以適應大部分的日常數據採集情景。
當前Flume有兩個版本,Flume 0.9X版本的統稱爲Flume OG,而1.X版本統稱爲Flume NG,後來Flume納入Apache旗下,Cloudera Flume改名爲Apache Flume。
2.運行機制
Flume系統中核心的角色是agent,agent本身是一個Java進程,一般運行在日誌收集節點
每一個agent相當於一個數據傳輸員 ,內部有三個組件:
source:採集源,用於和數據源對接,以獲取數據,Source是數據的收集端,負責將數據捕獲後進行特殊的格式化,將數據封裝到事件(event) 裏,然後將事件推入Channel中。 Flume提供了很多內置的Source, 支持 Avro, log4j, syslog 和 http post(body爲json格式)。可以讓應用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。 如果內置的Source無法滿足需要, Flume還支持自定義Source。;
sink:Sink從Channel中取出事件,然後將數據發到別處,可以向文件系統、數據庫、 hadoop存數據, 也可以是其他agent的Source。在日誌數據較少時,可以將數據存儲在文件系統中,並且設定一定的時間間隔保存數據。
channel:Channel是連接Source和Sink的組件,大家可以將它看做一個數據的緩衝區(數據隊列),它可以將事件暫存到內存中也可以持久化到本地磁盤上, 直到Sink處理完該事件。介紹兩個較爲常用的Channel, MemoryChannel和FileChannel。;
在整個數據的傳輸的過程中,流動的是event,它是Flume內部傳輸的基本單位,它將傳輸的數據進行封裝,如果是文本文件,通常是一行記錄,本身爲一個字節數組,並且可以攜帶headers(頭信息)。event代表着一個數據的最小完整單元,
向外部數據源來,向外部目的地去.
3.Flume採集系統結構圖
1)簡單結構
2)複雜結構
---------------------
參考文章:
https://segmentfault.com/a/1190000011881177
https://blog.csdn.net/qq_39327985/article/details/85246214
https://blog.csdn.net/budingningmeng/article/details/96313734
還有網易雲課堂上的科多大數據視頻