一: Flume是什么:
1. 有Cloudera公司開源
2. 分布式政敢,可靠,高可用的海量日志采集系統(tǒng);
3. 數(shù)據(jù)源可定制恢氯,可擴(kuò)展;
4. 數(shù)據(jù)存儲(chǔ)系統(tǒng)可定制,可擴(kuò)展;
5. 中間件嚼吞,屏蔽了數(shù)據(jù)源和數(shù)據(jù)存儲(chǔ)之間的耦合。
二: 特點(diǎn):
1. 可靠性
可以根據(jù)對(duì)可靠性的要求設(shè)置不同的數(shù)據(jù)存儲(chǔ)來保證數(shù)據(jù)的可靠性蹬碧,比如可以保存在內(nèi)容舱禽,保存到磁盤;
2. 可擴(kuò)展性
各組件數(shù)據(jù)可擴(kuò)展恩沽, source, channel, sink都可擴(kuò)展
3. 高性能
高吞吐率誊稚,可以滿足海量數(shù)據(jù)的收集需求
4.可管理性
可動(dòng)態(tài)的增加和刪除節(jié)點(diǎn)
5.活躍的社區(qū)
三: Flume版本介紹
1. Flume OG: Original Generation
o.9.x或cdh3以及更早版本
主要由agent, collector, master等組件構(gòu)成。
2. Flume NG: NEW Generation
1.x或cdh4以后的版本
主要有Agent,Client等組件構(gòu)成
NG版本的退出主要是為了簡(jiǎn)化代碼,簡(jiǎn)化架構(gòu)里伯;
四: Flume NG基本架構(gòu)
五: Flume NG核心概念
1.a(chǎn)gent: agent本身是一個(gè)java進(jìn)程城瞎,運(yùn)行在日志收集節(jié)點(diǎn)—所謂日志收集節(jié)點(diǎn)就是服務(wù)器節(jié)點(diǎn).
source—->channel—–>sink,類似生產(chǎn)者、倉庫疾瓮、消費(fèi)者的架構(gòu)
2.source:source組件是專門用來收集數(shù)據(jù)的脖镀,可以處理各種類型、各種格式的日志數(shù)據(jù),
包括avro狼电、thrift蜒灰、exec、jms肩碟、spooling directory强窖、netcat、sequence generator削祈、syslog翅溺、http、legacy髓抑、自定義未巫。
3.channel:source組件把數(shù)據(jù)收集來以后,臨時(shí)存放在channel中;
即channel組件在agent中是專門用來存放臨時(shí)數(shù)據(jù)的——對(duì)采集到的數(shù)據(jù)進(jìn)行簡(jiǎn)單的緩存启昧,可以存放在memory、jdbc劈伴、file等等密末。
4.sink: sink組件是用于把數(shù)據(jù)發(fā)送到目的地的組件,目的地包括hdfs跛璧、logger严里、avro、thrift追城、ipc刹碾、file、null座柱、hbase迷帜、solr、自定義色洞。
六: Flume 運(yùn)行機(jī)制
flume的核心就是一個(gè)agent戏锹,這個(gè)agent對(duì)外有兩個(gè)進(jìn)行交互的地方,一個(gè)是接受數(shù)據(jù)的輸入——source火诸,一個(gè)是數(shù)據(jù)的輸出sink锦针;
sink負(fù)責(zé)將數(shù)據(jù)發(fā)送到外部指定的目的地。source接收到數(shù)據(jù)之后,將數(shù)據(jù)發(fā)送給channel奈搜;
chanel作為一個(gè)數(shù)據(jù)緩沖區(qū)會(huì)臨時(shí)存放這些數(shù)據(jù)悉盆,隨后sink會(huì)將channel中的數(shù)據(jù)發(fā)送到指定的地方—-例如HDFS等;
注意:只有在sink將channel中的數(shù)據(jù)成功發(fā)送出去之后馋吗,channel才會(huì)將臨時(shí)數(shù)據(jù)進(jìn)行刪除焕盟,這種機(jī)制保證了數(shù)據(jù)傳輸?shù)目煽啃耘c安全性。
七: Event
flume的核心是把數(shù)據(jù)從數(shù)據(jù)源(source)收集過來耗美,在將收集到的數(shù)據(jù)送到指定的目的地(sink)京髓。
為了保證輸送的過程一定成功,在送到目的地(sink)之前商架,會(huì)先緩存數(shù)據(jù)(channel),待數(shù)據(jù)真正到達(dá)目的地(sink)后堰怨,flume在刪除自己緩存的數(shù)據(jù)。
在整個(gè)數(shù)據(jù)的傳輸?shù)倪^程中蛇摸,流動(dòng)的是event备图,即事務(wù)保證是在event級(jí)別進(jìn)行的。那么什么是event呢赶袄?—–event將傳輸?shù)臄?shù)據(jù)進(jìn)行封裝揽涮,是flume傳輸數(shù)據(jù)的基本單位,如果是文本文件饿肺,通常是一行記錄蒋困,event也是事務(wù)的基本單位。
event從source敬辣,流向channel雪标,再到sink,本身為一個(gè)字節(jié)數(shù)組溉跃,并可攜帶headers(頭信息)信息村刨。event代表著一個(gè)數(shù)據(jù)的最小完整單元,從外部數(shù)據(jù)源來撰茎,向外部的目的地去嵌牺。 為了方便大家理解,給出一張event的數(shù)據(jù)流向圖:
八: Client
Client是一個(gè)將原始log包裝成events并且發(fā)送他們到一個(gè)或者多個(gè)agent.
其目的是從解耦龄糊, 但不是必須的逆粹;
九: Agent
一個(gè)Agent包含Source,Channel,Sink和其他組件;
它利用這些組件將event從一個(gè)節(jié)點(diǎn)傳輸?shù)搅硪粋€(gè)節(jié)點(diǎn);
agent是flume流的基礎(chǔ)部分;
十: Agent->Source, 概述
Sources負(fù)責(zé)接收event或通過特殊機(jī)制產(chǎn)生event,并將events批量的放到一個(gè)或者多個(gè)Channel
包含event驅(qū)動(dòng)和輪詢2種類型
不同類型的Sources:
與系統(tǒng)集成的Sources:
Syslog:
Netcat:指定的網(wǎng)絡(luò)端口炫惩,即只要應(yīng)用程序向這個(gè)端口里面寫數(shù)據(jù)枯饿,這個(gè)source組件就可以獲取到信息
Exec: 監(jiān)聽一個(gè)指定的命令,獲取一條命令的結(jié)果作為它的數(shù)據(jù)源
TailDir: 監(jiān)聽文件內(nèi)容诡必, 一旦新寫入一行新數(shù)據(jù)奢方,則讀取之搔扁; 支持?jǐn)帱c(diǎn)續(xù)讀, 定期將最新讀取數(shù)據(jù)的偏移量寫入json文件蟋字, 根據(jù)文件修改時(shí)間覺得讀取優(yōu)先級(jí)稿蹲, 最新的文件優(yōu)先讀取鹊奖;目前只支持文本文件苛聘;
Spooling Directory Source:監(jiān)聽一個(gè)指定的目錄,即只要應(yīng)用程序向這個(gè)指定的目錄中添加新的文件忠聚,source組件就可以獲取到該信息设哗,并解析該文件的內(nèi)容,然后寫入到channle两蟀。寫入完成后网梢,標(biāo)記該文件已完成或者刪除該文件。
Avro, Thrift: 監(jiān)聽一個(gè)指定的Avro 端口赂毯,通過Avro 端口可以獲取到Avro client發(fā)送過來的文件 战虏。
即只要應(yīng)用程序通過Avro 端口發(fā)送文件,source組件就可以獲取到該文件中的內(nèi)容党涕。
(注:Avro和Thrift都是一些序列化的網(wǎng)絡(luò)端口–通過這些網(wǎng)絡(luò)端口可以接受或者發(fā)送信息烦感,
Avro可以發(fā)送一個(gè)給定的文件給Flume,Avro 源使用AVRO RPC機(jī)制)
Sources 必須要和一個(gè)channel關(guān)聯(lián).
十一: Agent->Channel
Channel位于Source和Sink之間膛堤,用于緩存event;
當(dāng)Source接收到數(shù)據(jù)之后手趣,將數(shù)據(jù)發(fā)送給Channel,Chanel作為一個(gè)數(shù)據(jù)緩沖區(qū)會(huì)臨時(shí)存放這些數(shù)據(jù)肥荔,
隨后sink會(huì)將Channel中的數(shù)據(jù)發(fā)送到指定的地方—-例如HDFS等回懦,
注意:只有在sink將Channel中的數(shù)據(jù)成功發(fā)送出去之后,Channel才會(huì)將臨時(shí)數(shù)據(jù)進(jìn)行刪除次企,這種機(jī)制保證了數(shù)據(jù)傳輸?shù)目煽啃耘c安全性
不同的Channel提供的持久化水平也是不一樣的:
Memory Channel:; volatile
File Channel: 基于WAL(預(yù)寫式日志)實(shí)現(xiàn)
JDBC Channel: 基于Database實(shí)現(xiàn)
十二: Agent->Sink
Sink負(fù)責(zé)將event傳輸?shù)阶罱K目的地,成功后將event從Channel移除.
不同類型的Sink:
存儲(chǔ)event到最終目的終端Sink: 比如:HDFS,HBase
自動(dòng)消耗Sink: Null Sink
用于Agent間通信: Avro
十三: 數(shù)據(jù)庫全量和增量導(dǎo)入系統(tǒng)
全量導(dǎo)入:
Sqoop
增量導(dǎo)入:
Canal(https://github.com/alibaba/canal)
DataBus(https://github.com/linkedin/databus)
十四: Sqoop: SQL-to-Hadoop
連接傳統(tǒng)關(guān)系型數(shù)據(jù)庫和Hadoop的橋梁
把關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入到Hadoop(Hdfs, Hbase, Hive)中;
利用MapReduce加快數(shù)據(jù)傳輸速度潜圃;
批處理方式進(jìn)行數(shù)據(jù)傳輸缸棵;
優(yōu)勢(shì):
1. 高效,可控地利用資源
任務(wù)并行度谭期,超時(shí)時(shí)間等堵第;
2. 數(shù)據(jù)類型映射與轉(zhuǎn)換
可自動(dòng)進(jìn)行,用戶也可以自定義
3.支持多種數(shù)據(jù)庫
Mysql, Oracle, PostgreSQL