flume快速入門及應用

? Flume 簡介
? Flume 的安裝與配置
? Fumne 部署

  Flume 是 Cloudera 提供的一個高可用、 高可靠、 分布式的海量日志采集、 聚合和傳輸的系統。 Flume 支持定制各類數據源如 Avro、 Thrift、 Spooling 等。 同時 Flume提供對數據的簡單處理, 并將數據處理結果寫入各種數據接收方, 如將數據寫入到 HDFS文件系統中。Flume 作為 Cloudera 開發的實時日志收集系統, 受到了業界的認可與廣泛應用。2010 年 11 月 Cloudera 開源了 Flume 的第一個可用版本 0.9.2, 這個系列版本被統稱為 Flume-OG(Original Generation) 。 隨著 Flume 功能的擴展, Flume-OG 代碼開始
臃腫、 核心組件設計不合理、 核心配置不標準等缺點暴露出來, 尤其是在 Flume-OG 的最后一個發行版本 0.94.0 中, 日志傳輸不穩定的現象尤為嚴重。 為了解決這些問題,2011 年 10 月 Cloudera 重構了核心組件、 核心配置和代碼架構, 重構后的版本統稱為Flume-NG( Next Generation) 。 改動的另一原因是將 Flume 納入 Apache 旗下,Cloudera Flume 改名為 Apache Flume。Flume 的數據流由事件(Event)貫穿始終。 事件是 Flume 的基本數據單位, 它攜帶日志數據(字節數組形式)并且攜帶有頭信息, 這些 Event 由 Agent 外部的 Source 生成,當 Source 捕獲事件后會進行特定的格式化, 然后 Source 會把事件推入(單個或多個)Channel 中。 你可以把 Channel 看作是一個緩沖區, 它將保存事件直到 Sink 處理完該事件。 Sink 負責持久化日志或者把事件推向另一個 Source。Flume 以 agent 為最小的獨立運行單位。 一個 agent 就是一個 JVM。

單 agent 由Source、 Sink 和 Channel 三大組件構成, 如圖 11.1 所示。

值得注意的是, Flume 提供了大量內置的 Source、 Channel 和 Sink。 不同類型的Source,Channel 和 Sink 可以自由組合。 組合方式基于用戶的配置文件, 非常靈活。 比如: Channel 可以把事件暫存在內存里, 也可以持久化到本地硬盤上。 Sink 可以把日志寫入 HDFS, HBase, 甚至是另外一個 Source 等。 Flume 支持用戶建立多級流, 也就是說, 多個 agent 可以協同工作, 并且支持 Fan-in(扇入)、 Fan-out(扇出)、 ContextualRouting、 Backup Routes。 如圖 11.2 所示。

Flume 的一些核心概念:

Agent 使用 JVM 運行 Flume。 每臺機器運行一個 agent, 但是可以在一個 agent 中包含多個 Sources 和 Sinks。Source 從 Client 收集數據, 傳遞給 Channel。?Source 從 Client 收集數據, 傳遞給 Channel。?Channel 連接 sources 和 sinks , Channel 緩存從 Source 收集來的數據。Sink 從 Channel 收集數據, 并將數據寫到目標文件系統中。
Flume 的安裝與配置
在安裝 Flume 之前, 請確認已經安裝了 JDK 并正確配置了環境變量。
步 1: 下載并解壓 Flume
下載地址:
http://www.apache.org/dyn/closer.lua/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz。 將 flume 解壓到/weric 目錄下。 /weric 是之前安裝 hadoop 等等其他軟件的目錄。
$ tar -zxvf ~/apache-flume-1.7.0-bin.tar.gz -C /weric
步 2: 配置 flume 的環境變量
我個人比較喜歡創建一個獨立的環境變量配置文件, 所以使用 sudo 創建
$ sudo vim /etc/profile.d/flume.sh
在配置文件中, 添加以下內容
#!/bin/sh
export FLUME_HOME=/weric/apache-flume-1.7.0-bin
export PATH=$PATH:$FLUME_HOME/bin
環境變量生效
$ source /etc/profile
現在可以使用 version 測試 flume 的版本
$ flume-ng version
Flume 1.7.0
步 3: 配置 flume-env.sh 文件
在 flume-env.sh 文件中配置 JAVA_HOME 環境變量。
$ cp flume-env.sh.template flume-env.sh
$ vim flume-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_131
至此為止, flume 安裝與配置已經完成。 是不是非常的簡單。 以下是將部署兩個基本的 flume agent 測試 flume。
部署 Flume agent
部署 flume 就是配置和啟動一個 agent。 flume 允許配置多個 agent, 它們之間可 以沒有關系, 也可以組成一個數據鏈。

