HDFS (Hadoop Distributed File System)

假人遷移hadoop

HDFS

HDFS (Hadoop Distributed File System)是Hadoop應用使用的主存儲係統。這個開源框架通過在節點之間快速傳輸數據來工作。它經常被需要處理和存儲大數據的公司使用。HDFS是許多Hadoop係統的關鍵組件,因為它提供了一種管理大數據以及支持大數據分析的方法。

全球有許多公司都在使用HDFS,那麼它到底是什麼?為什麼需要它?讓我們深入了解HDFS是什麼以及為什麼它可能對企業有用。

HDFS是什麼?

HDFS是Hadoop分布式文件係統的縮寫。HDFS作為一個分布式文件係統運行,旨在運行在商用硬件上。

HDFS是容錯的,設計用於部署在低成本的普通硬件上。HDFS提供對應用程序數據的高吞吐量數據訪問,適用於具有大數據集的應用程序,並支持對文件係統數據的流式訪問Apache Hadoop

所以,Hadoop是什麼?它與HDFS有什麼不同?Hadoop和HDFS的核心區別在於,Hadoop是一個開源框架,可以存儲、處理和分析數據,而HDFS是Hadoop的文件係統,提供對數據的訪問。這實際上意味著HDFS是Hadoop的一個模塊。

讓我們來看看HDFS的架構:

hdsarchitecture形象

正如我們所看到的,它主要關注namenode和datanode。NameNode是包含GNU/Linux操作係統和軟件的硬件。Hadoop分布式文件係統作為主服務器,對文件進行管理,控製客戶端對文件的訪問,以及對文件的重命名、打開、關閉等海外文件操作過程。

DataNode是安裝了GNU/Linux操作係統和DataNode軟件的硬件。對於HDFS集群中的每個節點,您將找到一個DataNode。這些節點有助於控製其係統的數據存儲,因為它們可以在客戶端請求時對文件係統執行操作,還可以在NameNode指示時創建、複製和阻塞文件。

HDFS的意義和目的是實現以下目標:

  • 管理大型數據集-組織和存儲數據集可能是一個很難處理的問題。HDFS用於管理必須處理龐大數據集的應用程序。要做到這一點,HDFS每個集群應該有數百個節點。
  • 檢測故障HDFS應該有技術來快速有效地掃描和檢測故障,因為它包含大量的商用硬件。組件故障是一個常見的問題。
  • 硬件效率-當涉及大型數據集時,可以減少網絡流量,提高處理速度。

HDFS的曆史

Hadoop的起源是什麼?HDFS的設計基於穀歌文件係統。它最初是作為Apache Nutch網絡搜索引擎項目的基礎設施而構建的,但後來成為了Hadoop生態係統

在互聯網的早期,網絡爬蟲開始作為人們在網頁上搜索信息的一種方式而出現。這創造了各種搜索引擎,如雅虎和b穀歌。

它還創建了另一個名為Nutch的搜索引擎,該引擎希望同時在多台計算機上分發數據和計算。Nutch隨後轉投雅虎,並被分成兩部分。Apache Spark和Hadoop都是各自獨立的實體。Hadoop是為處理批處理而設計的,而Spark是為高效處理實時數據而設計的。

如今,Hadoop的結構和框架由Apache軟件基金會管理,Apache軟件基金會是一個由軟件開發人員和貢獻者組成的全球社區。

HDFS由此誕生,旨在用一種更好、更有效的方法——虛擬文件係統——取代硬件存儲解決方案。當MapReduce首次出現時,它是唯一可以使用HDFS的分布式處理引擎。最近,像HBase和Solr這樣的Hadoop數據服務組件也使用HDFS來存儲數據。

HDFS在大數據的世界裏是什麼?

那麼,什麼是大數據,HDFS又是如何進入其中的呢?“大數據”一詞指的是所有難以存儲、處理和分析的數據。HDFS大數據是組織在HDFS文件係統中的數據。

正如我們現在所知,Hadoop是一個使用並行處理和分布式存儲的框架。這可以用來排序和存儲大數據,因為它不能以傳統的方式存儲。

事實上,它是處理大數據最常用的軟件,Netflix、Expedia和英國航空等公司都在使用它與Hadoop的關係用於數據存儲。HDFS在大數據中是至關重要的,因為這是許多企業現在選擇存儲數據的方式。

HDFS服務組織的大數據有五個核心元素:

  • 速度-數據生成、整理和分析的速度。
  • 體積—生成的數據量。
  • 各種-數據的類型,這可以是結構化的,非結構化的等。
  • 真實性—數據的質量和準確性。
  • 價值-如何使用這些數據深入了解業務流程。

