一次日志統(tǒng)計分析之旅

隨著移動互聯(lián)網(wǎng)漩怎、云計算、物聯(lián)網(wǎng)的崛起與發(fā)展嗦嗡,大數(shù)據(jù)的時代已經(jīng)來臨勋锤。當(dāng)數(shù)據(jù)量不停增長時,如何實時查詢和分析業(yè)務(wù)的狀況變的業(yè)務(wù)狀況變的越來越重要侥祭。
本文主要包含以下幾個方面:

  1. 數(shù)據(jù)采集
  2. 消息隊列
  3. 數(shù)據(jù)存儲
  4. 離線分析

當(dāng)數(shù)據(jù)產(chǎn)生時叁执,通過flume客戶端去采集數(shù)據(jù)茄厘,然后放入kafka消息隊列中,接著通過flume服務(wù)端去消費這個數(shù)據(jù)谈宛,最終把數(shù)據(jù)放入es次哈、hbase、mongodb等數(shù)據(jù)庫中吆录。


架構(gòu)

1. 數(shù)據(jù)采集

Flume是一個分布式的窑滞、高可用的日志收集系統(tǒng)。Flume-NG采用三層架構(gòu)設(shè)計:收集(source)恢筝、暫存(channel)哀卫、處理(sink)。如圖所示:


event在agent中的傳輸過程

1.1 source

source用來對接各種數(shù)據(jù)源滋恬,將收集到的數(shù)據(jù)存入channel中聊训。
常用的source類型有Avro source、Exec source恢氯、Kafka source等。
Avro source通過監(jiān)聽Avro端口接收外部客服端流事件鼓寺,在flume多層架構(gòu)中常被用來接收上層agent sink發(fā)送的event勋拟。
Kafka source用來對接分布式消息隊列kafka,作為kafka的消費者持續(xù)從kafka中拉取數(shù)據(jù)妈候。
Exec source收集標(biāo)準(zhǔn)輸出數(shù)據(jù)或者通過tail -f file的方式監(jiān)聽指定文件敢靡。但是不支持?jǐn)帱c續(xù)傳(不記錄讀取文件的位置)。

1.2 channel

channel為event中的緩沖區(qū)苦银,存儲source收集并且沒有被sink讀取的event,平衡source收集和sink讀取數(shù)據(jù)的速度幔虏,相當(dāng)于flume內(nèi)部的消息隊列纺念。
常用的channel類型有memory channel想括、file channel烟逊、kafka channel。
memory channel讀寫速度快位迂,但是存儲小访雪,flume進程掛掉時予颤,數(shù)據(jù)會丟失。
file channel將event寫入磁盤文件冬阳,存儲大蛤虐,無數(shù)據(jù)丟失風(fēng)險。
kafka channel將kafka作為channel存儲肝陪。kafka channel相對于memory channel和file channel存儲容量大驳庭,容錯能力強。在日志收集層氯窍,可以只配置source組件和kafka channel組件饲常,不需要再配置sink組件,可以減少日志收集層啟動的進程數(shù)并且有效降低服務(wù)器內(nèi)存狼讨、磁盤等資源使用率贝淤。再日志匯聚層,可以只配置kafka channel和sink政供,不需要再配置source播聪,減少日志匯聚層的進程數(shù),這樣能降低服務(wù)器的資源利用率和減少event再網(wǎng)絡(luò)之間的傳輸布隔,有效提高日志采集系統(tǒng)的性能离陶。

1.3 sink

avro sink常用來對接下一層的avro source,通過發(fā)送rpc請求將event發(fā)送到下一層的avro source衅檀。
hdfs sink用來將event寫入hdfs文件存儲招刨。
kafka sink將evnet寫入到kafka主題中。
本文采用exec source作為source哀军,channel采用file channel沉眶,sink采用kafka sink。這樣可以采集不同的數(shù)據(jù)源杉适,然后分發(fā)到不同的kafka topic中谎倔。

2. 消息隊列

kafka是一個開源的分布式消息隊列,具有高吞吐淘衙、可擴展传藏、高可用的特性。


kafka架構(gòu)圖

