Hadoop介紹-1.基本原理

瞭解大數據

首先,搞清楚hadoop在處理大數據的定位在哪裏html

什麼是大數據?爲何要處理大數據?

數據量大(Volume) 數據類別複雜(Variety) 數據處理速度快(Velocity) 數據真實性高(Veracity) 合起來被稱爲4V。程序員

處理大數據是爲了挖掘數據中的隱含價值網絡

如何處理大數據?

集中式計算VS分佈式計算架構

集中式計算:經過不斷增長處理器的個數來加強耽擱計算機的計算能力,從而提升處理的速度。須要的內存很大,計算的速度很快。app

分佈式計算:一組經過網絡鏈接的計算機,造成一個分散的系統。將須要處理的大量數據分散成多個部分,交由系統中的耽擱計算機分別處理,最後將這些計算結果合併獲得最終結果。(MapReduce的核心思想)框架

Hadoop是怎麼產生的

技術基礎

google三駕馬車:GFS、MapReduce和BigTable。Hadoop是在google三駕馬車基礎上的開源實現。分佈式

  1. GFS(Google File System)分佈式文件系統,對應Hadoop當中的HDFS。
  2. MapReduce分佈式計算框架,也是Hadoop處理大數據的核心思想。
  3. BigTable是基於GFS的數據存儲系統,對應Hadoop的HBase。

三大分佈式計算系統

Hadoop,Spark,Storm是主流的三大分佈式計算系統函數

Spark VS Hadoopoop

Hadoop使用硬盤來存儲數據,而Spark是將數據存在內存中的,所以Spark何以提供超過Hadoop 100倍的計算速度。內存斷電後會丟失,因此Spark不
適用於須要長期保存的數據。大數據

Storm VS Hadoop

Storm在Hadoop基礎上提供了實時運算的特性,能夠實時處理大數據流。不一樣於Hadoop和Spark,Storm不進行數據的蒐集和存儲工做,直接經過網絡接受並實時處理數據,而後直接經過網絡實時傳回結果。

因此三者適用於的應用場景分別爲:

  1. Hadoop經常使用於離線的複雜的大數據處理
  2. Spark經常使用於離線的快速的大數據處理
  3. Storm經常使用於在線實時的大數據處理

Hadoop定義

Hadoop是什麼

Hadoop是一個可以對大量數據進行分佈式處理的軟件框架

Hadoop特色

  1. 可靠。Hadoop假設計算元素和存儲會失敗,因此會維護多個工做數據的副本,對失敗的節點會從新處理
  2. 高效。經過並行方式工做,加快處理速度。
  3. 可伸縮。能夠處理PB級的數據。
  4. 高擴展。能夠方便地擴展到數以千計的節點。
  5. 低成本。Hadoop是開源的,Hadoop節點能夠是很便宜的機器。

應用場景

Hadoop適用於:海量數據,離線數據,複雜數據

場景1:數據分析,如海量日誌分析,商品推薦,用戶行爲分析

場景2:離線計算,(異構計算+分佈式計算)天文計算

場景3:海量數據存儲,如Facebook的存儲集羣。

更多應用場景

Hadoop原理

HDFS

HDFS(Hadoop File System),是Hadoop的分佈式文件存儲系統

  1. 將大文件分解爲多個Block,每一個Block保存多個副本。提供容錯機制,副本丟失或者宕機時自動恢復。
  2. 默認每一個Block保存3個副本,64M爲1個Block。
  3. 將Block按照key-value映射到內存當中。

HDFS架構圖以下:

NameNode

HDFS使用主從結構,NameNode是Master節點,是領導。全部的客戶端的讀寫請求,都須要首先請求NameNode。

NameNode存儲

  1. fsimage:元數據鏡像文件(文件系統的目錄樹,文件的元數據信息)。元數據信息包括文件的信息,文件對應的block信息(版本信息,類型信息,和checksum),以及每個block所在的DataNode的信息。
  2. edits:元數據的操做日誌
DataNode

DataNode是Slave,負責真正存儲全部的block內容,以及數據塊的讀寫操做

NameNode,DataNode,rack只是一些邏輯上的概念。NameNode和DataNode多是一臺機器也多是,相鄰的一臺機器,不少DataNode可能處於同一臺機器。rack是邏輯上比DataNode更大的概念,多是一臺機器,一臺機櫃,也多是一個機房。經過使文件的備份更普遍地分佈到不一樣的rack,DataNode上能夠保證數據的可靠性。

HDFS寫入數據
  1. Client拆分文件爲64M一塊。
  2. Client向NameNode發送寫數據請求。
  3. NameNode節點,記錄block信息。並返回可用的DataNode。
  4. Client向DataNode發送block1,2,3….;發送過程是以流式寫入。流式寫入,數據流向爲DataNode1->DataNode2->DataNode3(1,2,3爲經過規則選出來的可用的DataNode)
  5. 發送完畢後告知NameNode
  6. NameNode告知Client發送完成

在寫數據的時候:

  • 寫1T文件,咱們須要3T的存儲,3T的網絡流量貸款。
  • 在執行讀或寫的過程當中,NameNode和DataNode經過HeartBeat進行保存通訊,肯定DataNode活着。若是發現DataNode死掉了,就將死掉的DataNode上的數據,放到其餘節點去。讀取時,要讀其餘節點去。
  • 掛掉一個節點,不要緊,還有其餘節點能夠備份;甚至,掛掉某一個機架,也不要緊;其餘機架上,也有備份。
HDFS讀取數據
  1. Client向NameNode發送讀請求
  2. NameNode查看MetaData信息,返回文件的block位置
  3. 根據必定規則(優先選擇附近的數據),按順序讀取block

更多內容

MapReduce

Map是把一組數據一對一的映射爲另外的一組數據,其映射的規則由一個map函數來指定。Reduce是對一組數據進行歸約,這個歸約的規則由一個reduce函數指定。

整個的MapReduce執行過程能夠表示爲:

(input)<k1, v1> => map => <k2, v2> => combine => <k2, v2’> => reduce => <k3, v3>(output)

也能夠表示爲流程圖:

  1. 分割:把輸入數據分割成不相關的若干鍵/值對(key1/value1)集合,做爲input
  2. 映射:這些鍵/值對會由多個map任務來並行地處理。輸出一些中間鍵/值對key2/value2集合
  3. 排序:MapReduce會對map的輸出(key2/value2)按照key2進行排序(便於歸併)
  4. conbine:屬於同一個key2的全部value2組合在一塊兒做爲reduce任務的輸入(至關於提早reduce,減少key2的數量,減少reduce的負擔)
  5. Partition:將mapper的輸出分配到reducer;(Map的中間結果一般用」hash(key) mod R」這個結果做爲標準)
  6. 規約:由reduce任務計算出最終結果並輸出key3/value3。

程序員須要作的

  • 單機程序須要處理數據讀取和寫入、數據處理
  • Hadoop程序須要實現map和reduce函數
  • map和reduce之間的數據傳輸、排序,容錯處理等由Hadoop MapReduce和HDFS自動完成。
相關文章
相關標籤/搜索