1. Avro
  Flume 可以通過 Avro 監聽某個端口并捕獲傳輸的數據。 現在我們配置一個 Source用于監聽某個端口的數據, 并將它寫出到 flume 的 log 中。
創建一個配置文件,這個配置文件可以是任意的名稱:
$vim netcat.conf
添加以下內容:
#配置三個組件
a1.sources=r1
a1.sinks=k1
a1.channels=c1
#配置 source
a1.sources.r1.type=netcat
a1.sources.r1.bind=weric22
a1.sources.r1.port=4444
#配置 sink
a1.sinks.k1.type=logger
#配置 channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#綁定 source,sink 和 channel
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
現在啟動 Flume Agent
$ flume-ng agent -c conf -f netcat.conf -n a1?-Dflume.root.logger=INFO,console?
-c conf 是指使用指定的配置文件。 -f netcat.conf 是使用的配置文件。 -n a1為 agent 的名稱。 -Dflume.root.logger=INFO,console 即為輸出的日志級別和目標。
啟動以后顯示為 :

可見, 已經開始監聽 4444 端口。

現在打開另一個終端, 使用 telnet 登錄 4444 端口, 并發送數據:

然后檢查 flume 端接收到的信息

  通過上面的配置可以發現在 telent 端輸出的數據, 都已經被 flume 接收并輸出到控制臺。 即實現了第一個 flume 的部署。
