[转载]Apache之Hadoop学习:初识hadoop
原文轉自:http://qa.taobao.com/blogs/qa?bid=10514
這是本人看到過的關于hadoop的比較容易理解的入門文章,在此轉載過來,方便廣大像我這樣的初級碼農。?原文如下:
?
引言?
?
最近了解到淘寶使用hadoop的項目多了起來,hadoop對于許多測試人員來說或許是個新鮮玩兒,因此,把自己之前整理的學習筆記整理發上來,希望通過此系列文章快速了解Hadoop的基本概念和架構原理,從而助于hadoop相關項目的測試理解和溝通。?
Hadoop簡介?
Hadoop 是一個實現了 MapReduce 計算模型的開源分布式并行編程框架,借助于 Hadoop, 程序員可以輕松地編寫分布式并行程序,將其運行于計算機集群上,完成海量數據的計算。如果你對Hadoop不熟悉,下面這些名詞你或許耳熟能詳,Google File System、Google Map/Reduce模型、lucene 、Nutch、阿里云梯、云計算等,他們都與Hadoop有著或深或淺的關系,原來Hadoop離我們如此之近,那么花些時間繼續了解它吧。?
Hadoop的架構
? 先拋開Hadoop,簡單地想想看,假設我們需要讀一個10TB的數據集,怎么辦?在傳統的系統上,這需要很長時間,因為硬盤的傳輸速度是受限的。一個簡單的辦法是將數據存儲在多個磁盤上,同時從多個磁盤并行讀取數據,這將大大減少讀取時間。
? ?
? 上面的方案需要解決兩個主要問題,一個是硬件故障,要保證其中一個硬件壞了但數據仍然完整,Hadoop的文件系統HDFS(Hadoop Distributed Filesystem)提供了一種解決方式。另外一個問題是如何并行讀取數據并合并保證正確性,通過MapReduce的編程模型可以簡化這個問題。簡而言之,Hadoop提供了一個穩定的共享存儲和分析系統,存儲由HDFS實現,分析由MapReduce實現,這兩者構成了Hadoop的核心功能。
HDFS
HDFS集群有兩種節點,以管理者-工作者模式運行,即1個名稱節點(NameNode)和N個數據節點(DataNode)。其底層實現是將文件切割成塊,然后將這些塊存儲在不同的DataNode上。為了容錯容災,每個塊還被復制多份存儲在不同的DataNode上。NameNode管理文件系統的命名空間,記錄每個文件被切割成了多少塊,這些塊可以從哪些DataNode上獲得,以及各個DataNode的狀態信息等。下圖是Hadoop集群的簡化視圖
?
HDFS內部通信都是基于標準的TCP/IP協議,NameNode 依賴來自每個 DataNode 的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,NameNode 可以根據這個報告驗證塊映射和其他文件系統元數據。如果 DataNode 不能發送心跳消息,NameNode 將采取修復措施,重新復制在該節點上丟失的塊。更多HDFS的架構和設計請閱讀http://hadoop.apache.org/common/docs/current/cn/hdfs_design.html
? MapReduce
?
?? 上圖說明了用 MapReduce 來處理大數據集的過程, 這個 MapReduce 的計算過程簡而言之,就是將大數據集分解為成若干個小數據集,每個(或若干個)數據集分別由集群中的一個結點(一般就是一臺普通的計算機)進行處理并生成中間結果,然后這些中間結果又由大量的結點進行合并, 形成最終結果。
計算模型的核心是 Map 和 Reduce 兩個函數,這兩個函數由用戶負責實現,功能是按一定的映射規則將輸入的 對轉換成另一個或一批 對輸出。下圖是一個簡單的MapReduce示例,實現字數統計功能。
? ?
? 分布式并行運算
?? Hadoop 的分布式并行運算有一個作為主控的JobTracker,用于調度和管理其它的 TaskTracker, JobTracker 可以運行于集群中任一臺計算機上。TaskTracker負責執行任務,必須運行于 DataNode 上,即 DataNode 既是數據存儲結點,也是計算結點,這樣可以減少數據在網絡上的傳輸,降低對網絡帶寬的需求。 JobTracker 將 Map 任務和 Reduce 任務分發給空閑的 TaskTracker, 讓這些任務并行運行,并負責監控任務的運行情況。如果某一個 TaskTracker 出故障了,JobTracker 會將其負責的任務轉交給另一個空閑的 TaskTracker 重新運行。
? Hadoop的其他子項目
? 上面介紹的MapReduce、HDFS、分布式并行運算是Hadoop最核心的功能。還有一些子項目提供補充性服務。如hive(提供基于sql的查詢語言查詢存儲在HDFS中的數據)、Hbase(一種分布式、列存儲數據庫,適用于需要實時讀寫、隨機訪問超大數據集的場景)、Zookeeper(一個分布式、高可用性的協調服務,提供分布式鎖之類的基本服務)、pig(一種數據流語言和運行環境,用以檢索非常大的數據集,使程序員能專注于數據而不是執行本質)等。
小結
如果你堅持看到這里,或許會覺得失望,介紹了一堆的概念和名詞,貌似對你的幫助不大,不要沮喪,第一次接觸分布式知識的人大都如此,至少你跟開發又多了些共同語言,下次那個哥們沖你說pig(豬)時,你可以認為他說的是pig(一種數據流語言和運行環境,用以檢索非常大的數據集,使程序員能專注于數據而不是執行本質)。
轉載于:https://www.cnblogs.com/kingcucumber/archive/2013/06/13/2872575.html
總結
以上是生活随笔為你收集整理的[转载]Apache之Hadoop学习:初识hadoop的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [原创] Robot framework
- 下一篇: Ollydbg入门