自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Linux、Hadoop進(jìn)行分布式計算

運維 系統(tǒng)運維 分布式 Hadoop
Hadoop 的一個應(yīng)用是并行索引 Internet Web 頁面。Hadoop 是一個受到 Yahoo!、Google 和 IBM 等公司支持的 Apache 項目。本文將介紹 Hadoop 框架,并展示它為什么是最重要的基于 Linux® 的分布式計算框架之一。

Hadoop 由 Apache Software Foundation 公司于 2005 年秋天作為 Lucene 的子項目 Nutch 的一部分正式引入。它受到最先由 Google Lab 開發(fā)的 MapReduce 和 Google File System 的啟發(fā)。2006 年 3 月份,MapReduce 和 Nutch Distributed File System (NDFS) 分別被納入稱為 Hadoop 的項目中。

Hadoop 是最受歡迎的在 Internet 上對搜索關(guān)鍵字進(jìn)行內(nèi)容分類的工具,但它也可以解決許多要求極大伸縮性的問題。例如,如果您要 grep 一個 10TB 的巨型文件,會出現(xiàn)什么情況?在傳統(tǒng)的系統(tǒng)上,這將需要很長的時間。但是 Hadoop 在設(shè)計時就考慮到這些問題,因此能大大提高效率。

先決條件

Hadoop 是一個能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架。但是 Hadoop 是以一種可靠、高效、可伸縮的方式進(jìn)行處理的。Hadoop 是可靠的,因為它假設(shè)計算元素和存儲會失敗,因此它維護(hù)多個工作數(shù)據(jù)副本,確保能夠針對失敗的節(jié)點重新分布處理。Hadoop 是高效的,因為它以并行的方式工作,通過并行處理加快處理速度。Hadoop 還是可伸縮的,能夠處理 PB 級數(shù)據(jù)。此外,Hadoop 依賴于社區(qū)服務(wù)器,因此它的成本比較低,任何人都可以使用。

您可能已經(jīng)想到,Hadoop 運行在 Linux 生產(chǎn)平臺上是非常理想的,因為它帶有用 Java? 語言編寫的框架。Hadoop 上的應(yīng)用程序也可以使用其他語言編寫,比如 C++。

Hadoop 架構(gòu)

Hadoop 有許多元素構(gòu)成。最底部是 Hadoop Distributed File System(HDFS),它存儲 Hadoop 集群中所有存儲節(jié)點上的文件。HDFS(對于本文)的上一層是 MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成。

HDFS

對外部客戶機而言,HDFS 就像一個傳統(tǒng)的分級文件系統(tǒng)??梢詣?chuàng)建、刪除、移動或重命名文件,等等。但是 HDFS 的架構(gòu)是基于一組特定的節(jié)點構(gòu)建的(參見圖 1),這是由它自身的特點決定的。這些節(jié)點包括 NameNode(僅一個),它在 HDFS 內(nèi)部提供元數(shù)據(jù)服務(wù);DataNode,它為 HDFS 提供存儲塊。由于僅存在一個 NameNode,因此這是 HDFS 的一個缺點(單點失?。?。

點擊放大圖片

圖 1. Hadoop 集群的簡化視圖

存儲在 HDFS 中的文件被分成塊,然后將這些塊復(fù)制到多個計算機中(DataNode)。這與傳統(tǒng)的 RAID 架構(gòu)大不相同。塊的大小(通常為 64MB)和復(fù)制的塊數(shù)量在創(chuàng)建文件時由客戶機決定。NameNode 可以控制所有文件操作。HDFS 內(nèi)部的所有通信都基于標(biāo)準(zhǔn)的 TCP/IP 協(xié)議。

NameNode

NameNode 是一個通常在 HDFS 實例中的單獨機器上運行的軟件。它負(fù)責(zé)管理文件系統(tǒng)名稱空間和控制外部客戶機的訪問。NameNode 決定是否將文件映射到 DataNode 上的復(fù)制塊上。對于最常見的 3 個復(fù)制塊,第一個復(fù)制塊存儲在同一機架的不同節(jié)點上,最后一個復(fù)制塊存儲在不同機架的某個節(jié)點上。注意,這里需要您了解集群架構(gòu)。

實際的 I/O 事務(wù)并沒有經(jīng)過 NameNode,只有表示 DataNode 和塊的文件映射的元數(shù)據(jù)經(jīng)過 NameNode。當(dāng)外部客戶機發(fā)送請求要求創(chuàng)建文件時,NameNode 會以塊標(biāo)識和該塊的第一個副本的 DataNode IP 地址作為響應(yīng)。這個 NameNode 還會通知其他將要接收該塊的副本的 DataNode。

NameNode 在一個稱為 FsImage 的文件中存儲所有關(guān)于文件系統(tǒng)名稱空間的信息。這個文件和一個包含所有事務(wù)的記錄文件(這里是 EditLog)將存儲在 NameNode 的本地文件系統(tǒng)上。FsImage 和 EditLog 文件也需要復(fù)制副本,以防文件損壞或 NameNode 系統(tǒng)丟失。

DataNode

NameNode 也是一個通常在 HDFS 實例中的單獨機器上運行的軟件。Hadoop 集群包含一個 NameNode 和大量 DataNode。DataNode 通常以機架的形式組織,機架通過一個交換機將所有系統(tǒng)連接起來。Hadoop 的一個假設(shè)是:機架內(nèi)部節(jié)點之間的傳輸速度快于機架間節(jié)點的傳輸速度。

DataNode 響應(yīng)來自 HDFS 客戶機的讀寫請求。它們還響應(yīng)創(chuàng)建、刪除和復(fù)制來自 NameNode 的塊的命令。NameNode 依賴來自每個 DataNode 的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,NameNode 可以根據(jù)這個報告驗證塊映射和其他文件系統(tǒng)元數(shù)據(jù)。如果 DataNode 不能發(fā)送心跳消息,NameNode 將采取修復(fù)措施,重新復(fù)制在該節(jié)點上丟失的塊。#p#

文件操作

可見,HDFS 并不是一個萬能的文件系統(tǒng)。它的主要目的是支持以流的形式訪問寫入的大型文件。如果客戶機想將文件寫到 HDFS 上,首先需要將該文件緩存到本地的臨時存儲。如果緩存的數(shù)據(jù)大于所需的 HDFS 塊大小,創(chuàng)建文件的請求將發(fā)送給 NameNode。NameNode 將以 DataNode 標(biāo)識和目標(biāo)塊響應(yīng)客戶機。同時也通知將要保存文件塊副本的 DataNode。當(dāng)客戶機開始將臨時文件發(fā)送給第一個 DataNode 時,將立即通過管道方式將塊內(nèi)容轉(zhuǎn)發(fā)給副本 DataNode。客戶機也負(fù)責(zé)創(chuàng)建保存在相同 HDFS 名稱空間中的校驗和(checksum)文件。在最后的文件塊發(fā)送之后,NameNode 將文件創(chuàng)建提交到它的持久化元數(shù)據(jù)存儲(在 EditLog 和 FsImage 文件)。

Linux 集群

Hadoop 框架可在單一的 Linux 平臺上使用(開發(fā)和調(diào)試時),但是使用存放在機架上的商業(yè)服務(wù)器才能發(fā)揮它的力量。這些機架組成一個 Hadoop 集群。它通過集群拓?fù)渲R決定如何在整個集群中分配作業(yè)和文件。Hadoop 假定節(jié)點可能失敗,因此采用本機方法處理單個計算機甚至所有機架的失敗。

