通過多年信息化建設,咱們已經進入一個神奇的「大數據」時代,不管是在通信社交過程當中使用的微信、QQ、電話、短信,仍是吃喝玩樂時的用到的團購、電商、移動支付,都不斷產生海量信息數據,數據和咱們的工做生活密不可分、須臾難離。
什麼是大數據
什麼是大數據,多大算大,100G算大麼?若是是用來存儲1080P的高清電影,也就是幾部影片的容量。可是若是100G都是文本數據,好比雲智慧透視寶後端kafka裏的數據,抽取一條mobileTopic的數據以下:【107,5505323054626937,局域網,局域網,unknown,0,0,09f26f4fd5c9d757b9a3095607f8e1a27fe421c9,1468900733003】,這種數據100G能有多少條,咱們可想而知。java
數據之因此爲大,不可是由於數據量的巨大,同時各類渠道產生的數據既有IT系統生成的標準數據,還有大量多媒體類的非標準數據,數據類型多種多樣,並且大量無用數據充斥其間,給數據的真實性帶來很大影響,此外不少數據必須實時處理才最有價值。
通常數據量大(多)或者業務複雜的時候,常規技術沒法及時、高效處理如此大量的數據,這時候可使用Hadoop,它是由Apache基金會所開發的分佈式系統基礎架構,用戶能夠在不瞭解分佈式底層細節的狀況下,編寫和運行分佈式應用充分利用集羣處理大規模數據。Hadoop能夠構建在廉價的機器上,好比咱們淘汰的PC Server或者租用的雲主機均可以拿來用。
今天,雲智慧的李林同窗就爲你們介紹一下Hadoop生態圈一些經常使用的組件。
Gartner的一項研究代表,2015年,65%的分析應用程序和先進分析工具都將基於Hadoop平臺,做爲主流大數據處理技術,Hadoop具備如下特性:
方便:Hadoop運行在由通常商用機器構成的大型集羣上,或者雲計算服務上
健壯:Hadoop致力於在通常商用硬件上運行,其架構假設硬件會頻繁失效,Hadoop能夠從容地處理大多數此類故障。
可擴展:Hadoop經過增長集羣節點,能夠線性地擴展以處理更大的數據集。
目前應用Hadoop最多的領域有:
1) 搜索引擎,Doug Cutting設計Hadoop的初衷,就是爲了針對大規模的網頁快速創建索引。
2) 大數據存儲,利用Hadoop的分佈式存儲能力,例如數據備份、數據倉庫等。
3) 大數據處理,利用Hadoop的分佈式處理能力,例如數據挖掘、數據分析等。
Hadoop生態系統與基礎組件
Hadoop2.0的時候引入了HA(高可用)與YARN(資源調度),這是與1.0的最大差異。Hadoop主要由3部分組成:Mapreduce編程模型,HDFS分佈式文件存儲,與YARN。ios
上圖是Hadoop的生態系統,最下面一層是做爲數據存儲的HDFS,其餘組件都是在HDFS的基礎上組合或者使用的。HDFS具備高容錯性、適合批處理、適合大數據處理、可構建在廉價機器上等優勢,缺點是低延遲數據訪問、小文件存取、併發寫入、文件隨機修改。
Hadoop MapReduce是一個軟件框架,基於該框架可以容易地編寫應用程序,這些應用程序可以運行在由上千個商用機器組成的大集羣上,並以一種可靠的,具備容錯能力的方式並行地處理上TB級別的海量數據集。這個定義裏面有幾個關鍵詞:軟件框架、並行處理、可靠且容錯、大規模集羣、海量數據集就是MapReduce的特點。nginx
MapReduce經典代碼(wordCount)
上面這段代碼就是接收一堆文本數據,統計這些文本數據中每一個單詞出現的次數。MapReduce也是一個計算模型,當數據量很大時,好比10個G,它能夠把這10G的數據分紅10塊,分發到10個節點去執行,而後再彙總,這就是並行計算,計算速度比你一臺機器計算要快的多。
HBase
Hadoop的主要組件介紹完畢,如今看下HBase,它是一個高可靠、高性能、面向列、可伸縮的分佈式存儲系統,利用Hbase技術可在廉價PC Server上搭建大規模結構化存儲集羣。HBase 是Google Bigtable 的開源實現,與Google Bigtable 利用GFS做爲其文件存儲系統相似,HBase 利用Hadoop HDFS 做爲其文件存儲系統;Google 運行MapReduce 來處理Bigtable中的海量數據, HBase 一樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable 利用Chubby做爲協同服務, HBase 利用Zookeeper做爲對應。
有人問HBase和HDFS是啥關係,HBase是利用HDFS的存儲的,就像MySQL和磁盤, MySQL是應用,磁盤是具體存儲介質。HDFS由於自身的特性,不適合隨機查找,對更新操做不太友好,好比百度網盤就是拿HDFS構建的,它支持上傳和刪除,但不會讓用戶直接在網盤上修改某個文件的內容。
HBase的表有如下特色:
1 ) 大:一個表能夠有上億行,上百萬列。
2 ) 面向列:面向列表(簇)的存儲和權限控制,列(簇)獨立檢索。
3 ) 稀疏:對於爲空(NULL)的列,並不佔用存儲空間,所以,表能夠設計的很是稀疏。
HBase提供的訪問方式有命令行shell方式,java API(最高效和經常使用的),Thrift Gateway 支持C++,PHP,Python等多種語言。
HBase的使用場景:
需對數據進行隨機讀操做或者隨機寫操做;
大數據上高併發操做,好比每秒對PB級數據進行上千次操做;
讀寫訪問均是很是簡單的操做,好比歷史記錄,歷史訂單查詢,三大運營商的流量通話清單的查詢。算法
HBase在淘寶的應用場景
Hive
以前咱們說了MapReduce計算模型,可是隻有懂Java的才能擼代碼幹這個事,不懂Java的想用Hadoop的計算模型是否是就無法搞了呢?好比HDFS裏的海量數據,數據分析師想弄點數據出來,咋辦?因此就要用到Hive,它提供了SQL式的訪問方式供人使用。
Hive是由Facebook 開源, 最初用於解決海量結構化的日誌數據統計問題的ETL(Extraction-Transformation-Loading) 工具,Hive是構建在Hadoop上的數據倉庫平臺,設計目標是能夠用傳統SQL操做Hadoop上的數據,讓熟悉SQL編程的人員也能擁抱Hadoop(注意。是數據倉庫。不是數據庫啊。)
使用HQL做爲查詢接口
使用HDFS做爲底層存儲
使用MapReduce做爲執行層
因此說Hive就是基於Hadoop的一個數據倉庫工具,是爲簡化MapReduce編程而生的,很是適合數據倉庫的統計分析,經過解析SQL轉化成MapReduce,組成一個DAG(有向無環圖)來執行。
Flume
Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、 聚合和傳輸的系統,Flume支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。
當前Flume有兩個版本Flume 0.9X版本的統稱Flume-og,Flume1.X版本的統稱Flume-ng,因爲Flume-ng通過重大重構,與Flume-og有很大不一樣,使用時請注意區分。shell
Flume就是一個數據管道,支持不少源(source),sink(目標),和透視寶的suro很像,好比拉取nginx日誌能夠拿這個工具簡單一配就可用。固然每臺nginx服務器上都要配置並啓動一個flume.
下面給你們看看配置文件(把kafka的數據寫入hdfs的配置),配置很簡單.徹底免去了本身寫一個kafka的consumer再調用hdfs的API寫數據的工做量.數據庫
YARN
YARN是Hadoop 2.0中的資源管理系統,它的基本設計思想是將MRv1中的JobTracker拆分紅了兩個獨立的服務:一個全局的資源調度器ResourceManager和每一個應用程序特有的應用程序管理器ApplicationMaster,該調度器是一個 "純調度器",再也不參與任何與具體應用程序邏輯相關的工做,而僅根據各個應用程序的資源需求進行分配,資源分配的單位用一個資源抽象概念 "Container" 來表示,Container 封裝了內存和 CPU。此外,調度器是一個可插拔的組件,用戶可根據本身的需求設計新的調度器,YARN 自身提供了 Fair Scheduler 和 Capacity Scheduler。
應用程序管理器負責管理整個系統中全部應用程序,包括應用程序的提交、與調度器協商資源以啓動 ApplicationMaster、監控 ApplicationMaster 運行狀態並在失敗時從新啓動等。
Ambari
Ambari是一個集羣的安裝和管理工具,雲智慧以前用的是Apache的Hadoop,運維同窗用源碼包安裝,一個個配置文件去改,再分發到各個節點,中間哪一步搞錯了,整個集羣就啓動不起來。因此有幾個廠商提供Hadoop的這種安裝和管理平臺,主要是CDH和HDP,國內的不少人都用CDH的,它是Cloudera公司的,若是用它的管理界面安裝,集羣節點超過必定數量就要收費了。
Ambari是Apache的頂級開源項目,能夠無償使用,如今用的人也不少。Ambari使用Ganglia收集度量指標,用Nagios支持系統報警,當須要引發管理員的關注時(好比,節點停機或磁盤剩餘空間不足等問題),系統將向其發送郵件。
ZooKeeper
隨着計算節點的增多,集羣成員須要彼此同步並瞭解去哪裏訪問服務和如何配置,ZooKeeper正是爲此而生的。ZooKeeper 顧名思義就是動物園管理員,它是用來管大象(Hadoop) 、蜜蜂(Hive) 和 小豬(Pig) 的管理員, Apache Hbase和 Apache Solr 以及LinkedIn sensei等項目中都採用到了 Zookeeper。ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,以Fast Paxos算法爲基礎實現同步服務,配置維護和命名服務等分佈式應用。
其餘組件
以上介紹的都是Hadoop用來計算和查詢的比較經常使用和主流的組件,上面那副生態圖中的其餘幾個組件簡單瞭解一下就好:
Pig是一種編程語言,它簡化了Hadoop常見的工做任務,Pig爲大型數據集處理提供了更高層次的抽象,與MapReduce相比,Pig提供了更豐富的數據結構,通常都是多值和嵌套的數據結構。
Mahout是Hadoop提供作機器學習用的,支持的算法也比較少,可是一些經常使用的 k-means 聚類、分類仍是有的,他是用MapReduce作的,可是MapReduce不太擅長這個東西,因此Mahout的做者也轉投spark ML陣營了。
Sqoop是數據庫ETL工具,用於將關係型數據庫的數據導入到 Hadoop 及其相關的系統中,如 Hive和HBase。Sqoop 的核心設計思想是利用 MapReduce 加快數據傳輸速度,也就是說 Sqoop 的導入和導出功能是經過 MapReduce 做業實現的,因此它是一種批處理方式進行數據傳輸,難以實現實時數據的導入和導出。好比雲智慧監控寶之前的業務數據都存在MySQL,隨着數據量愈來愈大,要把數據導到Hbase,就能夠拿Sqoop直接操做。
本文所介紹的東西都是用於離線計算的,而以前發佈的《面臨大數據挑戰 透視寶如何使用Druid實現數據聚合》則是關於實時計算的框架Druid的。大數據經常使用的流計算框架主要有Storm,Spark Streaming,Flink,Flink雖然是2014年加入Hadoop的,但至今在生產環境上用的人還很少,彷佛你們都持觀望態度。
說一下流計算(Druid,Spark Streaming)和批處理(MapReduce,Hive)有啥區別,好比電商網站的個性化廣告投放,當咱們訪問了亞馬遜搜索筆記本電腦以後,他就會給你推薦不少筆記本電腦連接,你的請求和興趣愛好被亞馬遜服務器實時接收,流計算分析以後當時就會推薦給你可能會購買的東西。若是這個東西拿批處理去作,服務端收集完了,過半個小時纔算出你可能要買電腦,這時候再給你推薦電腦明顯就不合適了,由於這時候你可能在搜索電炒鍋……編程
最後再說一下大數據的工做流,好比有兩個MapReduce的任務是有依賴的,必須第一個完成了才能執行第二個,這就須要一個調度工具來調度。MapReduce也提供調度的API,可是代碼要寫不少,上面的代碼截圖只是一部分,這個依賴我寫了大概150行。因此這時候出現了工做流,用工做流來管理咱們的各個job,我目前知道的有oozie和azkaban,oozie的配置比較靈活,推薦你們使用。後端