1. 程式人生 > >每個人心中都有一個Hadoop生態圈

每個人心中都有一個Hadoop生態圈

說到現在什麼技術最火,想必你一定會想到一個就是Hadoop,你可能經常聽說,現在的人們生活在大資料時代,而Hadoop或多或少已經成了大資料的一個代名詞。

從狹義上來說Hadoop是Apache旗下的一個開源軟體平臺,它不是像CRM\ERP這樣的特定功能的軟體,而是一個框架,它提供這樣一種功能——利用伺服器叢集,根據使用者自定義功能,對海量資料進行分散式處理,這是Hadoop本身的基本概念。

從廣義上來講,Hadoop已經指向一個更廣泛的概念,即接下來要說的主題——HADOOP生態圈(Hadoop Ecosystem)。


從圖上可以看出,hadoop生態圈中涉及很多技術,這些技術都是為了解決大資料處理過程中不斷出現的新問題而產生的,那我們不妨從大資料的基本問題出發來認識一下這些看起來高大尚的產品技術。

      大資料,從這個詞本身就給出了它要解決的首要問題,龐大的資料、海量的資料,有了資料,首先要解決的一個問題就是儲存,HDFS就這樣出世了

HDFS:官方解釋一下就是hadoop分散式檔案系統,簡單來說就是將檔案分佈的儲存在多臺機器上(也就是所謂的叢集),再通過抽象,把這些機器看成一個邏輯整體,讓外界(客戶端)操作起來和單機訪問沒什麼兩樣。(說起來簡單,實現起來就涉及很多細節的技術,如檔案分塊,元資料管理等等,以後有機會再專題分享)

解決了資料儲存,接下來理所當然就是資料處理了,檔案已經分佈儲存,處理資料如果是單機執行顯然不能滿足要求,於是也就有了MapReduce(MR)

MapReduce:

分散式運算程式開發框架,也就是通過高併發模式提高資料處理,如何進行,理念就是map階段通過使用者自定義程式並行對分佈在叢集中的檔案實現<key,value>鍵值對的輸出,再通過框架將map生成的同key的不同value的資料進行合併(官方將此過程叫shuffle),reduce階段使用者自定義reduce程式通過接收合併後的<key,values>(注意此時同key的value已經合併成一個集合了)進行業務邏輯處理,根據業務邏輯切分資料,可設定多個map與多個reduce同時跑,從而實現分散式運算處理

有了分散式運算,自然就能讓人聯想到接下來的一個問題,執行資源如何分配,如在哪些機器執行哪些map、reduce任務,任務執行狀態如何監控,失敗的任務處理等等,答案是:YARN

YARNYet Another Resource Negotiator,它是hadoop2.X版本以上一種新的資源管理器,它的核心作用是負責執行程式所需資源(如運算程式包,記憶體、IO、CPU等)的分配與回收,與應用程式本身的運算邏輯無關,因此可以說YARN不只是MR程式的資源管理器,而是一個通用的資源管理器

如果你以前從未了解過Hadoop,恭喜你到這裡你已經對Hadoop有了初步認識。

HADOOP:(包含HDFS、MapReduce、YARN)  元老級大資料處理技術框架,擅長離線資料分析

隨著hadoop的興起,越來越多的組織開始對hadoop技術的不足進行優化補充,對於一些特定的需求進行定製開發,於是更多的優秀的技術橫空出世。

HIVE:基於大資料技術(檔案系統+運算框架)的SQL資料倉庫工具,即讓使用者可以以SQL方式實現MR程式,HIVE負責將SQL翻譯為底層MR程式,減小寫MR程式的工作量(當你熟悉了MR程式編寫你就會發現,其實是一件很麻煩的事情)。

Pig:一種資料流語言和執行環境,用於檢索非常大的資料集,與HIVE,Pig提供了一種近似指令碼的方式實現MR程式,簡化Hadoop的使用。

HBase:作為面向列的資料庫執行在HDFS之上,HDFS缺乏隨即讀寫操作,HBase正是為此而出現。HBase以Google BigTable為藍本,以鍵值對的形式儲存。

Sqoop: 資料匯入匯出工具

Flink:流式資料和批量資料的分散式處理引擎

SparkStreaming:大規模流式資料處理

Storm:流式處理框架、實時運算

Scribe: Facebook開源的日誌收集系統
Flume: 日誌資料採集框架

Mahout: 基於mapreduce/spark/flink等分散式運算框架的機器學習演算法庫,協同過濾演算法
Oozie:工作流排程框架

Avro: Hadoop中的子專案,基於二進位制資料傳輸高效能的中介軟體,即序列化工具

Spark:專為大規模資料處理而設計的快速通用的計算引擎

Zookeeper:分散式協調服務,本身與是分散式,管理(儲存,讀取)使用者程式提交的資料;併為使用者程式提供資料節點監聽服務。

這就是筆者目前所認識的hadoop生態圈,也就是一個不同場景,不同需求情況下處理大資料的”五花八門“的大資料處理“工具”的集合,目的是讓大資料處理更加簡便、更加高效,工具如此之多,全部精通不太現實,每個人心中都應該有自己的取捨,但對於基本的概念還是都應該有所瞭解,正所謂見多識廣,相信隨著時間的推移,更多更優秀的框架“工具”將會出現,所以請時刻保持學習的態度,這樣你將來的大資料之路才會越走越遠。