Hadoop分布式框架簡介

2021-06-12 17:12:08 字數 2485 閱讀 1406

原文

分布式系統基本原理

分布式系統被設計成可以儲存和管理大資料量的資訊的系統,並為這些資料提供對外的訪問功能(通過網路)。現在已經有許多的分布式系統用各種不同的方法解決了這個問題。

nfs,the network file system, 是目前最普遍的分布式系統。它也是還在使用的最老的分布式系統之一。它的設計是非常易懂的,但它也有許多的侷限性。nfs 為儲存在一台機器上的乙個邏輯卷提供遠端訪問。乙個nfs能夠讓它的本地檔案系統的一部分對其他的客戶端可見。然後,客戶端 會把這個遠端系統 加進 它們自己的 linux 檔案系統,然後就像 遠端系統在本地硬碟上一樣 去使用它。

這個模型的乙個主要的優點就是它的透明性。客戶端壓根兒不用知道它們是否在使用遠端系統。標準庫中的方法,例如 open(),close(),fread(),等等,會幫助我們使用在nfs上的檔案。

但是作為乙個分布式系統,它的功能並不是很強大。nfs 中的檔案始終都只是儲存在一台機器上。這就意味著,儲存的容量不可能超過那台機器的容量,並且 nfs 也不提供可靠性上的保證(比如 資料備份)。最後,因為 所有的資料都被儲存在一台機器上,那所有的客戶端都得跑到這台機器上來取資料。當很多客戶端同時跑過來的時候,伺服器可能會超負荷。而且,客戶端在每次處理資料之前,都必須跑到伺服器上去取資料。

hdfs的可擴充套件性,高效能也決定了它對應用程式的不同於其他分布式系統的苛刻要求。為了達到設計者的目的,設計者做了一些額外的限制設計和折中方案。主要有:

hdfs的設計是基於google的分布式系統gfs的,這裡是google發表的相關**

。hdfs 是乙個塊結構的檔案系統;每個檔案都被分割成固定大小的檔案塊。這些塊根據資料儲存策略被分別儲存在一台或者多台機器上。集群中的機器,我們叫,datanode。乙個檔案能夠被分割成幾個檔案塊,這些檔案塊並不一定會被儲存在同一臺機器上,哪個塊存在哪個機器上是隨機的。由此,想要訪問乙個檔案,或許得要幾台機器一起合作才行。但是卻因此而獲得了儲存大檔案的能力,顯而易見,檔案能夠要求比單個硬碟更大的空間來儲存它。

如果乙個檔案的使用,需要多台機器的配合,那麼一台機器的故障將會導致該檔案的不可用。hdfs通過為檔案的每乙個塊都做備份的方式來解決這個問題(通常,有3個備份)。

圖 2.1: datanodes 儲存著檔案的檔案塊 ,備份的數量是2 。namenode 結點負責將檔名對映到檔案塊的id上。

多數塊結構的檔案系統使用4k或者8k 數量級別的塊大小。相比之下,hdfs的塊大小預設下是64mb---乙個大很多的數量級別。這個設計減少了hdfs持有的檔案塊的數量(檔案塊的容量大的時候,塊的數量就會相應的減少了)。這樣做更有利於流式讀取方式。顯而易見,hdfs 非常喜歡 特大的檔案,並且更喜歡流式地讀取它們。不像ntfs 或ext這樣的檔案系統,它們通常儲存很多的小檔案,hdfs更希望儲存適中數量的特大檔案,幾百m的、幾百g的。畢竟,乙個100m的檔案也才不過兩個檔案塊而已。在我們平常的計算機中,檔案通常是被隨機訪問的,應用程式可能會讀取乙個檔案的不同的幾個部分,這些部分通常不是連續的儲存在硬碟上的。相比之下,hdfs期望程式一次讀完整個檔案。這種做法剛好非常適合mapreduce程式設計的風格。也就是說,像平常使用一般分布式系統那樣去使用hdfs,不是乙個明智的選擇。

hdfs將檔案分成塊,並儲存在幾台機器上,這些檔案不可能被當成正常檔案系統的一部分了。在一台跑hadoop的機器上使用ls命令,返回的結果是linux系統的內容,而並不會包括任何儲存在hdfs系統裡面的檔案。hdfs是乙個建立在本地檔案系統之上的應用。hdfs的檔案(更確切的說,組成檔案的那些檔案塊) 被儲存在 datanode 結點的乙個特定的目錄下,但這些檔案塊只有id。所以,你根本就沒有辦法使用linux 檔案系統的一些工具(ls,cp,mv等等)去操作這些檔案。不用操心,hdfs 自帶了檔案管理功能,操作起來跟(ls,cp,mv)等命令一樣地簡單。

資料的可靠性是相當重要的。hdfs的資料被設計成只允許一次寫入和多次讀取操作,當大量的客戶端同時需要對檔案目錄進行修改的時候,同步工作就顯得異常重要了。所以,對檔案目錄的維護由單獨的一台機器來完成,這台機器我們稱之為namenode。namenode將會儲存 檔案系統的檔案目錄和檔名稱。因為,每個檔案需要記錄的東西是很少的(例如,檔名、許可權、檔案塊的位置等),所以,所有的資料都可以被儲存在一台機器上,並提供快速的訪問功能。

假設,客戶端要訪問檔案a。客戶端從namenode中取得組成檔案a的檔案塊的位置列表。這個列表知道檔案塊被儲存在哪台機器上。然後客戶端 直接 從datanode上讀取檔案資料。namenode是不參與檔案的傳輸的,我們要保證namenode的消耗盡可能的小。

當然,我們還有預防namenode機器崩潰的情況。我們使用冗餘來保證檔案系統的資料不會丟失,即使是在namenode忽然崩潰的情況下。顯然,namenode的崩潰要比集群裡面的任何一台datanode的崩潰要嚴重得多了。當一台datanode故障的時候,整個集群還可以繼續執行,但當namenode故障的時候,集群就無法執行了,這時候,我們得手動的採取措施修復故障。當然,namenode的工作量是相當的小的,它發生故障的概率要比其他機器發生故障的概率小得多了。

關於hdfs的設計與實現,下面的這篇文章闡述的更加詳細。document

hadoop分布式安裝

工欲善其事,必先利其器。在資料橫行的時代,我們的大神hadoop 出來了,作為分布式處理資料 不但快,而且一般用配置不高的電腦業可以做集群。那麼,現在就開始安裝我們的hadoop 進入hadoop之旅 檔案,這裡就去 apache 的命令進行解壓 tar zxvf hadoop x.tar.gz 好...

hadoop分布式快取

概念 使用distributedcache方法 1.在main方法中載入共享檔案的hdfs路徑,路徑可以是目錄也可以是檔案。可以在路徑中末位追加 別名,在map階段可以使用該別名 string cache hdfs cache cache myfile myfile是別名job.addcachefi...

hadoop偽分布式

首先是本機模式的搭建,如 1 hdfs dfs ls 檢視本地分布式檔案系統,查詢結果為你本機linux檔案系統,說明你的本地模式已經搭建成功 2 進入安裝目錄hadoop資料夾下,進入etc hadoop下對四個配置檔案進行配置 core site.xml hdfs site.xml mapred...