初識Hadoop(會飛的大象)

SQL on Hadoop
1)Hive
2)Prestore
3)Impala 基於內存
4)Phoneix(基於HBase)
5)Spark SQL
1.Hadoop是什麼?
從Hadoop權威指南可以看出,Hadoop是用於對可擴展的網絡數據的存儲和分析。
Hadoop是一個開發和運行處理大規模數據的軟件平臺,是Appach的一個用java語言實現開源軟件框架,實現在大量計算機組成的集羣中對海量數據進行分佈式計算.
Hadoop框架中最核心設計就是:HDFS和MapReduce.HDFS提供了海量數據的存儲,MapReduce提供了對數據的計算.
這裏寫圖片描述
2.Hadoop來源與3大組件
google三大論文 Apache
GFS -> HDFS (分佈式源數據存儲,每個數據都有副本數據)
MapReduce - > MapReduce (分佈式計算)
分而治之,將大數據集分爲小數據集,每個數據集,進行邏輯業務處理(map),然後合併統計數據結果(Reduce)
BigTable -> HBase(處理後數據結果存儲)

YARN(分佈式資源管理框架) 從Hadoop2.X開始。
管理整個集羣的資源(內存,cpu),分配調度集羣資源。
Common(工具,基礎,爲HDFS,MapReduce,YARN服務)
3.HDFS 系統架構
這裏寫圖片描述
HDFS採用master/slave(主從)架構。一個HDFS集羣是由一個Namenode和一定數目的Datanodes組成。Namenode是一箇中心服務器,負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。集羣中的Datanode一般是一個節點一個,負責管理它所在節點上的存儲。HDFS暴露了文件系統的名字空間,用戶能夠以文件的形式在上面存儲數據。從內部看,一個文件其實被分成一個或多個數據塊,這些塊存儲在一組Datanode上。Namenode執行文件系統的名字空間操作,比如打開、關閉、重命名文件或目錄。它也負責確定數據塊到具體Datanode節點的映射。Datanode負責處理文件系統客戶端的讀寫請求。Namenode的統一調度下進行數據塊的創建、刪除和複製。
參考:
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html#%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%90%8D%E5%AD%97%E7%A9%BA%E9%97%B4+%28namespace%29
HDFS被設計成支持大文件,適用HDFS的是那些需要處理大規模的數據集的應用。這些應用都是隻寫入數據一次,但卻讀取一次或多次,並且讀取速度應能滿足流式讀取的需要。HDFS支持文件的“一次寫入多次讀取”語義。一個典型的數據塊大小是64MB。因而,HDFS中的文件總是按照64M被切分成不同的塊,每個塊儘可能地存儲於不同的Datanode中。
這裏寫圖片描述
副本的存放是HDFS可靠性和性能的關鍵。通過一個機架感知的過程,Namenode可以確定每個Datanode所屬的機架id。一個簡單但沒有優化的策略就是將副本存放在不同的機架上。這樣可以有效防止當整個機架失效時數據的丟失,並且允許讀數據的時候充分利用多個機架的帶寬。這種策略設置可以將副本均勻分佈在集羣中,有利於當組件失效情況下的負載均衡。但是,因爲這種策略的一個寫操作需要傳輸數據塊到多個機架,這增加了寫的代價。
在大多數情況下,副本系數(個數)是3,HDFS的存放策略是將一個副本存放在本地機架的節點上,一個副本放在同一機架的另一個節點上,最後一個副本放在不同機架的節點上。這種策略減少了機架間的數據傳輸,這就提高了寫操作的效率。機架的錯誤遠遠比節點的錯誤少,所以這個策略不會影響到數據的可靠性和可用性。於此同時,因爲數據塊只放在兩個(不是三個)不同的機架上,所以此策略減少了讀取數據時需要的網絡傳輸總帶寬。在這種策略下,副本並不是均勻分佈在不同的機架上。三分之一的副本在一個節點上,三分之二的副本在一個機架上,其他副本均勻分佈在剩下的機架中,這一策略在不損害數據可靠性和讀取性能的情況下改進了寫的性能。
Secondary NameNode:
NmaeNode放在內存中,主要提高速度。
在本地磁盤:
fsimage:鏡像文件
edites:編輯日誌
內存中的NmaeNode內容=鏡像文件+編輯日誌,當內存中的NameNode崩掉時,Secondary NameNode將fsimage和edites進行合併。
4.YARN架構
這裏寫圖片描述
YARN的引入,大大提高了集羣的資源利用率,並降低了集羣管理成本。YARN允許多個應用程序運行在一個集羣中,並將資源按需分配給它們,這大大提高了資源利用率,其次,YARN允許各類短作業和長服務混合部署在一個集羣中,並提供了容錯、資源隔離及負載均衡等方面的支持,這大大簡化了作業和服務的部署和管理成本。
YARN總體上採用master/slave架構,ResourceManager負責對各個NodeManager上的資源進行統一管理和調度。當用戶提交一個應用程序時,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負責向ResourceManager申請資源,並要求NodeManger啓動可以佔用一定資源的資源容器Container。執行應用程序時,ApplicationMaster 監視容器直到完成。當應用程序完成時,ApplicationMaster 從 ResourceManager 註銷其容器,執行週期就完成了。由於不同的ApplicationMaster被分佈到不同的節點上,並通過一定的隔離機制進行了資源隔離,因此它們之間不會相互影響。
5.離線計算框架MapReduce
這裏寫圖片描述
舉例來說,統計一系列文檔中的詞頻。文檔數量規模很大,有1000萬個文檔,英文單詞的總數可能只有3000(常用的)。那麼input M=10000000,output N=3000。於是,我們搞了10000個PC做Mapper,100個PC做Reducer。每個Mapper做1000個文檔的詞頻統計,統計之後把凡是和同一個word相關的統計中間結果傳給同一個Reducer做彙總。比如某個Reducer負責詞表中前30個詞的詞頻統計,遍歷10000個PC,這10000個Mapper PC把各自處理後和詞表中前30個詞彙相關的中間結果都傳給這個Reducer做最終的處理分析。
參考:https://www.zhihu.com/question/23345991/answer/53996060
6.MapReduce on YARN
這裏寫圖片描述
1)用戶向YARN中提交應用程序/作業,其中包括ApplicaitonMaster程序、啓動ApplicationMaster的命令、用戶程序等;
2)ResourceManager爲作業分配第一個Container,並與對應的NodeManager通信,要求它在這個Containter中啓動該作業的ApplicationMaster;
3)ApplicationMaster首先向ResourceManager註冊,這樣用戶可以直接通過ResourceManager查詢作業的運行狀態;然後它將爲各個任務申請資源並監控任務的運行狀態,直到運行結束。即重複步驟4-7;
4)ApplicationMaster採用輪詢的方式通過RPC請求向ResourceManager申請和領取資源;
5)一旦ApplicationMaster申請到資源後,便與對應的NodeManager通信,要求它啓動任務;
6)NodeManager啓動任務;
7)各個任務通過RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicaitonMaster隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啓動任務;
在作業運行過程中,用戶可隨時通過RPC向ApplicationMaster查詢作業當前運行狀態;
8)作業完成後,ApplicationMaster向ResourceManager註銷並關閉自己;
7.Hadoop生態系統
這裏寫圖片描述
Sqoop(數據同步工具)
Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop之前傳輸數據。
數據的導入和導出本質上是Mapreduce程序,充分利用了MR的並行化和容錯性。
Flume(日誌收集工具)
Cloudera開源的日誌收集系統,具有分佈式、高可靠、高容錯、易於定製和擴展的特點。
它將數據從產生、傳輸、處理並最終寫入目標的路徑的過程抽象爲數據流,在具體的數據流中,數據源支持在Flume中定製數據發送方,從而支持收集各種不同協議數據。同時,Flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日誌寫往各種數據目標(可定製)的能力。總的來說,Flume是一個可擴展、適合複雜環境的海量日誌收集系統。
**Hive(基於Hadoop的數據倉庫)**Hive網址是:http://hive.apache.org/
由facebook開源,最初用於解決海量結構化的日誌數據統計問題。
Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉化爲MapReduce任務在Hadoop上執行。通常用於離線分析。
披着SQL外衣的MapReduce。Hive是爲方便用戶使用MapReduce而在外面包了一層SQL,由於Hive採用了SQL,它的問題域比MapReduce更窄,因爲很多問題,SQL表達不出來,比如一些數據挖掘算法,推薦算法、圖像識別算法等,這些仍只能通過編寫MapReduce完成。
oozie
在Hadoop中執行的任務有時候需要把多個Map/Reduce作業連接到一起,這樣才能夠達到目的。[1]在Hadoop生態圈中,有一種相對比較新的組件叫做Oozie[2],它讓我們可以把多個Map/Reduce作業組合到一個邏輯工作單元中,從而完成更大型的任務。
oozie是基於hadoop的調度器,以xml的形式寫調度流程,可以調度mr,pig,hive,shell,jar等等。
主要的功能有
Workflow: 順序執行流程節點,支持fork(分支多個節點),join(合併多個節點爲一個)
Coordinator,定時觸發workflow
Bundle Job,綁定多個coordinator
Hbase(分佈式列存數據庫)
源自Google的Bigtable論文,發表於2006年11月,HBase是Google Bigtable克隆版
HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。和傳統關係數據庫不同,HBase採用了BigTable的數據模型:增強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可以使用MapReduce來處理,它將數據存儲和並行計算完美地結合在一起。
數據模型:Schema–>Table–>Column Family–>Column–>RowKey–>TimeStamp–>Value
Pig:
披着腳本語言外衣的MapReduce,爲了突破Hive SQL表達能力的限制,採用了一種更具有表達能力的腳本語言PIG。將腳本轉換爲MapReduce任務在Hadoop上執行。
Spark:
爲了提高MapReduce的計算效率,伯克利開發了spark,spark可看做基於內存的MapReduce實現,此外,伯克利還在Spark基礎上包了一層SQL,產生了一個新的類似Hive的系統Shark
Zookeeper(分佈式協作服務)
源自Google的Chubby論文,發表於2006年11月,Zookeeper是Chubby克隆版
解決分佈式環境下的數據管理問題:統一命名,狀態同步,集羣管理,配置同步等。
cloudera manager
核心是管理服務器,該服務器承載管理控制檯的Web服務器和應用程序邏輯,並負責安裝軟件,配置,啓動和停止服務,以及管理上的服務運行羣集。
cloudera manager有四大功能:
(1)管理:對集羣進行管理,如添加、刪除節點等操作。
(2)監控:監控集羣的健康情況,對設置的各種指標和系統運行情況進行全面監控。
(3)診斷:對集羣出現的問題進行診斷,對出現的問題給出建議解決方案。
(4)集成:對hadoop的多組件進行整合。

Hue
是一個可快速開發和調試Hadoop生態系統各種應用的一個基於瀏覽器的圖形化用戶接口。
Hue功能:
1,訪問HDFS和文件瀏覽
2,通過web調試和開發hive以及數據結果展示
3,查詢solr和結果展示,報表生成
4,通過web調試和開發impala交互式SQL Query
5,spark調試和開發
6,Pig開發和調試
7,oozie任務的開發,監控,和工作流協調調度
8,Hbase數據查詢和修改,數據展示
9,Hive的元數據(metastore)查詢
10,MapReduce任務進度查看,日誌追蹤
11,創建和提交MapReduce,Streaming,Java job任務
12,Sqoop2的開發和調試
13,Zookeeper的瀏覽和編輯
14,數據庫(MySQL,PostGres,SQlite,Oracle)的查詢和展示

發佈了64 篇原創文章 · 獲贊 116 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章