Hadoop 應(yīng)用程序

Hadoop 的最常見用法之一是 Web 搜索。雖然它不是惟一的軟件框架應(yīng)用程序,但作為一個并行數(shù)據(jù)處理引擎,它的表現(xiàn)非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到 Google 開發(fā)的啟發(fā)。這個流程稱為創(chuàng)建索引,它將 Web 爬行器檢索到的文本 Web 頁面作為輸入,并且將這些頁面上的單詞的頻率報告作為結(jié)果。然后可以在整個 Web 搜索過程中使用這個結(jié)果從已定義的搜索參數(shù)中識別內(nèi)容。

MapReduce

最簡單的 MapReduce 應(yīng)用程序至少包含 3 個部分:一個 Map 函數(shù)、一個 Reduce 函數(shù)和一個 main 函數(shù)。main 函數(shù)將作業(yè)控制和文件輸入/輸出結(jié)合起來。在這點上,Hadoop 提供了大量的接口和抽象類,從而為 Hadoop 應(yīng)用程序開發(fā)人員提供許多工具,可用于調(diào)試和性能度量等。

MapReduce 本身就是用于并行處理大數(shù)據(jù)集的軟件框架。MapReduce 的根源是函數(shù)性編程中的 map 和 reduce 函數(shù)。它由兩個可能包含有許多實例(許多 Map 和 Reduce)的操作組成。Map 函數(shù)接受一組數(shù)據(jù)并將其轉(zhuǎn)換為一個鍵/值對列表,輸入域中的每個元素對應(yīng)一個鍵/值對。Reduce 函數(shù)接受 Map 函數(shù)生成的列表,然后根據(jù)它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表。

這里提供一個示例,幫助您理解它。假設(shè)輸入域是 one small step for man, one giant leap for mankind。在這個域上運行 Map 函數(shù)將得出以下的鍵/值對列表:

點擊放大圖片

結(jié)果是對輸入域中的單詞進(jìn)行計數(shù),這無疑對處理索引十分有用。但是,現(xiàn)在假設(shè)有兩個輸入域,第一個是 one small step for man,第二個是 one giant leap for mankind。您可以在每個域上執(zhí)行 Map 函數(shù)和 Reduce 函數(shù),然后將這兩個鍵/值對列表應(yīng)用到另一個 Reduce 函數(shù),這時得到與前面一樣的結(jié)果。換句話說,可以在輸入域并行使用相同的操作,得到的結(jié)果是一樣的,但速度更快。這便是 MapReduce 的威力;它的并行功能可在任意數(shù)量的系統(tǒng)上使用。圖 2 以區(qū)段和迭代的形式演示這種思想。

