淺析hadoop 簡歷就寫這個了

 


爲何選擇hadoop

   下面列舉hadoop主要的一些特色:node

1)擴容能力(Scalable):能可靠地(reliably)存儲和處理千兆字節(PB)數據。sql

2)成本低(Economical):能夠經過普通機器組成的服務器羣來分發以及處理數據。這些服務器羣總計可達數千個節點。數據庫

3)高效率(Efficient):經過分發數據,hadoop能夠在數據所在的節點上並行地(parallel)處理它們,這使得處理很是的快速。編程

4)可靠性(Reliable):hadoop能自動地維護數據的多份複製,而且在任務失敗後能自動地從新部署(redeploy)計算任務。數組

  • Hadoop核心服務器

        Hadoop的核心就是HDFS和MapReduce,而二者只是理論基礎,不是具體可以使用的高級應用,Hadoop旗下有不少經典子項目,好比 HBase、Hive等,這些都是基於HDFS和MapReduce發展出來的。要想了解Hadoop,就必須知道HDFS和MapReduce是什麼。網絡

 

  • HDFS數據結構

HDFS(Hadoop Distributed File System,Hadoop分佈式文件系統),它是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,適合那些有着超大數據集(large data set)的應用程序。架構

 

HDFS的設計特色是:app

一、大數據文件,很是適合上T級別的大文件或者一堆大數據文件的存儲,若是文件只有幾個G甚至更小就沒啥意思了。

二、文件分塊存儲,HDFS會將一個完整的大文件平均分塊存儲到不一樣計算器上,它的意義在於讀取文件時能夠同時從多個主機取不一樣區塊的文件,多主機讀取比單主機讀取效率要高得多得都。

三、流式數據訪問,一次寫入屢次讀寫,這種模式跟傳統文件不一樣,它不支持動態改變文件內容,而是要求讓文件一次寫入就不作變化,要變化也只能在文件末添加內容。

四、廉價硬件,HDFS能夠應用在普通PC機上,這種機制可以讓給一些公司用幾十臺廉價的計算機就能夠撐起一個大數據集羣。

五、硬件故障,HDFS認爲全部計算機均可能會出問題,爲了防止某個主機失效讀取不到該主機的塊文件,它將同一個文件塊副本分配到其它某幾個主機上,若是其中一臺主機失效,能夠迅速找另外一塊副本取文件。

 

HDFS的關鍵元素:

Block:將一個文件進行分塊,一般是64M。

NameNode: 保存整個文件系統的目錄信息、文件信息及分塊信息,這是由惟一一臺主機專門保存,固然這臺主機若是出錯,NameNode就失效了。在Hadoop2.* 開始支持activity-standy模式----若是主NameNode失效,啓動備用主機運行NameNode。

DataNode:分佈在廉價的計算機上,用於存儲Block塊文件。


 

 

  • MapReduce

通俗說MapReduce是一套從海量·源數據提取分析元素最後返回結果集的編程模型,將文件分佈式存儲到硬盤是第一步,而從海量數據中提取分析咱們須要的內容就是MapReduce作的事了。

 

下面以一個計算海量數據最大值爲例:一個銀行有上億儲戶,銀行但願找到存儲金額最高的金額是多少,按照傳統的計算方式,咱們會這樣:

Java代碼  收藏代碼

  1. Long moneys[] ...  

  2. Long max = 0L;  

  3. for(int i=0;i<moneys.length;i++){  

  4.   if(moneys[i]>max){  

  5.     max = moneys[i];  

  6.   }  

  7. }  

 

 若是計算的數組長度少的話,這樣實現是不會有問題的,仍是面對海量數據的時候就會有問題。

MapReduce會這樣作:首先數字是分佈存儲在不一樣塊中的,以某幾個塊爲一個Map,計算出Map中最大的值,而後將每一個Map中的最大值作Reduce操做,Reduce再取最大值給用戶。


        MapReduce的基本原理就是:將大的數據分析分紅小塊逐個分析,最後再將提取出來的數據彙總分析,最終得到咱們想要的內容。固然怎麼分塊分析,怎麼 作Reduce操做很是複雜,Hadoop已經提供了數據分析的實現,咱們只須要編寫簡單的需求命令便可達成咱們想要的數據。


上面是給你們一個大體的概念下面是各部分的詳細描述。

咱們這裏簡單的理解爲Hadoop主要由三部分組成:HDFS(Hadoop Distributed File System),MapReduce與Hbase

