細細品味大數據--初識hadoop
初識hadoop
前言
之前在學校的時候一直就想學習大數據方面的技術,包括hadoop和機器學習啊什么的,但是歸根結底就是因為自己太懶了,導致沒有堅持多長時間, 加上一直為offer做準備,所以當時重心放在C++上面了(雖然C++也沒怎么學),計劃在大四下有空余時間再來慢慢學習。現在實習了,需要這方面的知 識,這對于我來說,除去校招時候投遞C++職位有少許影響之外,無疑是有很多的好處。
所以,接下來的很長日子,我學習C++之外的很多時間都必須要花在大數據上面了。
那么首先呢,先來認識一下這處理大數據的hadoop工具了。
簡述大數據
大數據( big data ) ,是指無法在可承受的時間范圍內用常規 軟件工具進行捕捉、管理和處理的數據集合。
大數據的 4V 特點: Volume (大量) 、 Velocity (高速) 、 Variety (多樣) 、 Value (價值) 。
大數據的價值體現在以下幾個方面: 1) 對大量消費者提供產品或服務的企業可以利用大數據進行精準營銷 ;2) 做小而美模式的中長尾企業可以利用大數據做服務轉型 ;3) 面臨互聯網壓力之下必須轉型的傳統企業需要與時俱進充分利用大數據的價值。
什么是 Hadoop ?
Hadoop是一個由 Apache 基金會所開發的 分布式系統基礎架構。用戶可以在不了解分布式底層細節的情況下,開發分布式程序,充分利用集群的威力進行高速運算和存儲。
Hadoop 的框架最核心的設計就是: HDFS 和 MapReduce 。 HDFS 為海量的數據提供了存儲,則 MapReduce 為海量的數據提供了 處理和計算。
Hadoop 的核心架構
Hadoop 由許多元素構成。其最底部是 Hadoop Distributed File System ( HDFS ),它存儲 Hadoop 集群中所有存儲節點上的文件。 HDFS 的上一層是 MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成。通過對 Hadoop 分布式計算平臺最核心的分布式文件系統 HDFS 、 MapReduce 處理過程,以及數據倉庫工具 Hive 和分布式數據庫 Hbase 的介紹,基本涵蓋了 Hadoop 分布式平臺的所有技術核心。
HDFS
對外部客戶機而言,HDFS就像一個傳統的分級文件系統。它的主要目的是支持以流的形式訪問寫入的大型文件(PB 級別 )。可以創建、刪除、移動或重命名文件,等等。存儲在 HDFS 中的文件被分成塊,塊的大小(通常為 64MB )和復制的塊數量在創建文件時由客戶機決定。 但是 HDFS 的架構是基于一組特定的節點構建的,這是由它自身的特點決定的。 這些節點包括NameNode (僅一個) 和DataNode。
NameNode在 HDFS 內部提供元數據服務 ,它負責管理文件系統名稱空間和控制外部客戶機的訪問。 NameNode 決定是否將文件映射到 DataNode 上的復制塊上。 NameNode 在一個稱為 FsImage 的文件中存儲所有關于文件系統 名稱空間的信息。這個文件和一個包含所有事務的記錄文件(這里是 EditLog )將存儲在 NameNode 的本地文件系統上。 FsImage 和 EditLog 文件也需要復制副本,以防文件損壞或 NameNode 系統丟失。
DataNode 為 HDFS 提供存儲塊 , 通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。DataNode 響應來自 HDFS 客戶機的讀寫請求。它們還響應來自 NameNode 的創建、刪除和復制塊的命令。 NameNode 依賴來自每個 DataNode 的定期心跳( heartbeat )消息。每條消息都包含一個塊報告, NameNode 可以根據這個報告驗證塊映射和其他文件系統元數據。如果 DataNode 不能發送心跳消息, NameNode 將采取修復措施,重新復制在該節點上丟失的塊。
MapReduce
最簡單的 MapReduce 應用程序至少包含 3 個部分:一個 Map 函數、一個 Reduce 函數和一個 main 函數。 main 函數將 作業控制和文件輸入 / 輸出結合起來。在這點上, Hadoop 提供了大量的接口和 抽象類,從而為 Hadoop 應用程序開發人員提供許多工具,可用于調試和性能度量等。
MapReduce 本身就是用于 并行處理大數據集的軟件框架。 MapReduce 的根源是函數 型編程中的 map 和 reduce 函數。它由兩個可能包含有許多實例(許多 Map 和 Reduce )的操作組成。 Map 函數接受一組數據并將其轉換為一個鍵 / 值對 (key-value)列表,輸入域中的每個元素對應一個鍵 / 值對。 Reduce 函數接受 Map 函數生成的列表,然后根據它們的鍵縮小鍵 / 值對列表 (即鍵相同的鍵/ 值對合并在一起形成一個列表形式 )。
一個代表客戶機在單個主系統上啟動的 MapReduce 應用程序稱為 JobTracker 。類似于 NameNode ,它是 Hadoop 集群中惟一負責控制 MapReduce 應用程序的系統。在應用程序提交之后,將提供包含在 HDFS 中的輸入和輸出目錄。 JobTracker 使用文件塊信息(物理量和位置)確定如何創建其他 TaskTracker 從屬任務。 MapReduce 應用程序被復制到每個出現輸入文件塊的節點。將為特定節點上的每個文件塊創建一個惟一的從屬任務。每個 TaskTracker 將狀態和完成信息報告給 JobTracker 。
Hadoop 有什么優勢?
Hadoop 是一個能夠對大量數據進行 分布式處理的軟件框架。 Hadoop 以一種可靠、高效、可伸縮的方式進行數據處理。
Hadoop 是可靠的,因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新 分布處理。
Hadoop 是高效的,因為它以并行的方式工作,通過 并行處理加快處理速度。
Hadoop 還是可伸縮的,能夠處理 PB 級數據。
總結如下:
高可靠性。 Hadoop 按位存儲和處理數據的能力值得人們信賴。
高擴展性。 Hadoop 是在可用的計算機集簇間分配數據并完成計算任務的,這些集簇可以方便地擴展到數以千計的節點中。
高效性。 Hadoop 能夠在節點之間動態地移動數據,并保證各個節點的 動態平衡,因此處理速度非常快。
高容錯性。 Hadoop 能夠自動保存數據的多個副本,并且能夠自動將失敗的任務重新分配。
低成本。與一體機、商用數據倉庫以及 QlikView 、 Yonghong Z-Suite 等數據集市相比, hadoop 是開源的,項目的軟件成本因此會大大降低。