瞭解大數據
首先,搞清楚hadoop在處理大數據的定位在哪裏html
什麼是大數據?爲何要處理大數據?
數據量大(Volume) 數據類別複雜(Variety) 數據處理速度快(Velocity) 數據真實性高(Veracity) 合起來被稱爲4V。程序員
處理大數據是爲了挖掘數據中的隱含價值網絡
如何處理大數據?
集中式計算VS分佈式計算架構
集中式計算:經過不斷增長處理器的個數來加強耽擱計算機的計算能力,從而提升處理的速度。須要的內存很大,計算的速度很快。app
分佈式計算:一組經過網絡鏈接的計算機,造成一個分散的系統。將須要處理的大量數據分散成多個部分,交由系統中的耽擱計算機分別處理,最後將這些計算結果合併獲得最終結果。(MapReduce的核心思想)框架
Hadoop是怎麼產生的
技術基礎
google三駕馬車:GFS、MapReduce和BigTable。Hadoop是在google三駕馬車基礎上的開源實現。分佈式
- GFS(Google File System)分佈式文件系統,對應Hadoop當中的HDFS。
- MapReduce分佈式計算框架,也是Hadoop處理大數據的核心思想。
- BigTable是基於GFS的數據存儲系統,對應Hadoop的HBase。
三大分佈式計算系統
Hadoop,Spark,Storm是主流的三大分佈式計算系統函數
Spark VS Hadoopoop
Hadoop使用硬盤來存儲數據,而Spark是將數據存在內存中的,所以Spark何以提供超過Hadoop 100倍的計算速度。內存斷電後會丟失,因此Spark不
適用於須要長期保存的數據。大數據
Storm VS Hadoop
Storm在Hadoop基礎上提供了實時運算的特性,能夠實時處理大數據流。不一樣於Hadoop和Spark,Storm不進行數據的蒐集和存儲工做,直接經過網絡接受並實時處理數據,而後直接經過網絡實時傳回結果。
因此三者適用於的應用場景分別爲:
- Hadoop經常使用於離線的複雜的大數據處理
- Spark經常使用於離線的快速的大數據處理
- Storm經常使用於在線實時的大數據處理
Hadoop定義
Hadoop是什麼
Hadoop是一個可以對大量數據進行分佈式處理的軟件框架
Hadoop特色
- 可靠。Hadoop假設計算元素和存儲會失敗,因此會維護多個工做數據的副本,對失敗的節點會從新處理
- 高效。經過並行方式工做,加快處理速度。
- 可伸縮。能夠處理PB級的數據。
- 高擴展。能夠方便地擴展到數以千計的節點。
- 低成本。Hadoop是開源的,Hadoop節點能夠是很便宜的機器。
應用場景
Hadoop適用於:海量數據,離線數據,複雜數據
場景1:數據分析,如海量日誌分析,商品推薦,用戶行爲分析
場景2:離線計算,(異構計算+分佈式計算)天文計算
場景3:海量數據存儲,如Facebook的存儲集羣。
更多應用場景
Hadoop原理
HDFS
HDFS(Hadoop File System),是Hadoop的分佈式文件存儲系統
- 將大文件分解爲多個Block,每一個Block保存多個副本。提供容錯機制,副本丟失或者宕機時自動恢復。
- 默認每一個Block保存3個副本,64M爲1個Block。
- 將Block按照key-value映射到內存當中。
HDFS架構圖以下:
NameNode
HDFS使用主從結構,NameNode是Master節點,是領導。全部的客戶端的讀寫請求,都須要首先請求NameNode。
NameNode存儲
- fsimage:元數據鏡像文件(文件系統的目錄樹,文件的元數據信息)。元數據信息包括文件的信息,文件對應的block信息(版本信息,類型信息,和checksum),以及每個block所在的DataNode的信息。
- edits:元數據的操做日誌
DataNode
DataNode是Slave,負責真正存儲全部的block內容,以及數據塊的讀寫操做
NameNode,DataNode,rack只是一些邏輯上的概念。NameNode和DataNode多是一臺機器也多是,相鄰的一臺機器,不少DataNode可能處於同一臺機器。rack是邏輯上比DataNode更大的概念,多是一臺機器,一臺機櫃,也多是一個機房。經過使文件的備份更普遍地分佈到不一樣的rack,DataNode上能夠保證數據的可靠性。
HDFS寫入數據
- Client拆分文件爲64M一塊。
- Client向NameNode發送寫數據請求。
- NameNode節點,記錄block信息。並返回可用的DataNode。
- Client向DataNode發送block1,2,3….;發送過程是以流式寫入。流式寫入,數據流向爲DataNode1->DataNode2->DataNode3(1,2,3爲經過規則選出來的可用的DataNode)
- 發送完畢後告知NameNode
- NameNode告知Client發送完成
在寫數據的時候:
- 寫1T文件,咱們須要3T的存儲,3T的網絡流量貸款。
- 在執行讀或寫的過程當中,NameNode和DataNode經過HeartBeat進行保存通訊,肯定DataNode活着。若是發現DataNode死掉了,就將死掉的DataNode上的數據,放到其餘節點去。讀取時,要讀其餘節點去。
- 掛掉一個節點,不要緊,還有其餘節點能夠備份;甚至,掛掉某一個機架,也不要緊;其餘機架上,也有備份。
HDFS讀取數據
- Client向NameNode發送讀請求
- NameNode查看MetaData信息,返回文件的block位置
- 根據必定規則(優先選擇附近的數據),按順序讀取block
更多內容
MapReduce
Map是把一組數據一對一的映射爲另外的一組數據,其映射的規則由一個map函數來指定。Reduce是對一組數據進行歸約,這個歸約的規則由一個reduce函數指定。
整個的MapReduce執行過程能夠表示爲:
(input)<k1, v1> => map => <k2, v2> => combine => <k2, v2’> => reduce => <k3, v3>(output)
也能夠表示爲流程圖:
- 分割:把輸入數據分割成不相關的若干鍵/值對(key1/value1)集合,做爲input
- 映射:這些鍵/值對會由多個map任務來並行地處理。輸出一些中間鍵/值對key2/value2集合
- 排序:MapReduce會對map的輸出(key2/value2)按照key2進行排序(便於歸併)
- conbine:屬於同一個key2的全部value2組合在一塊兒做爲reduce任務的輸入(至關於提早reduce,減少key2的數量,減少reduce的負擔)
- Partition:將mapper的輸出分配到reducer;(Map的中間結果一般用」hash(key) mod R」這個結果做爲標準)
- 規約:由reduce任務計算出最終結果並輸出key3/value3。
程序員須要作的
- 單機程序須要處理數據讀取和寫入、數據處理
- Hadoop程序須要實現map和reduce函數
- map和reduce之間的數據傳輸、排序,容錯處理等由Hadoop MapReduce和HDFS自動完成。