1.Hadoop組件之一:HDFS分佈式文件系統具備哪些優勢?

  HDFS做爲一種分佈式文件系統,它和現有的分佈式文件系統有不少共同點。好比,Hadoop文件系統管理的物理存儲資源不必定直接鏈接在本地 節點上,而是經過計算機網絡與節點相連。對於Client端而言,HDFS就像一個傳統的分級文件系統,能夠建立、刪除、移動或重命名文件等等。與此同 時,HDFS與其餘的分佈式文件系統的區別也是顯而易見的。

  首先,HDFS設計目標之一是適合運行在通用硬件(commodity hardware)上的分佈式文件系統。HDFS假設的硬件錯誤不是異常,而是常態。由於HDFS面向的是成百上千的服務器集羣,每臺服務器上存儲着文件 系統的部分數據,而且這些機器的價格都很低廉。這就意味着老是有一部分硬件因各類緣由而沒法工做。所以,錯誤檢測和快速、自動的恢復是HDFS最核心的架 構目標。從這個角度說,HDFS具備高度的容錯性。

  第二,HDFS的另外一個設計目標是支持大文件存儲。與普通的應用不一樣,HDFS應用具備很大的數據集,一個典型HDFS文件大小通常都在G字節 至T字節。這就意味着HDFS應該能提供比較高的數據傳輸帶寬與數據訪問吞吐量。相應的,HDFS開放了一些POSIX的必須接口,允許流式訪問文件系統 的數據。

  第三,HDFS還要解決的一個問題是高數據吞吐量。HDFS採用的是「一次性寫,屢次讀」這種簡單的數據一致性模型。換句話說,文件一旦創建後寫入,就不須要再更改了。網絡爬蟲程序就很適合使用這樣的模型。

  第四,移動計算環境比移動數據划算。HDFS提供了API,以便把計算環境移動到數據存儲的地方,而不是把數據傳輸到計算環境運行的地方。這對於數據大文件尤爲適用,能夠有效減小網絡的擁塞、提升系統的吞吐量。

  HDFS的體系結構與工做流程

  下面簡單看一下HDFS的結構。圖1所示爲HDFS的體系結構圖。HDFS採用的是Master/Slave架構。

  NameNode節點做爲Master服務器,有三部分功能。第一:處理來自客戶端的文件訪問。第二:管理文件系統的命名空間操做,如'打開'、'關閉'、'重命名'等。第三:負責數據塊到數據節點之間的映射。從這個意義上說,它扮演中心服務器的角色。

  DataNode節點做爲Slave服務器,一樣有三部分功能。第一:管理掛載在節點上的存儲設備。第二:響應客戶端的讀寫請求。第三:從內部 看,每一個文件被分紅一個或多個數據塊,被存放到一組DataNode,在Namenode的統一調度下進行數據塊的建立、刪除和複製。

IT168:深刻淺出Hadoop

  圖1 HDFS體系結構圖

  HDFS採用Java語言開發,所以任何支持Java的機器均可以部署Namenode或Datanode。相應地,GNU/Linux操做系 統支持Namenode與Datanode。一個典型的部署場景是,一臺GNU/Linux操做系統上運行一個Namenode實例,做爲Master中 心服務器。而集羣中的其它GNU/Linux操做系統分別運行一個Datanode實例,做爲Slave服務器集羣。

2.Hadoop組件之二:什麼是MapReduce編程模型, MapReduce的工做流程是什麼?

  MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算。MapReduce的設計目標是方便編程人員在不熟悉分佈式並行編程的狀況下,將本身的程序運行在分佈式系統上。

  MapReduce的命名規則由兩個術語組成,分別是Map(映射)與Reduce(化簡)。這些術語來自於列表處理語言, 如:LISP,Scheme,或ML。從概念上來說,MapReduce將輸入元素列表(Input List)轉換成輸出元素列表(Output List),按照Map與Reduce規則各一次。


  從MapReduce框架的實現角度看,MapReduce程序有着兩個組件:一個實現了 Mapper,另外一個實現了Reducer。

  第一次叫Mapping,如圖2所示。MapReduce將Input List做爲Mapping函數的輸入參數,通過處理,把結果返回給Output List。舉例來講,有一個函數toUpper(str),用來返回輸入字符串的大寫版本。那麼這裏的Input List指的是轉換前的常規字符串列表,Mapping Function指的是toUpper函數,而Output List指的是轉換後的大寫字符串列表。值得注意的是,在這裏Mapping並無改變輸入字符串列表,而是返回一個新的字符串列表。

IT168:深刻淺出Hadoop

  圖2 Map函數處理

  第二次叫Reducing,如圖3所示。MapReduce將Input List做爲Reducing函數的輸入參數,通過迭代處理,把這些數據聚集,返回一個輸出值給Output Value。從這個意義上來講,Reducing通常用來生成」總結「數據,把大規模的數據轉變成更小的總結數據。例如,"+"能夠用來做一個 reducing函數,去返回輸入數據列表的值的總和。