點擊放大圖片

圖 2. MapReduce 流程的概念流#p#

現(xiàn)在回到 Hadoop 上,它是如何實現(xiàn)這個功能的?一個代表客戶機在單個主系統(tǒng)上啟動的 MapReduce 應(yīng)用程序稱為 JobTracker。類似于 NameNode,它是 Hadoop 集群中惟一負(fù)責(zé)控制 MapReduce 應(yīng)用程序的系統(tǒng)。在應(yīng)用程序提交之后,將提供包含在 HDFS 中的輸入和輸出目錄。JobTracker 使用文件塊信息(物理量和位置)確定如何創(chuàng)建其他 TaskTracker 從屬任務(wù)。MapReduce 應(yīng)用程序被復(fù)制到每個出現(xiàn)輸入文件塊的節(jié)點。將為特定節(jié)點上的每個文件塊創(chuàng)建一個惟一的從屬任務(wù)。每個 TaskTracker 將狀態(tài)和完成信息報告給 JobTracker。圖 3 顯示一個示例集群中的工作分布。

點擊放大圖片

圖 3. 顯示處理和存儲的物理分布的 Hadoop 集群

Hadoop 的這個特點非常重要,因為它并沒有將存儲移動到某個位置以供處理,而是將處理移動到存儲。這通過根據(jù)集群中的節(jié)點數(shù)調(diào)節(jié)處理,因此支持高效的數(shù)據(jù)處理。

Hadoop 的其他應(yīng)用程序

Hadoop 是一個用于開發(fā)分布式應(yīng)用程序的多功能框架;從不同的角度看待問題是充分利用 Hadoop 的好方法?;仡櫼幌?圖 2,那個流程以階梯函數(shù)的形式出現(xiàn),其中一個組件使用另一個組件的結(jié)果。當(dāng)然,它不是萬能的開發(fā)工具,但如果碰到的問題屬于這種情況,那么可以選擇使用 Hadoop。

Hadoop 一直幫助解決各種問題,包括超大型數(shù)據(jù)集的排序和大文件的搜索。它還是各種搜索引擎的核心,比如 Amazon 的 A9 和用于查找酒信息的 Able Grape 垂直搜索引擎。Hadoop Wiki 提供了一個包含大量應(yīng)用程序和公司的列表,這些應(yīng)用程序和公司通過各種方式使用 Hadoop(參見 參考資料)。

當(dāng)前,Yahoo! 擁有最大的 Hadoop Linux 生產(chǎn)架構(gòu),共由 10,000 多個內(nèi)核組成,有超過 5PB 字節(jié)的儲存分布到各個 DataNode。在它們的 Web 索引內(nèi)部差不多有一萬億個鏈接。不過您可能不需要那么大型的系統(tǒng),如果是這樣的話,您可以使用 Amazon Elastic Compute Cloud (EC2) 構(gòu)建一個包含 20 個節(jié)點的虛擬集群。事實上,紐約時報 使用 Hadoop 和 EC2 在 36 個小時內(nèi)將 4TB 的 TIFF 圖像 — 包括 405K 大 TIFF 圖像,3.3M SGML 文章和 405K XML 文件 — 轉(zhuǎn)換為 800K 適合在 Web 上使用的 PNG 圖像。這種處理稱為云計算,它是一種展示 Hadoop 的威力的獨特方式。

結(jié)束語

毫無疑問,Hadoop 正在變得越來越強大。從使用它的應(yīng)用程序看,它的前途是光明的。您可以從 參考資料 小節(jié)更多地了解 Hadoop 及其應(yīng)用程序,包括設(shè)置您自己的 Hadoop 集群的建議。

 
 

 

責(zé)任編輯:黃丹 來源: IT商業(yè)新聞網(wǎng)
相關(guān)推薦

2012-09-19 14:09:20

Hadoop開源

2010-06-03 18:54:57

Hadoop

2023-11-01 18:02:33

RayPython分布式

2010-06-03 14:42:47

Hadoop分布式集群

2010-06-03 19:46:44

Hadoop

2021-03-23 22:43:09

Grafana Tem分布式跟蹤開源

2024-03-01 09:53:34

2017-09-01 05:35:58

分布式計算存儲

2012-05-21 10:19:31

Hadoop

2011-09-28 11:22:52

Hadoop

2022-06-08 07:36:03

LocustKubernete微服務(wù)

2017-08-10 10:17:32

Hadoop分布式搭建

2019-09-26 15:43:52

Hadoop集群防火墻

2014-07-15 11:15:44

hadoop分布式部署

2024-10-07 10:07:31

2024-04-01 05:10:00

Redis數(shù)據(jù)庫分布式鎖

2024-01-02 13:15:00

分布式鎖RedissonRedis

2023-03-09 11:35:40

2019-10-28 10:10:01

技術(shù)研發(fā)分布式

2013-03-26 13:43:08

Java分布式計算
點贊
收藏

51CTO技術(shù)棧公眾號