Hadoop分布式文件係統的優勢

作為Hadoop的一個開源子項目,HDFS在處理大數據時提供了五個核心優勢:

  1. 容錯。HDFS的設計是檢測故障並快速自動恢複,確保連續性和可靠性。
  2. 速度由於采用集群架構,它每秒可以維護2gb的數據。
  3. 訪問更多類型的數據,特別是流數據。由於它的設計是為了處理批量處理的大量數據,因此它允許高數據吞吐率,使其成為支持流數據的理想選擇。
  4. 兼容性和可移植性。HDFS被設計成可在各種硬件設置中移植,並與幾個底層操作係統兼容,最終為用戶提供了在自己定製的設置中使用HDFS的可選性。這些優勢在處理大數據時尤為顯著,並且通過HDFS處理數據的特殊方式成為可能。

    該圖展示了本地文件係統和HDFS之間的區別。

    hadoop的hdfs

  5. 可伸縮的。您可以根據文件係統的大小來擴展資源。HDFS包括垂直和水平擴展機製。
  6. 數據本地化。當涉及到Hadoop文件係統時,數據駐留在數據節點中,而不是讓數據移動到計算單元所在的位置。通過縮短數據和計算過程之間的距離,減少網絡擁塞,使係統更加高效。
  7. 成本效益。最初,當我們想到數據時,我們可能會想到昂貴的硬件和占用的帶寬。當硬件出現故障時,修複它的成本可能非常高。使用HDFS,數據的存儲成本較低,因為它是虛擬的,這可以大大降低文件係統元數據和文件係統命名空間數據存儲成本。更重要的是,由於HDFS是開源的,企業不需要擔心支付許可費用。
  8. 存儲大量數據。數據存儲是HDFS的全部內容——意味著各種類型和大小的數據——特別是來自公司的大量數據,這些數據正在努力存儲。這包括結構化和非結構化數據。
  9. 靈活的。與其他一些更傳統的存儲數據庫不同,在存儲之前不需要處理收集的數據。您可以存儲盡可能多的數據,並有機會決定您想要使用它做什麼以及以後如何使用它。這還包括非結構化數據,如文本、視頻和圖像。

如何使用HDFS

那麼,如何使用HDFS呢?HDFS使用一個主NameNode和多個其他數據節點,所有這些節點都在一個商品硬件集群上。這些節點組織在數據中心內的相同位置。接下來,將其分解為塊,這些塊分布在多個datanode中進行存儲。為了減少數據丟失的可能性,塊通常跨節點複製。這是數據丟失時的備份係統。

讓我們看一下namenode。NameNode是集群中的節點,它知道數據包含什麼,它屬於哪個塊,塊大小以及它應該去哪裏。namenode還用於控製對文件的訪問,包括何時可以跨各種數據注釋寫入、讀取、創建、刪除和複製數據。

還可以根據服務器容量在必要時實時調整集群,這在數據激增時非常有用。可以根據需要添加或刪除節點。

現在,進入datanode。datanode與namenode保持持續通信,以確定它們是否需要開始並完成任務。這種一致的協作流意味著NameNode能夠敏銳地意識到每個datanode的狀態。

當一個DataNode被挑出沒有按應有的方式運行時,命名模式能夠自動地將該任務重新分配給同一數據鎖中的另一個正常運行的節點。類似地,datanode也能夠相互通信,這意味著它們可以在標準文件操作期間進行協作。因為NameNode知道datanode及其性能,所以它們對於維護係統至關重要。

數據鎖跨多個數據點複製,並由NameNode訪問。

要使用HDFS,您需要安裝和設置Hadoop集群。這可以是更適合首次使用的單個節點設置,也可以是適合大型分布式集群的集群設置。然後,您需要熟悉HDFS命令,例如下麵的命令,以操作和管理您的係統。

命令

描述

rm

刪除文件或目錄

- ls

列出具有權限和其他詳細信息的文件

mkdir

在HDFS中創建名為path的目錄

顯示文件的內容

刪除文件夾

刪除目錄

——

從本地磁盤上傳文件或文件夾到HDFS

-rmr

刪除由路徑或文件夾和子文件夾標識的文件

在閑暇

將文件或文件夾從HDFS移動到本地文件

統計文件數、目錄數和文件大小

df

顯示空閑空間

-getmerge

合並HDFS中的多個文件

修改文件權限

更改文件權限

-copyToLocal

將文件複製到本地係統

統計

打印文件或目錄的統計信息

——頭

顯示文件的第一個千字節