一個kafka集群可以有多個kafka實例彤守,由zookeeper協(xié)調(diào)管理(保存kafka元數(shù)據(jù)毯侦、動態(tài)擴展、負載均衡)具垫。一個kafka實例就是一個broker侈离。broker中有包含topic,topic相當(dāng)于一個數(shù)據(jù)庫表筝蚕,一個topic可以分為多個partition和多個replication卦碾。producer將同一類型的消息寫入同一個topic中铺坞,consumer從同一個topic消費同一類型的數(shù)據(jù)。
kafka之所以能夠?qū)崿F(xiàn)高吞吐洲胖、可擴展济榨、高可用,是因為它基于磁盤順序讀寫(比內(nèi)存讀寫性能還高)绿映,pagecache擒滑、sendfile技術(shù)(零拷貝)、多分區(qū)(一個分區(qū)代表一個線程)叉弦。

3. 數(shù)據(jù)存儲

flume服務(wù)端通過消費kafka中的topic丐一,把日志寫入到各個數(shù)據(jù)庫中。

3.1 HBase

HBase是一個分布式的淹冰、持久的库车、強一致性的存儲系統(tǒng),具有盡似最優(yōu)的寫性能和出色的讀性能樱拴。HBase和傳統(tǒng)型關(guān)系型數(shù)據(jù)庫相比柠衍,就是使用了LSM樹做為底層數(shù)據(jù)結(jié)構(gòu)。LSM樹以磁盤傳輸速率工作并能較好地擴展以處理大量的數(shù)據(jù)疹鳄,它們使用日志文件和內(nèi)存存儲來將隨機寫轉(zhuǎn)換成順序?qū)懪÷裕虼艘材鼙WC穩(wěn)定的數(shù)據(jù)插入速率。又由于讀寫?yīng)毩⒈窆虼藘煞N操作之間沒有沖突。
Hbase中有3個主要組件:客戶端庫禽最、一臺主服務(wù)器和多臺region服務(wù)器腺怯。region服務(wù)器可以根據(jù)負載的變化動態(tài)添加和移除。主服務(wù)器主要負責(zé)利用zookeeper為region服務(wù)器分配region川无。


hbase架構(gòu)圖

主服務(wù)器不負責(zé)數(shù)據(jù)服務(wù)呛占,只提供region管理和元數(shù)據(jù)的管理。region服務(wù)器提供讀寫服務(wù)懦趋。HBase主要處理兩種文件晾虑,預(yù)寫日志和實際的數(shù)據(jù)文件,兩者由HRegionServer管理仅叫。
HBase中的行鍵設(shè)計非常重要帜篇,它是用來定位具體一行的數(shù)據(jù)的,通過行鍵的查詢是最快的诫咱。但是如果按照特定序列來命名笙隙,容易造成region熱點,在某一時間段數(shù)據(jù)全往一個region中寫坎缭。一般通過加入salt或者哈希隨機化來設(shè)計行鍵竟痰。但反過來签钩,隨機寫帶來的一個壞處是會造成順序讀的性能下降。

3.2 Hive

Hive是一個建立在Hadoop架構(gòu)上的數(shù)據(jù)倉庫坏快。它能夠提供數(shù)據(jù)的精煉铅檩,查詢和分析。它可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表莽鸿,并提供sql查詢功能昧旨。
Hive可以映射hdfs或者hbase來建立外表,然后通過hql語句來查詢相應(yīng)的數(shù)據(jù)富拗。同時可以按天建立分區(qū)表臼予,減少查詢的數(shù)據(jù)量。值得注意的是啃沪,外表以及通過外表建立的分區(qū)表粘拾,在刪表時并不會刪除數(shù)據(jù)。

3.3 Elasticsearch

Elasticsearch是一款開源的创千、分布式的缰雇、restful風(fēng)格的搜索引擎。它內(nèi)部使用Lucene做索引與搜索追驴。它有如下特點:

  • 一個分布式的實時文檔存儲械哟,每個字段可以被索引與搜索
  • 一個分布式實時分析搜索引擎
  • 能勝任上百個服務(wù)器節(jié)點的擴展,并支持PB級別的結(jié)構(gòu)化或者非結(jié)構(gòu)化的數(shù)據(jù)

4. 離線分析

Spark是一款開源的分布式大數(shù)據(jù)處理通用引擎殿雪,具有高吞吐暇咆、低延時、可擴展丙曙、高容錯等特點爸业。它包括離線計算、交互式查詢亏镰、數(shù)據(jù)挖掘算法扯旷、流式計算及圖計算。
Spark包含以下幾個組件:


Spark組件

)

Apache Spark core