以下配置是將從端口接收到的數據, 保存到 hdfs。
#定義三個組件
a1.sources=r1
a1.channels=c1
a1.sinks=k1
#定義 r1, 即定義數據來源
a1.sources.r1.type=netcat
a1.sources.r1.bind=weric22
a1.sources.r1.port=4444
#配置 sink,即輸出的目標
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://weric22:8020/flume/avro_to_hdfs
a1.sinks.k1.hdfs.writeFormat=Text
a1.sinks.k1.hdfs.fileType=DataStream
#配置中間的緩存
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
#將這三個組件組成一塊
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
現在啟動 flume agent:
$ flume-ng agent -n a1 -c config -f 03_avro_to_hdfs.conf
-Dflume.root.logger=DEBUG,Console
使用 telent 登錄 weric22 主機的 4444 端口, 然后輸入若干數據, 如下:
$ telnet weric22 4444
Jack <ENTER>
OK
....
現在可以查看 hdfs 上的數據:
$ hdfs dfs -ls /flume/avro_to_hdfs
Found 4 items
-rw-r--r-- /flume/avro_to_hdfs/FlumeData.1501858294240
-rw-r--r-- /flume/avro_to_hdfs/FlumeData.1501858327295
-rw-r--r-- /flume/avro_to_hdfs/FlumeData.1501858480559
-rw-r--r-- /flume/avro_to_hdfs/FlumeData.1501859145948
更可以查看里面保存的數據:
$ hdfs dfs -cat /flume/avro_to_hdfs/*
Mary
Alex
Jerry b
2. Spool
  Spool 用于監測配置的目錄下新增的文件, 并將文件中的數據讀取出來。 需要注 意兩點: 拷貝到 spool 目錄下的文件不可以再打開編輯、 spool 目錄下不可包含相應的 子目錄。 現在創建 flume 的一個配置文件 spool.conf:
$ vim spool.conf
并添加以下配置信息:
#聲明三個組件的名稱
a2.sources=r1
a2.channels=c1
a2.sinks=k1
#聲明 r1 即 source
a2.sources.r1.type=spooldir
a2.sources.r1.spoolDir=/weric/log
#聲明 channel 即 c1
a2.channels.c1.type=memory
a2.channels.c1.capacity=1000
#聲明 sinks 之 k1
a2.sinks.k1.type=hdfs
a2.sinks.k1.hdfs.path=hdfs://weric22:8020/flume/%Y%m%d%H
a2.sinks.k1.hdfs.writeFormat=Text
a2.sinks.k1.hdfs.fileType=DataStream
#由于上面使用了時間對象所以必須要設置為 true
a2.sinks.k1.hdfs.useLocalTimeStamp=true
#設置文件的前綴, 默認值為 FlumeData.
a2.sinks.k1.hdfs.filePrefix=weric
#組合起來
a2.sources.r1.channels=c1
a2.sinks.k1.channel=c1
上例中%Y%m%d%H 是指輸出年月日小時的格式的目錄。 fileType 的選項有三個, 分 另是: DataStream( 原始數據流) 、 SequenceFile、 CompressedStream。 默認值為 SequenceFile。 hdfs.filePrefix 默認值為 FlumeData, 可以修改成任意的值。 由于在配置中使用了%Y 等時間表達式, 所以必須要設置 useLocalTimeStamp=true, 否則會出
現異常。 現在啟動這個 agent:
$ flume-ng agent -c apache-flume-1.7.0-bin/conf/ -f?flume_config/spool.conf -n a2 -Dflume.root.logger=DEBUG,console?
現在可以將文件直接拷貝到/weric/log 目錄下了:
$ cp ~/note.txt /weric/log/notes.txt
flume 在完成上傳以后, 會修改文件名, 默認的添加擴展為.COMPLETED:
$ ls
notes.txt.COMPLETED
檢查 hdfs 上的文件:
$ hdfs dfs -ls /flume/2017080122
-rw-r--r-- ... /flume/2017080122/weric.1501579397641
上面略去了部分內容, 其中 weric.1501579397641 即是采集完成放到 hdfs 上的
文件。







?

?

?













?

?

?

?

?



轉載于:https://www.cnblogs.com/rongby/p/9711921.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250511.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250511.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250511.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

koa --- jwt實現最簡單的Token認證

HTML 有如下html: 先看代碼后挑重點來說明: <!DOCTYPE html><head><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script src"https://unpkg.com/axios/dist/axios.min.js"></script></…

python基礎之常用的高階函數

前言 高階函數指的是能接收函數作為參數的函數或類&#xff1b;python中有一些內置的高階函數&#xff0c;在某些場合使用可以提高代碼的效率&#xff0e; map() map函數可以把一個迭代對象轉換成另一個可迭代對象&#xff0c;不過在python3中&#xff0c;結果都是一個map對象&…

Java 試題八

Java 試題八 1、java中有幾種方法可以實現一個線程&#xff1f;用什么關鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用&#xff1f; 答&#xff1a;有兩種實現方法&#xff0c;分別是繼承Thread類與實現Runnable接口&#xff1b;用synchronized關鍵字修飾同步方法…

bzoj2957 奧妙重重的線段樹

https://www.lydsy.com/JudgeOnline/problem.php?id2957 線段樹的query和update竟然還可以結合起來用&#xff01; 題意&#xff1a;小A的樓房外有一大片施工工地&#xff0c;工地上有N棟待建的樓房。每天&#xff0c;這片工地上的房子拆了又建、建了又拆。他經常無聊地看著窗…

koa --- 使用Github OAuth登錄

準備 登錄github選擇右上角的setting Developer settings -> OAuth Apps -> Register a new application 填入基本信息 點擊綠色的按鈕,可以看見 client_id 和 client secret 理清思路: 開始時,一個登錄的連接,點擊連接.后臺監聽登錄(/login)路由,然后重定向到github…

[數據結構] - ArrayList探究

一 概述 ArrayList可以理解為動態數組&#xff0c;與java的數組相比&#xff0c;它的容量能動態曾長&#xff0c;ArrayList是List接口的可變數組的實現&#xff0c;允許包括null值在內的所有元素。除了實現List接口外&#xff0c;此類還提供一些方法來操作內部用來存儲列表的數…

10.10考試題

voteplus 【問題描述】 R 君博客上有?個投票板塊&#xff0c;?家可以使?投票的?式來表達??對某些問題的贊成或反對的意見。 投票結果是公開的&#xff0c;但是 R 君會把這個結果化成?個最簡分數&#xff0c;如 1:2,4:3。 注意到同?個最簡分數可能代表了不同的總?數&am…

koa --- 跨域,解析POST參數、路由配置

目標 將開發中經常遇見的問題寫在這里方便查詢. 使用Koa創建一個簡單的服務器 const Koa require("koa"); const app new Koa(); app.listen(3000, () >{console.log("[server] Server is running at http://localhost:3000") })使用koa2-cors解決…

mysql數據庫常用操作

目前最流行的數據庫&#xff1a; oracle、mysql、sqlserver、db2、sqline --&#xff1a;單行注釋 #&#xff1a;也是單行注釋 /* 注釋內容*/&#xff1a;多行注釋 mysql -uroot -p密碼&#xff1a;登錄mysql service mysqld restart重啟mysql /etc/my.cnfmysql的配置文件 /var…