使用

返回單個命令的幫助

喬恩

為文件分配新的所有者和組

HDFS是如何工作的?

如前所述,HDFS使用namenode和datanode。HDFS允許在計算節點之間快速傳輸數據。當HDFS接收數據時,它能夠將信息分解成塊,將它們分發到集群中的不同節點。

數據被分解成塊並分布在datanode之間進行存儲,這些塊也可以跨節點複製,從而允許有效的並行處理。您可以通過各種命令訪問、移動和查看數據。HDFS DFS選項,如“-”“——”允許您根據需要檢索和移動數據。

更重要的是,HDFS的設計是高度警覺的,可以快速檢測故障。文件係統使用數據複製來確保每個數據塊被保存多次,然後在各個節點之間分配,確保至少有一個副本位於與其他副本不同的機架上。

這意味著當DataNode不再向NameNode發送信號時,它將從集群中移除DataNode並在沒有它的情況下運行。如果該數據節點返回,則可以將其分配給新的集群。另外,由於數據鎖是跨多個datanode複製的,因此刪除一個數據鎖不會導致任何類型的文件損壞。

HDFS組件

重要的是要知道Hadoop有三個主要組件。Hadoop HDFS、Hadoop MapReduce、Hadoop YARN。讓我們來看看這些組件給Hadoop帶來了什麼:

  • Hadoop的HDFS—HDFS (Hadoop Distributed File System)是Hadoop的存儲單元。
  • Hadoop MapReduce—Hadoop MapReduce是Hadoop的處理單元。該軟件框架用於編寫處理大量數據的應用程序。
  • Hadoop紗—Hadoop YARN是Hadoop的一個資源管理組件。它處理和運行批處理、流處理、交互處理和圖形處理的數據——所有這些都存儲在HDFS中。

如何創建HDFS文件係統

想知道如何創建HDFS文件係統嗎?下麵的步驟將指導您如何創建係統,編輯它,並在需要時刪除它。

列出HDFS

您的HDFS清單應該如下所示/ user / yourUserName。要查看HDFS主目錄的內容,輸入:

HDFS DFS -ls

因為你剛剛開始,在這個階段你將看不到任何東西。當需要查看非空目錄的內容時,輸入:

hdfs dfs-ls/用戶

然後,您可以看到所有其他Hadoop用戶的主目錄名。

在HDFS中創建目錄

現在可以創建一個測試目錄,我們將其命名為testHDFS。它將出現在HDFS中。隻需輸入以下內容:

hdfs dfs -mkdir testdfs

現在,您必須使用在列出HDFS時輸入的命令來驗證該目錄是否存在。您應該看到列出的testdfs目錄。

使用HDFS的完整路徑名再次驗證它。輸入:

hdfs dfs-ls/用戶/yourUserName

在你采取下一步行動之前,仔細檢查這是否有效。

複製文件

要將文件從本地文件係統複製到HDFS,首先要創建一個要複製的文件。為此,輸入:

回聲“HDFS測試文件”> >測試文件

這將創建一個名為testFile的新文件,包括HDFS測試文件的字符。要驗證這一點,輸入:

ls

為了驗證文件是否已經創建,輸入:

貓測試文件

然後需要將該文件複製到HDFS。要將文件從Linux複製到HDFS,您需要使用:

hdfs dfs -copyFromLocal testFile

注意,您必須使用命令“-copyFromLocal”因為命令“- cp”用於複製HDFS內的文件。

現在您隻需要確認文件已被正確複製。輸入以下命令:

代碼>hdfs DFS -lshdfs dfs -cat testFile

移動和複製文件

在複製testfile時,它被放到基本主目錄中。現在可以將它移動到已經創建的testdfs目錄中。使用以下方法:

hdfs dfs -mv testFileHDFS DFS -lshdfs dfs -ls testdfs /

第一部分將testFile從HDFS主目錄移到您創建的測試目錄中。這個命令的第二部分告訴我們它不再在HDFS的主目錄中,第三部分確認它現在被移動到test HDFS目錄中。

要複製一個文件,輸入:

hdfs dfs -cp testthdfs /testFile testthdfs /testFile2 . hdfshdfs dfs -ls testdfs /

檢查磁盤使用情況

當您使用HDFS時,檢查磁盤空間非常有用。為此,您可以輸入以下命令:

HDFS DFS -du

這將允許您查看在HDFS中使用了多少空間。您還可以通過輸入以下命令查看整個集群中HDFS的可用空間:

HDFS DFS -df

刪除文件/目錄

有時,您可能需要刪除HDFS中的文件或目錄。這可以通過以下命令實現:

hdfs dfs -rm testdfs /testFilehdfs dfs -ls testdfs /

您將看到仍然保留了創建的testthdfs目錄和testFile2。通過輸入:

HDFS DFS -rmdir testdfs

然後會彈出一個錯誤信息——但是不要驚慌。它會像這樣"rmdir: testdfs:目錄不是空的"。該目錄必須為空才能刪除。你可以使用“rm”命令繞過此命令,並刪除包含其包含的所有文件的目錄。輸入:

hdfs dfs -rm -r testdfsHDFS DFS -ls

如何安裝HDFS

要安裝Hadoop,您需要記住有一個單節點和一個多節點。根據您的需求,您可以使用單節點或多節點集群。

單節點集群是指隻有一個DataNode在運行。它將包括一台機器上的NameNode、DataNode、資源管理器和節點管理器。

對於某些行業來說,這就是所需要的一切。例如,在醫學領域,如果您正在進行研究,並且需要按順序收集、排序和處理數據,則可以使用單節點集群。與分布在數百台機器上的數據相比,這可以輕鬆地處理較小規模的數據。要安裝單節點集群,請遵循以下步驟:

  1. 下載Java 8軟件包。將此文件保存在主目錄中。
  2. 解壓縮Java Tar文件。
  3. 下載Hadoop 2.7.3軟件包。
  4. 解壓縮Hadoop tar文件。
  5. 在bash文件中添加Hadoop和Java路徑(. bashrc).
  6. 編輯Hadoop配置文件。
  7. 打開core-site.xml並編輯屬性。
  8. 編輯hdfs-site.xml然後編輯屬性。
  9. 編輯mapred-site.xml文件和編輯屬性。
  10. 編輯yarn-site.xml然後編輯屬性。
  11. 編輯hadoop-env.sh並添加Java路徑。
  12. 進入Hadoop主目錄,格式化NameNode文件。
  13. hadoop-2.7.3 / sbin目錄並啟動所有守護進程。
  14. 檢查所有Hadoop服務是否正常運行。

現在,您應該已經成功安裝了HDFS。

如何訪問HDFS文件

當涉及到HDFS時,考慮到我們正在處理數據,安全性是嚴格的,這一點也不奇怪。由於HDFS在技術上是虛擬存儲,它跨越集群,因此您隻能看到文件係統上的元數據,而無法查看實際的特定數據。

要訪問HDFS文件,可以下載“罐子”文件從HDFS到本地文件係統。您也可以通過web用戶界麵訪問HDFS。隻需打開瀏覽器並鍵入即可“localhost: 50070”進入搜索欄。從這裏,您可以看到HDFS的web用戶界麵,並移動到右側的utilities選項卡。然後單擊“browse file system”,這將顯示位於HDFS上的文件的完整列表。

HDFS DFS示例

下麵是一些最常見的Hadoop命令示例。

一個例子

要刪除一個目錄,你需要應用以下命令(注意:這隻能在文件為空的情況下執行):

Hadoop美元Fs -rmdir /目錄- name

hdfs美元DFS -rmdir /目錄- name

例B

當一個HDFS中有多個文件時,可以使用“-getmerge”命令。這會將多個文件合並為一個文件,然後您可以將其下載到本地文件係統。您可以使用以下命令:

$ Hadoop fs-getmerge [-問)//當地的-目的地

$ HDFS DFS-getmerge [-問)//當地的-目的地

示例C

當需要將文件從HDFS上傳到本地時,可以使用“-put”命令。您指定要從哪裏複製,以及要複製到HDFS的文件。使用下麵的句子:

$ Hadoop fs-/當地的-文件-路徑/hdfs-文件-路徑

$ HDFS DFS-/當地的-文件-路徑/hdfs-文件-路徑

例D

count命令用於跟蹤HDFS上的目錄數、文件數和文件大小。您可以使用以下方法:

Hadoop fs -count /hdfs-file-path

$ HDFS DFS -count / HDFS -file-path

例如E

chown命令用於修改文件的屬主和組。要激活它,使用下麵的命令:

$ Hadoop fs-喬恩(-R][所有者][:(集團]] hdfs-文件-路徑

$ HDFS DFS-喬恩(-R][所有者][:(集團]] hdfs-文件-路徑

HDFS存儲是什麼?

正如我們現在所知,HDFS數據存儲在稱為塊的東西中。這些塊是文件係統可以存儲的最小的數據單元。文件被處理並分解成這些塊,然後這些塊被獲取並分布在整個集群中——為了安全起見,還會進行複製。通常,每個塊可以複製三次。這張圖展示了大數據以及如何使用HDFS存儲大數據。