IT168:深刻淺出Hadoop

  圖3 Reduce函數處理

  從工做流程來說,MapReduce對應的做業Job首先把輸入的數據集切分爲若干獨立的數據塊,並由Map組件以Task的方式並行處理。處 理結果通過排序後,依次輸入給Reduce組件,而且以Task的形式並行處理。MapReduce對應的輸入輸出數據由HDFS的DataNode存 儲。MapReduce對應的Job部署在Master服務器,由Master JobTracker負責Task的調度,監控,從新執行失敗的任務等等。MapReduce對應的Job部署在若干不一樣的Slave服務器,每一個集羣節 點含一個slave TaskTracker,負責執行由master指派的任務。

  Hadoop框架由Java實現的,它提供了兩種主要工具。Hadoop Streaming是一種運行做業的實用工具,它容許用戶建立和運行任何可執行程序(例如:Shell工具)來作爲mapper和reducer。 Hadoop Pipes是一個與SWIG兼容的C++ API (沒有基於JNITM技術),它也可用於實現Map/Reduce應用程序。這樣,開發人員就能夠利用MapReduce框架,開發分佈式應用程序,運行 在由上千個商用機器組成的大型集羣上,並以一種可靠容錯的方式並行處理上T級別的數據集。

3.Hadoop組件之三:什麼是面向列開源分佈式數據庫Hbase?

  HBase是一個分佈式的、面向列的開源數據庫,由Apache基金會開發。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存 儲的數據庫。它基於列的而不是基於行的模式。用戶存儲數據行在一個表裏。一個數據行擁有一個可選擇的鍵和任意數量的列。用戶可根據鍵訪問行,以及對於一系 列的行進行掃描和過濾。HBase一個能夠橫向擴張的表存儲系統,可以爲大規模數據提供速度極快的低等級更新。主要用於須要隨機訪問,實時讀寫大數據 (Big Data)。這正是信息系統所須要的功能。


  下面的例子演示的是將原來存放在MySQL中Blog中的數據遷移到HBase中的過程:

  圖4爲MySQL中現有的表結構:表Blogtable表示博客自己,包括5個字段,BlogId爲每位用戶對應的博客ID號,類型爲Int, 做爲主鍵字段;Author爲該用戶的博客名稱,類型爲Varchar;Title爲該用戶的博客簽名,類型爲Varchar;URL爲博客網址連接,類 型爲Varchar;Text爲博客的內容,類型爲Varchar。Comment表示博客評論,包括5個字段。ID爲發表評論的用戶ID,類型爲 Int,做爲主鍵字段;BlogId爲博客的原文ID,類型爲Varchar。其中,BlogId做爲Comment表的外鍵,指向表Blogtable 的主鍵。Title爲評論標題,類型爲Varchar;Author爲發表該評論的用戶名稱,類型爲Varchar;Text字段爲評論內容,類型爲 Varchar。

IT168:深刻淺出Hadoop

  圖4 MySQL表結構

  圖5 爲遷移HBase中的表結構:HBase以表的形式存儲數據。表有行和列組成。列劃分爲若干個列族(row family)。表Blogtable表示博客自己。ID爲Row Key,即Table的主鍵,用來檢索記錄。Table在水平方向有一個或者多個Column Family組成。表BlogTable包含5個Column Family, Info的數據結構分爲Info:Author,Info:Title,Info:URL。若是想添加其它屬性X,則對應的結構爲Info:X。須要說明 的是,Column Family支持動態擴展,無需預先定義Column的數量以及類型,可是,全部Column均以二進制格式存儲,用戶須要自行進行類型轉換。

IT168:深刻淺出Hadoop

  圖5 HBase表結構

  總之,Hbase目標主要依靠橫向擴展,經過不斷增長廉價的商用服務器,來增長計算和存儲能力。簡單的理解,Hbase介於nosql和 RDBMS之間。Hbase僅能經過主鍵(row key)和主鍵的range來檢索數據,不支持條件查詢以及排序等,僅支持單行事務。Habase主要用來存儲非結構化和半結構化的鬆散數據。針對 Hbase的不足,Hadoop的一個數據倉庫工具Hive對此作出了彌補。Hive能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的SQL查詢 功能,並將SQL語句轉換爲MapReduce任務運行。針對Hbase單行事務的限制,Hive也提供了擴展。聽說,Facebook之因此選擇了 Hbase,是由於他們HBase適用於處理如下兩種類型的數據模式:1.一小組常常變化的臨時數據;2.一組不斷增長但不多訪問的數據。

相關文章
相關標籤/搜索