Apache Spark core是spark平臺的核心組件索抓,其他組件都依賴于它钧忽。它主要負責(zé):

  • 內(nèi)存管理和故障恢復(fù)
  • 在集群上安排、分布和監(jiān)控作業(yè)
  • 和存儲系統(tǒng)進行交互

Spark SQL

Spark SQL是Spark Core之上的一個組件逼肯,它引入了一個稱為SchemaRDD的新數(shù)據(jù)抽象耸黑,它為結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)提供支持(Hive等)。


Spark SQL

如果配置支持hive汉矿,當(dāng)Spark SQL進行編程或者查詢時崎坊,可以使用HiveSQL作為查詢語言。

Spark Streaming

Spark Streaming利用Spark Core的快速調(diào)度功能來執(zhí)行流式分析洲拇。它以小批量獲取數(shù)據(jù)奈揍,并對這些小批量的數(shù)據(jù)執(zhí)行RDD(彈性分布式數(shù)據(jù)集)轉(zhuǎn)換曲尸。

MLib

MLlib是Spark之上的分布式機器學(xué)習(xí)框架,因為基于分布式內(nèi)存的Spark架構(gòu)男翰。根據(jù)基準(zhǔn)另患,它是由MLlib開發(fā)人員針對交替最小二乘法(ALS)實現(xiàn)完成的。 Spark MLlib是基于Hadoop磁盤的Apache Mahout版本的9倍(在Mahout獲得了Spark接口之前)蛾绎。

GraphX

GraphX是Spark上的一個分布式圖形處理框架冒版。它提供了一個用于表達圖形計算的API逆趋,可以通過使用Pregel抽象API為用戶定義的圖形建模。它還為此抽象提供了一個優(yōu)化的運行時。

相對于Hadoop明郭,spark采用了DAG執(zhí)行引擎栏尚,支持循環(huán)數(shù)據(jù)流和內(nèi)存計算到逊,在內(nèi)存中的速度是hadoop的100倍吮便,磁盤上的速度是hadoop的10倍。
Spark實現(xiàn)了DAG的計算模型镜粤,DAG計算模型是指將一個任務(wù)按照計算規(guī)則分解為若干子任務(wù)捏题,這些子任務(wù)之間根據(jù)邏輯關(guān)系構(gòu)建有向無環(huán)圖。


Spark架構(gòu)圖.png

Spark計算操作都是基于RDD進行的肉渴。RDD具體只讀公荧、多分區(qū)、分布式的特性同规。外部的文件系統(tǒng)的文件如hbase循狰,hdfs都可以轉(zhuǎn)換為RDD。同時一個或者多個RDD可以轉(zhuǎn)換為新的RDD券勺。
RDD提供Transformation和Action兩種計算類型晤揣。Transformation的操作只有當(dāng)Action的時候才會真正的執(zhí)行操作。同時RDD可以緩存到內(nèi)存或者磁盤中朱灿,這樣可以減少網(wǎng)絡(luò)傳輸次數(shù),提高spark的計算性能钠四。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盗扒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缀去,更是在濱河造成了極大的恐慌侣灶,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缕碎,死亡現(xiàn)場離奇詭異褥影,居然都是意外死亡,警方通過查閱死者的電腦和手機咏雌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門凡怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來校焦,“玉大人,你說我怎么就攤上這事统倒≌洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵房匆,是天一觀的道長耸成。 經(jīng)常有香客問我,道長浴鸿,這世上最難降的妖魔是什么井氢? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮岳链,結(jié)果婚禮上花竞,老公的妹妹穿的比我還像新娘。我一直安慰自己宠页,他們只是感情好左胞,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著举户,像睡著了一般烤宙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俭嘁,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天躺枕,我揣著相機與錄音,去河邊找鬼供填。 笑死拐云,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的近她。 我是一名探鬼主播叉瘩,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粘捎!你這毒婦竟也來了薇缅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤攒磨,失蹤者是張志新(化名)和其女友劉穎泳桦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娩缰,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡灸撰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浮毯。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡完疫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亲轨,到底是詐尸還是另有隱情趋惨,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布惦蚊,位于F島的核電站器虾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蹦锋。R本人自食惡果不足惜兆沙,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莉掂。 院中可真熱鬧葛圃,春花似錦、人聲如沸憎妙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厘唾。三九已至褥符,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抚垃,已是汗流浹背喷楣。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鹤树,地道東北人铣焊。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像罕伯,于是被迫代替她去往敵國和親曲伊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容