主要qimg

第一個數據存儲在DataNode上,第二個數據存儲在集群中的單獨DataNode上,第三個數據存儲在不同集群中的DataNode上。這就像是三重保護的安全步驟。因此,如果最壞的情況發生,一個副本失敗,數據也不會永遠消失。

NameNode保存重要信息,例如塊的數量和副本的存儲位置。相比之下,DataNode存儲的是實際的數據,並且可以根據命令創建、刪除和複製塊。它是這樣的:

在hdfs-site.xmldfs.NameNode.name.dirfile:/ Hadoop /hdfs / NameNode
dfs.DataNode.data.dir文件:/ Hadoop /hdfs / DataNodeDfs.DataNode.data.dir

這決定了datanode應該在哪裏存儲它的塊。

HDFS如何存儲數據?

HDFS文件係統由一組Master服務(NameNode、從NameNode和datanode)組成。NameNode和從NameNode管理HDFS的元數據。datanode托管底層HDFS數據。

NameNode跟蹤HDFS中哪些datanode包含給定文件的內容。HDFS將文件分成塊,並將每個塊存儲在DataNode上。集群中存在多個datanode。然後,NameNode在整個集群中分發這些數據塊的副本。它還指示用戶或應用程序在哪裏找到需要的信息。

Hadoop分布式文件係統(HDFS)被設計用來處理什麼?

簡單地說,當問到“Hadoop分布式文件係統設計用來處理什麼?”答案首先是大數據。這對於大型公司來說是非常寶貴的,否則它們將難以管理和存儲來自其業務和客戶的數據。beplay体育app下载地址

使用Hadoop,您可以存儲和統一數據,無論是事務性數據、科學數據、社交媒體數據、廣告數據還是機器數據。這也意味著您可以回到這些數據中,並獲得有關業務績效和分析的寶貴見解。

由於HDFS是為存儲數據而設計的,它也可以處理原始數據,這些數據通常被科學家或醫療領域的人使用,他們希望分析這些數據。這些被稱為數據湖。它使他們能夠不受限製地解決更困難的問題。

更重要的是,由於Hadoop主要設計用於以各種方式處理大量數據,因此它也可以用於運行用於分析目的的算法。這意味著它可以幫助企業更有效地處理和分析數據,使他們能夠發現新的趨勢和異常。某些數據集甚至從數據倉庫中移出,轉移到Hadoop。它隻是使它更容易存儲所有的東西在一個容易接近的地方。

當涉及到事務性數據時,Hadoop還可以處理數百萬個事務。由於其存儲和處理能力,它可以用於存儲和分析客戶數據。您還可以深入研究數據以發現新出現的趨勢和模式,從而幫助實現業務目標。不要忘記,Hadoop會不斷更新新數據,您可以比較新舊數據,了解哪些數據發生了變化,以及變化的原因。

使用HDFS的注意事項

默認情況下,HDFS配置了3倍複製,這意味著數據集將有兩個額外的副本。雖然這提高了處理過程中本地化數據的可能性,但它確實帶來了額外的存儲成本。

  • 當配置本地附加存儲時,HDFS工作得最好。這確保了文件係統的最佳性能。
  • 增加HDFS的容量需要增加新的服務器(計算、內存、磁盤),而不僅僅是存儲介質。

HDFS與雲對象存儲

如上所述,HDFS的容量與計算資源是緊密耦合的。增加存儲容量需要增加CPU資源,即使後者不是必需的。當向HDFS中添加更多數據節點時,需要進行rebalance操作,將現有數據分發到新添加的服務器上。

這個操作可能需要一些時間。從成本和空間的角度來看,在本地環境中擴展Hadoop集群也很困難。HDFS使用本地附加存儲,如果YARN可以在存儲待處理數據的服務器上提供處理,則可以提供IO性能優勢。

在高度利用的環境中,大多數數據讀/寫操作可能會通過網絡而不是本地進行。雲對象存儲包括Azure數據湖存儲、AWS S3、穀歌雲存儲等技術。它獨立於訪問它的計算資源,因此客戶可以在雲中存儲更大量的數據。beplay体育app下载地址

beplay体育app下载地址希望存儲pb級數據的客戶可以在雲對象存儲中輕鬆實現這一點。然而,所有對雲存儲的讀寫操作都將通過網絡進行。因此,訪問其數據的應用程序在可能的情況下利用緩存或包含邏輯以最小化IO操作是很重要的。

額外的資源

返回術語表
Baidu
map