數碼相機控制點的自動定位檢校

為簡化控制場相機檢校中的人工量測控制點的繁瑣工作,提高相機檢校精度,本文提出一種方法:只需均勻量測少量控制點的像方坐標獲取相機檢校初始參數,便可通過動態模板匹配實現單影像相機檢校的控制點高精度自動定位檢校。實驗證明此方法檢校精度與人工量測檢校精度相近。 https:/…

Java 常用類

Java 常用類 字符串相關類 String類&#xff1a;構造字符串對象 常量對象&#xff1a;字符串常量對象是用雙引號括起的字符序列。 例如&#xff1a;”你好”、”12.97”、”boy”等。 字符串的字符使用Unicode字符編碼&#xff0c;一個字符占兩個字節 String類較常用構…

koa --- restful規范及其栗子

遵循Restful規范的簡單的栗子 前端代碼: <html><head><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script src"https://unpkg.com/element-ui/lib/index.js"></script><script src&qu…

軟工五:四則運算

題目要求 本次作業要求兩個人合作完成&#xff0c;駕駛員和導航員角色自定&#xff0c;鼓勵大家在工作期間角色隨時互換&#xff0c;這里會布置兩個題目&#xff0c;請各組成員根據自己的愛好任選一題。 題目一&#xff1a; 我們在剛開始上課的時候介紹過一個小學四則運算自動生…

Tomcat 配置Https

https://www.cnblogs.com/wanghaoyuhappy/p/5267702.html JDK1.8 keytool 生存證書 C:\keys\tomcat.keystore 1:證書生成 命令如下: keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -keystore C:/keys/tomcat.keytore -storepass 123456 keytool 使…

koa --- 使用koa-multer和element-ui組件上傳頭像

文件上傳 前端代碼 <script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src"https://unpkg.com/element-ui/lib/index.js"></script> <linkrel"stylesheet"href"https://unpkg.co…

PKUSC2018訓練日程(4.18~5.30)

(總計:共66題) 4.18~4.25&#xff1a;19題 4.26~5.2&#xff1a;17題 5.3~5.9: 6題 5.10~5.16: 6題 5.17~5.23: 9題 5.24~5.30: 9題 4.18 [BZOJ3786]星系探索(偽ETT) [BZOJ4337][BJOI2015]樹的同構(樹的最小表示法) [BZOJ3551][ONTAK2010]Peaks(加強版)(Kruskal重構樹,主席樹) …

筆記:less的三種使用方法

直接在瀏覽器端使用 第一步&#xff0c;引入 .less 文件&#xff08;注意要將 rel 屬性設置為“stylesheet/less”&#xff09; <link rel"stylesheet/less" type"text/css" href"styles.less" /> 第二步&#xff0c;引入Less.js文件 <…

koa --- nunjucks在Koa中的使用、中間件的配置

Nunjucks在Koa中的應用 app.js const koa require(koa); const app new koa(); const router require(./router) const nunjucks require(koa-nunjuncks-2); app.use(nunjucks({ext: html, // 指定視圖文件默認后綴path: path.join(__dirname, views), // 指定視圖目錄…

2018福大軟工實踐第六次作業

目錄 NABCD分析引用N(Need&#xff0c;需求)&#xff1a;A(Approach&#xff0c;做法)&#xff1a;B(Benefit&#xff0c;好處)&#xff1a;C(Competitors&#xff0c;競爭)&#xff1a;D(Delivery&#xff0c;交付)&#xff1a;初期中期個人貢獻分評定原則評定細則本組現場答辯…

day32—CSS多列布局學習

轉行學開發&#xff0c;代碼100天——2018-04-17 關于多列布局&#xff0c;前期已經梳理過&#xff0c;今天的培訓課程學習中再次提及&#xff0c;趁此也做個總結和檢驗。 多列布局的介紹參考&#xff1a; day08—css布局解決方案之多列布局關于多列布局的類型和方法&#xff1…