1. 程式人生 > >Hadoop學習(一)初識hadoop

Hadoop學習(一)初識hadoop

前段時間讀完了谷歌的三大論文,現在開始正式學習hadoop,今天就先整理一下hadoop的一些基本要點。

一.從起源開始聊起

hadoop的起源也就是谷歌著名的三大論文,或者可以說是谷歌三大論文的開源實現。Hadoop的核心元件有三個:HDFS,Hadoop MapReduce,HBase,分別是谷歌的GFS,Google MapReduce和BigTable的開源實現。

另外,有趣的是,Hadoop名字不是一個縮寫,而是一個生造出來的詞。是Hadoop之父Doug Cutting兒子毛絨玩具象命名的。

二.Hadoop的概念

Hadoop在官方上的解釋是:hadoop是一個分散式系統基礎架構,由apache基金會開發,使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集的威力高速運算和儲存。

所以說,hadoop主要解決的是海量資料的儲存和計算的問題。可以用於搭建大型資料倉庫,PB級資料的儲存,處理,分析,統計等業務。

hadoop可以分為狹義和廣義兩種:

1、  狹義的Hadoop只是Hadoop本身 (HDFS+MapReduce)。

2、  廣義的Hadoop指的是Hadoop生態系統,Hadoop生態系統是一個很龐大的概念,hadoop是其中最重要最基礎的一個部分:生態系統的每一個子系統只解決某一個特定的問題域,不搞統一型的一個全能系統,而是小而精的多個小系統。

三.Hadoop生態系統

既然上面聊到了Hadoop的生態系統,就在這裡先簡單介紹一下,Hadoop的生態系統中有些什麼

這裡附上一張圖

可以看出來,Hadoop的生態系統是非常龐大的,下面對生態系統中的幾個主要部件作下簡要介紹

  • HDFS Hadoop的分散式檔案系統。是Hadoop體系中資料儲存管理的基礎。它是一個高度容錯的系統,能檢測和應對硬體故障,用於在低成本的通用硬體上執行。HDFS簡化了檔案的一致性模型,通過流式資料訪問,提供高吞吐量應用程式資料訪問功能,適合帶有大型資料集的應用程式。
  • MapReduce(分散式計算框架) MapReduce是一種計算模型,用以進行大資料量的計算。其中Map對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。MapReduce這樣的功能劃分,非常適合在大量計算機組成的分散式並行環境裡進行資料處理。
  • Hive(基於Hadoop的資料倉庫)Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉化為MapReduce任務在Hadoop上執行。通常用於離線分析。
  • Hbase(分散式列存資料庫) HBase是一個針對結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫。和傳統關係資料庫不同,HBase採用了BigTable的資料模型:增強的稀疏排序對映表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模資料的隨機、實時讀寫訪問,同時,HBase中儲存的資料可以使用MapReduce來處理,它將資料儲存和平行計算完美地結合在一起。
  • Zookeeper(分散式協作服務) 解決分散式環境下的資料管理問題:統一命名,狀態同步,叢集管理,配置同步等。
  • Sqoop(資料同步工具) Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統資料庫和Hadoop之前傳輸資料。資料的匯入和匯出本質上是Mapreduce程式,充分利用了MR的並行化和容錯性。
  • Pig(基於Hadoop的資料流系統) 由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)資料分析工具。定義了一種資料流語言—Pig Latin,將指令碼轉換為MapReduce任務在Hadoop上執行。通常用於進行離線分析。
  • Mahout(資料探勘演算法庫) Mahout的主要目標是建立一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立智慧應用程式。Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的資料探勘方法。除了演算法,Mahout還包含資料的輸入/輸出工具、與其他儲存系統(如資料庫、MongoDB 或Cassandra)整合等資料探勘支援架構。
  • Flume(日誌收集工具) Cloudera開源的日誌收集系統,具有分散式、高可靠、高容錯、易於定製和擴充套件的特點。它將資料從產生、傳輸、處理並最終寫入目標的路徑的過程抽象為資料流,在具體的資料流中,資料來源支援在Flume中定製資料傳送方,從而支援收集各種不同協議資料。同時,Flume資料流提供對日誌資料進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日誌寫往各種資料目標(可定製)的能力。總的來說,Flume是一個可擴充套件、適合複雜環境的海量日誌收集系統。
  • Oozie作業流排程引擎 Oozie是一個基於工作流引擎的伺服器,可以在上面執行Hadoop的Map Reduce和Pig任務。它其實就是一個執行在Java Servlet容器(比如Tomcat)中的Javas Web應用。

Hadoop生態系統的特點

  • 開源,社群活躍
  • 囊括了大資料處理的方方面面
  • 較為成熟的生態圈