HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    hdfs底層原理(hdfs基本原理)

    發(fā)布時間:2023-04-18 20:45:25     稿源: 創(chuàng)意嶺    閱讀: 65        

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于hdfs底層原理的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    hdfs底層原理(hdfs基本原理)

    一、HDFS簡介:不用HDFS我們?nèi)绾未鎯Υ笠?guī)模數(shù)據(jù)

            大數(shù)據(jù)技術(shù)主要是要解決大規(guī)模數(shù)據(jù)的計(jì)算處理問題,但是我們要想對數(shù)據(jù)進(jìn)行計(jì)算,首先要解決的其實(shí)是大規(guī)模數(shù)據(jù)的存儲問題。

             如果一個文件的大小超過了一張磁盤的大小,你該如何存儲? 單機(jī)時代,主要的解決方案是 RAID ;分布式時代,主要解決方案是 分布式文件系統(tǒng) 。

               其實(shí)不論是在 RAID 還是 分布式文件系統(tǒng) ,大規(guī)模數(shù)據(jù)存儲都需要解決幾個核心問題,這些問題都是什么呢?總結(jié)一下,主要有以下三個方面。       

            1. 數(shù)據(jù)存儲容量的問題。 既然大數(shù)據(jù)要解決的是數(shù)以 PB 計(jì)的數(shù)據(jù)計(jì)算問題,而一般的服務(wù)器磁盤容量通常 1~2TB,那么如何存儲這么大規(guī)模的數(shù)據(jù)呢?

            2. 數(shù)據(jù)讀寫速度的問題。 一般磁盤的連續(xù)讀寫速度為幾十 MB,以這樣的速度,幾十 PB 的數(shù)據(jù)恐怕要讀寫到天荒地老。

            3. 數(shù)據(jù)可靠性的問題。 磁盤大約是計(jì)算機(jī)設(shè)備中最易損壞的硬件了,通常情況一塊磁盤使用壽命大概是一年,如果磁盤損壞了,數(shù)據(jù)怎么辦?

            RAID(獨(dú)立磁盤冗余陣列)技術(shù)是將多塊普通磁盤組成一個陣列,共同對外提供服務(wù)。主要是為了改善磁盤的存儲容量、讀寫速度,增強(qiáng)磁盤的可用性和容錯能力。目前服務(wù)器級別的計(jì)算機(jī)都支持插入多塊磁盤,通過使用 RAID 技術(shù),實(shí)現(xiàn)數(shù)據(jù)在多塊磁盤上的并發(fā)讀寫和數(shù)據(jù)備份。

            常用 RAID 技術(shù)有圖中下面這幾種,RAID0,RAID1,RAID10,RAID5, RAID6。

               首先,我們先假設(shè)服務(wù)器有 N 塊磁盤。

                RAID 0  是數(shù)據(jù)在從內(nèi)存緩沖區(qū)寫入磁盤時,根據(jù)磁盤數(shù)量將數(shù)據(jù)分成 N 份,這些數(shù)據(jù)同時并發(fā)寫入 N 塊磁盤,使得數(shù)據(jù)整體寫入速度是一塊磁盤的 N 倍;讀取的時候也一樣,因此 RAID 0 具有極快的數(shù)據(jù)讀寫速度。但是 RAID 0 不做數(shù)據(jù)備份,N 塊磁盤中只要有一塊損壞,數(shù)據(jù)完整性就被破壞,其他磁盤的數(shù)據(jù)也都無法使用了。

                RAID 1 是數(shù)據(jù)在寫入磁盤時,將一份數(shù)據(jù)同時寫入兩塊磁盤,這樣任何一塊磁盤損壞都不會導(dǎo)致數(shù)據(jù)丟失,插入一塊新磁盤就可以通過復(fù)制數(shù)據(jù)的方式自動修復(fù),具有極高的可靠性。

               結(jié)合 RAID 0 和 RAID 1 兩種方案構(gòu)成了 RAID 10 ,它是將所有磁盤 N 平均分成兩份,數(shù)據(jù)同時在兩份磁盤寫入,相當(dāng)于 RAID 1;但是平分成兩份,在每一份磁盤(也就是 N/2 塊磁盤)里面,利用 RAID 0 技術(shù)并發(fā)讀寫,這樣既提高可靠性又改善性能。不過 RAID 10 的磁盤利用率較低,有一半的磁盤用來寫備份數(shù)據(jù)。

               一般情況下,一臺服務(wù)器上很少出現(xiàn)同時損壞兩塊磁盤的情況,在只損壞一塊磁盤的情況下,如果能利用其他磁盤的數(shù)據(jù)恢復(fù)損壞磁盤的數(shù)據(jù),這樣在保證可靠性和性能的同時,磁盤利用率也得到大幅提升。

               順著這個思路, RAID 3  可以在數(shù)據(jù)寫入磁盤的時候,將數(shù)據(jù)分成 N-1 份,并發(fā)寫入 N-1 塊磁盤,并在第 N 塊磁盤記錄校驗(yàn)數(shù)據(jù),這樣任何一塊磁盤損壞(包括校驗(yàn)數(shù)據(jù)磁盤),都可以利用其他 N-1 塊磁盤的數(shù)據(jù)修復(fù)。但是在數(shù)據(jù)修改較多的場景中,任何磁盤數(shù)據(jù)的修改,都會導(dǎo)致第 N 塊磁盤重寫校驗(yàn)數(shù)據(jù)。頻繁寫入的后果是第 N 塊磁盤比其他磁盤更容易損壞,需要頻繁更換,所以 RAID 3 很少在實(shí)踐中使用,因此在上面圖中也就沒有單獨(dú)列出。

               相比 RAID 3, RAID 5 是使用更多的方案。RAID 5 和 RAID 3 很相似,但是校驗(yàn)數(shù)據(jù)不是寫入第 N 塊磁盤,而是螺旋式地寫入所有磁盤中。這樣校驗(yàn)數(shù)據(jù)的修改也被平均到所有磁盤上,避免 RAID 3 頻繁寫壞一塊磁盤的情況。

                如果數(shù)據(jù)需要很高的可靠性,在出現(xiàn)同時損壞兩塊磁盤的情況下,仍然需要修復(fù)數(shù)據(jù),這時候可以使用 RAID 6。

                 RAID 6 和 RAID 5 類似 , 但是數(shù)據(jù)只寫入 N-2 塊磁盤,并螺旋式地在兩塊磁盤中寫入校驗(yàn)信息(使用不同算法生成)。

                從下面表格中你可以看到在相同磁盤數(shù)目(N)的情況下,各種 RAID 技術(shù)的比較。

            現(xiàn)在我來總結(jié)一下,看看 RAID 是如何解決我一開始提出的,關(guān)于存儲的三個關(guān)鍵問題。

             1. 數(shù)據(jù)存儲容量的問題。 RAID 使用了 N 塊磁盤構(gòu)成一個存儲陣列,如果使用 RAID 5,數(shù)據(jù)就可以存儲在 N-1 塊磁盤上,這樣將存儲空間擴(kuò)大了 N-1 倍。

             2. 數(shù)據(jù)讀寫速度的問題。 RAID 根據(jù)可以使用的磁盤數(shù)量,將待寫入的數(shù)據(jù)分成多片,并發(fā)同時向多塊磁盤進(jìn)行寫入,顯然寫入的速度可以得到明顯提高;同理,讀取速度也可以得到明顯提高。不過,需要注意的是,由于傳統(tǒng)機(jī)械磁盤的訪問延遲主要來自于尋址時間,數(shù)據(jù)真正進(jìn)行讀寫的時間可能只占據(jù)整個數(shù)據(jù)訪問時間的一小部分,所以數(shù)據(jù)分片后對 N 塊磁盤進(jìn)行并發(fā)讀寫操作并不能將訪問速度提高 N 倍。

             3. 數(shù)據(jù)可靠性的問題。 使用 RAID 10、RAID 5 或者 RAID 6 方案的時候,由于數(shù)據(jù)有冗余存儲,或者存儲校驗(yàn)信息,所以當(dāng)某塊磁盤損壞的時候,可以通過其他磁盤上的數(shù)據(jù)和校驗(yàn)數(shù)據(jù)將丟失磁盤上的數(shù)據(jù)還原。

            RAID 可以看作是一種垂直伸縮,一臺計(jì)算機(jī)集成更多的磁盤實(shí)現(xiàn)數(shù)據(jù)更大規(guī)模、更安全可靠的存儲以及更快的訪問速度。而 HDFS 則是水平伸縮,通過添加更多的服務(wù)器實(shí)現(xiàn)數(shù)據(jù)更大、更快、更安全存儲與訪問。

            RAID 技術(shù)只是在單臺服務(wù)器的多塊磁盤上組成陣列,大數(shù)據(jù)需要更大規(guī)模的存儲空間和更快的訪問速度。將 RAID 思想原理應(yīng)用到分布式服務(wù)器集群上,就形成了 Hadoop 分布式文件系統(tǒng) HDFS 的架構(gòu)思想。

    二、四.(一)HDFS優(yōu)缺點(diǎn)

    Hadoop中HDFS優(yōu)缺點(diǎn)

    HDFS的優(yōu)點(diǎn):

            1、處理超大文件

                    這里的超大文件通常是指百M(fèi)B、甚至數(shù)百TB大小的文件。目前在實(shí)際應(yīng)用中,HDFS已經(jīng)能用來存儲管理PB級的數(shù)據(jù)了。

            2、流式的訪問數(shù)據(jù)

                    HDFS的設(shè)計(jì)建立在“一次寫入、多次讀寫”任務(wù)的基礎(chǔ)上。這意味著一個數(shù)據(jù)集一旦由數(shù)據(jù)源生成,就會被復(fù)制分發(fā)到不同的存儲節(jié)點(diǎn)中,然后響應(yīng)各種各樣的數(shù)據(jù)分析任務(wù)請求。在多數(shù)情況下,分析任務(wù)都會涉及數(shù)據(jù)集中的大部分?jǐn)?shù)據(jù),也就是說,對HDFS來說,請求讀取整個數(shù)據(jù)集要比讀取一條記錄更加高效。

            3、運(yùn)行于廉價的商用機(jī)器集群上

                    Hadoop設(shè)計(jì)對應(yīng)急需求比較低,只須運(yùn)行在低廉的商用硬件集群上,而無需在昂貴的高可用性機(jī)器上。廉價的商用機(jī)也就意味著大型集群中出現(xiàn)節(jié)點(diǎn)故障情況的概率非常高。HDFS遇到了上述故障時,被設(shè)計(jì)成能夠繼續(xù)運(yùn)行且不讓用戶察覺到明顯的中斷。

    HDFS的缺點(diǎn):

            1、不適合低延遲數(shù)據(jù)訪問

                    如果要處理一些用戶要求時間比較短的低延遲應(yīng)用請求,則HDFS不適合。HDFS是為了處理大型數(shù)據(jù)集分析任務(wù)的,主要是為達(dá)到高的數(shù)據(jù)吞吐量而設(shè)計(jì)的,這就可能要求以高延遲作為代價。

    改進(jìn)策略:

                            對于那些有低延時要求的應(yīng)用程序,HBase是一個更好的選擇,通過上層數(shù)據(jù)管理項(xiàng)目盡可能地彌補(bǔ)這個不足。在性能上有了很大的提升,它的口號是goes real time。使用緩存或多個master設(shè)計(jì)可以降低Clinet的數(shù)據(jù)請求壓力,以減少延時。

            2、無法高效存儲大量的小文件

                    因?yàn)镹ameNode把文件系統(tǒng)的元數(shù)據(jù)放置在內(nèi)存中,所有文件系統(tǒng)所能容納的文件數(shù)目是由NameNode的內(nèi)存大小來決定。還有一個問題就是,因?yàn)镸apTask的數(shù)量是由Splits來決定的,所以用MR處理大量的小文件時,就會產(chǎn)生過多的MapTask,線程管理開銷將會增加作業(yè)時間。當(dāng)Hadoop處理很多小文件(文件大小小于HDFS中Block大小)的時候,由于FileInputFormat不會對小文件進(jìn)行劃分,所以每一個小文件都會被當(dāng)做一個Split并分配一個Map任務(wù),導(dǎo)致效率底下。

                    例如:一個1G的文件,會被劃分成16個64MB的Split,并分配16個Map任務(wù)處理,而10000個100Kb的文件會被10000個Map任務(wù)處理。

    改進(jìn)策略:

                            要想讓HDFS能處理好小文件,有不少方法。利用SequenceFile、MapFile、Har等方式歸檔小文件,這個方法的原理就是把小文件歸檔起來管理,HBase就是基于此的。

            3、不支持多用戶寫入及任意修改文件

                    在HDFS的一個文件中只有一個寫入者,而且寫操作只能在文件末尾完成,即只能執(zhí)行追加操作,目前HDFS還不支持多個用戶對同一文件的寫操作,以及在文件任意位置進(jìn)行修改。

    三、Hadoop如何處理?如何增強(qiáng)Hadoop 安全?

    Hadoop是由Apache開源軟件基金會開發(fā)的,運(yùn)行于大規(guī)模普通服務(wù)器上的分布式系統(tǒng)基礎(chǔ)架構(gòu),用于大規(guī)模數(shù)據(jù)的存儲、計(jì)算、分析等。通過使用Hadoop平臺用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,充分利用集群的威力進(jìn)行高速運(yùn)算和存儲。2007年雅虎發(fā)布了第一個Apache Hadoop版本0.14.1;2008年雅虎用Hadoop做到全網(wǎng)尺度的搜索;2009年雅虎把內(nèi)部版本全部開源,于是IBM也加入Hadoop的開發(fā)陣營;2010年Facebook宣布正式運(yùn)行世界最大的Hadoop集群;2011年Apache Hadoop1.0版本發(fā)布;2012年Apache Hadoop2.0版本發(fā)布。下面具體介紹一下Hadoop系統(tǒng)的架構(gòu)。

    Hadoop由許多元素構(gòu)成,如下圖圖所示,包括HBase、Hive、Pig、Chukwa、Oozie和ZooKeeper等,但是其核心組件為HDFS和MapReduce。

    hdfs底層原理(hdfs基本原理)

    HDFS是Hadoop Distributed File System系統(tǒng)的縮寫,是一個使用JAVA語言實(shí)現(xiàn)的、分布式的、可擴(kuò)展的文件系統(tǒng),它存儲 Hadoop 集群中所有存儲節(jié)點(diǎn)上的文件,由NameNode和DataNode兩部分組成。HDFS的上一層是 MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成,用來對存儲在HDFS上的數(shù)據(jù)進(jìn)行計(jì)算分析。下面來具體介紹HDFS和MapReduce的工作原理及應(yīng)用。

    HDFS

    HDFS采用master/slave架構(gòu)。一個HDFS集群是由一個Namenode和一定數(shù)目的Datanodes組成。Namenode是一個中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。集群中的Datanode是集群中的數(shù)據(jù)節(jié)點(diǎn),用來存儲實(shí)際的數(shù)據(jù),并負(fù)責(zé)管理它所在節(jié)點(diǎn)上的數(shù)據(jù)存儲。HDFS公開了文件系統(tǒng)的名字空間,用戶能夠以文件的形式在上面存儲數(shù)據(jù)。從內(nèi)部看,一個文件被分成一個或多個數(shù)據(jù)塊,這些塊存儲在一組Datanode上。Namenode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開、關(guān)閉、重命名文件或目錄。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點(diǎn)的映射。Datanode負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫請求。在Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制,下面就具體來闡述HDFS系統(tǒng)中涉及的基本概念;

    • 數(shù)據(jù)塊(Block) HDFS和傳統(tǒng)的分布式文件系統(tǒng)一樣,也采用了數(shù)據(jù)塊的概念,將數(shù)據(jù)分割成固定大小的數(shù)據(jù)塊進(jìn)行存儲,默認(rèn)大小為64MB,塊的大小可針對每個文件配置,由客戶端任意指定,并且每個塊都有屬于自己的全局ID,作為一個獨(dú)立的單位存儲在集群服務(wù)器上。與傳統(tǒng)分布式文件系統(tǒng)不同的是,如果實(shí)際數(shù)據(jù)沒有達(dá)到塊大小時,則并不實(shí)際占用磁盤空間。
    • HDFS元數(shù)據(jù) HDFS元數(shù)據(jù)由文件系統(tǒng)目錄樹信息、文件和數(shù)據(jù)塊的對應(yīng)關(guān)系和塊的存放位置三個部分組成,文件系統(tǒng)目錄樹信息包括文件名、目錄名及文件和目錄的從屬關(guān)系,文件和目錄的大小,創(chuàng)建及最后訪問時間。文件和塊的對應(yīng)關(guān)系記錄了文件由哪些塊組成。此外元數(shù)據(jù)還記錄了塊的存放位置,包括存放塊的機(jī)器名和塊ID。
    • NameNode HDFS對元數(shù)據(jù)和實(shí)際數(shù)據(jù)采取分別存儲的方式,元數(shù)據(jù)存儲在一臺指定的服務(wù)器上,稱為NameNode,實(shí)際數(shù)據(jù)則存儲在集群中的其他機(jī)器上的文件系統(tǒng)中,稱為DataNode。NameNode是用來管理文件系統(tǒng)命名空間的組件,并且一個HDFS集群只有一臺NameNode,由于元數(shù)據(jù)存儲在NameNode上,當(dāng)NameNode出現(xiàn)故障時將導(dǎo)致整個集群無法工作。元數(shù)據(jù)保存在NameNode的內(nèi)存當(dāng)中,以便快速查詢,1G內(nèi)存大致可以存放1000000個塊對應(yīng)的元數(shù)據(jù)信息。
    • DataNode DataNode用來存儲塊的實(shí)際數(shù)據(jù),每個塊會在本地文件系統(tǒng)產(chǎn)生兩個文件,一個是實(shí)際的數(shù)據(jù)文件,另一個是塊的附加信息文件,其中包括數(shù)據(jù)的校驗(yàn)和生成時間等信息。DataNode通過心跳包(Heartbeat)與NameNode通信,當(dāng)客戶端讀取/寫入數(shù)據(jù)的時候?qū)⒅苯优cDataNode進(jìn)行通信。
    • Secondary NameNode Secondary NameNode在Hadoop集群中起到至關(guān)重要的作用,首先需要明確它并不是NameNode的備份節(jié)點(diǎn),它和NameNode運(yùn)行在不同的主機(jī)上,它主要的工作是階段性地合并NameNode的日志文件,控制NameNode日志文件的大小。此外,在NameNode硬盤損壞的情況下,Secondary NameNode也可用作數(shù)據(jù)恢復(fù),但恢復(fù)的只是部分?jǐn)?shù)據(jù)。

    HDFS架構(gòu)及工作原理

    下圖為HDFS對數(shù)據(jù)存儲的原理圖,NameNode存儲了DataNode節(jié)點(diǎn)所存儲數(shù)據(jù)的元數(shù)據(jù),即Hdfs和MapReduce兩個文件的分塊信息,假設(shè)單個文件的存儲份數(shù)為3,即每個數(shù)據(jù)塊有三份備份,那么數(shù)據(jù)在DataNode上的存儲的原則為:相同的兩個數(shù)據(jù)塊存儲在同一機(jī)架的不同的DataNode節(jié)點(diǎn)上;第三個數(shù)據(jù)塊存儲在不同機(jī)架上的DataNode節(jié)點(diǎn)上。這樣就解決了當(dāng)某個DataNode節(jié)點(diǎn)出現(xiàn)故障的時候數(shù)據(jù)丟失的問題,保障了存儲在HDFS系統(tǒng)上數(shù)據(jù)的可用性。

    hdfs底層原理(hdfs基本原理)

    Hadoop MapReduce

    MapReduce是Google公司的核心計(jì)算模型,它將運(yùn)行于大規(guī)模集群上的復(fù)雜的并行計(jì)算過程高度地抽象為兩個函數(shù):Map和Reduce。MapReduce也可以看成是一種解決問題的方法,它把一個復(fù)雜的任務(wù)分解成多個任務(wù),Map負(fù)責(zé)把任務(wù)分解成多個任務(wù),Reduce負(fù)責(zé)把分解后多任務(wù)處理的結(jié)果匯總起來。

    Hadoop中的MapReduce是一個簡易的軟件框架,基于它寫出來的應(yīng)用程序能夠運(yùn)行在由上千臺機(jī)器組成的大型集群上,并以一種可靠容錯的方式并行處理TB級別的數(shù)據(jù)集,實(shí)現(xiàn)了Hadoop在集群上的數(shù)據(jù)和任務(wù)的并行計(jì)算與處理。在并行計(jì)算中其他的種種復(fù)雜的問題,如分布式存儲、工作調(diào)度、負(fù)載均衡、容錯處理、網(wǎng)絡(luò)通信等均由MapReduce框架負(fù)責(zé)處理,編程人員可以不用關(guān)心。用MapReduce來處理的數(shù)據(jù)集必須具備這樣的特點(diǎn):待處理的數(shù)據(jù)集可以分解成許多小的數(shù)據(jù)集,并且每個小的數(shù)據(jù)集都可以完全并行地進(jìn)行處理。

    Hadoop MapReduce實(shí)現(xiàn)

    Hadoop MapReduce是基于HDFS的MapReduce編程框架實(shí)現(xiàn)的,我們把MapReduce處理的問題稱為作業(yè) (Job),并將作業(yè)分解為任務(wù) (Task),在MapReduce執(zhí)行過程中需要有兩種任務(wù)。

    • Map 把輸入的鍵/值對轉(zhuǎn)換成一組中間結(jié)果的鍵/值對.
    • Reduce 把Map任務(wù)產(chǎn)生的一組具有相同鍵的中間結(jié)果根據(jù)邏輯轉(zhuǎn)換生成較小的最終結(jié)果。

    Hadoop MapReduce的服務(wù)進(jìn)程

    Hadoop MapReduce有兩個主要的服務(wù)進(jìn)程,一個是單獨(dú)運(yùn)行在主節(jié)點(diǎn)上的JobTracker進(jìn)程,另一個是運(yùn)行在每個集群從節(jié)點(diǎn)上的TaskTracker進(jìn)程。服務(wù)進(jìn)程部署如下圖所示。

    hdfs底層原理(hdfs基本原理)

    JobTraker和NameNode運(yùn)行在同一個服務(wù)器上,我們稱為Hadoop集群的主節(jié)點(diǎn),負(fù)責(zé)接收客戶端提交的作業(yè),并將任務(wù)分配到不同的計(jì)算節(jié)點(diǎn)TaskTracker上,同時監(jiān)控作業(yè)的運(yùn)行情況,完成作業(yè)的更新和容錯處理;Tasktracker通常和DataNode裝在一起,稱為Hadoop集群的從節(jié)點(diǎn),它調(diào)用Map和Reduce執(zhí)行JobTracker指派的任務(wù),并發(fā)送心跳消息給JobTracker,向JobTracker匯報可運(yùn)行任務(wù)的數(shù)量。

    Hadoop安全機(jī)制

    Hadoop 一直缺乏安全機(jī)制,主要表現(xiàn)在以下幾個方面。

    • User to Service:NameNode或者JobTracker缺乏安全認(rèn)證機(jī)制;DataNode缺乏安全授權(quán)機(jī)制;JobTracker缺乏安全授權(quán)機(jī)制。
    • Service to Service安全認(rèn)證:Datanode與TaskTracker缺乏安全授權(quán)機(jī)制,這使得用戶可以隨意啟動假的DataNode和TaskTracker。
    • 磁盤或者通信連接沒有經(jīng)過加密。

    為了增強(qiáng)Hadoop的安全機(jī)制, 從2009年起Apache專門抽出一個團(tuán)隊(duì)為Hadoop增加安全認(rèn)證和授權(quán)機(jī)制,Apache Hadoop 1.0.0版本之后的版本添加了安全機(jī)制,但是升級到該版本后可能會導(dǎo)致Hadoop的一些應(yīng)用不可用。

    四、什么是HDFS硬盤分布式存儲?

    Namenode 是一個中心服務(wù)器,單一節(jié)點(diǎn)(簡化系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)),負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。

    文件操作,NameNode 負(fù)責(zé)文件元數(shù)據(jù)的操作,DataNode負(fù)責(zé)處理文件內(nèi)容的讀寫請求,跟文件內(nèi)容相關(guān)的數(shù)據(jù)流不經(jīng)過NameNode,只會詢問它跟哪個DataNode聯(lián)系,否則NameNode會成為系統(tǒng)的瓶頸。

    副本存放在哪些DataNode上由 NameNode來控制,根據(jù)全局情況做出塊放置決定,讀取文件時NameNode盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取時延

    Namenode 全權(quán)管理數(shù)據(jù)塊的復(fù)制,它周期性地從集群中的每個Datanode接收心跳信號和塊狀態(tài)報告(Blockreport)。接收到心跳信號意味著該Datanode節(jié)點(diǎn)工作正常。塊狀態(tài)報告包含了一個該Datanode上所有數(shù)據(jù)塊的列表。

    NameNode支持對HDFS中的目錄、文件和塊做類似文件系統(tǒng)的創(chuàng)建、修改、刪除、列表文件和目錄等基本操作。 塊存儲管理,在整個HDFS集群中有且只有唯一一個處于active狀態(tài)NameNode節(jié)點(diǎn),該節(jié)點(diǎn)負(fù)責(zé)對這個命名空間(HDFS)進(jìn)行管理。

    1、Name啟動的時候首先將fsimage(鏡像)載入內(nèi)存,并執(zhí)行(replay)編輯日志editlog的的各項(xiàng)操作;

    2、一旦在內(nèi)存中建立文件系統(tǒng)元數(shù)據(jù)映射,則創(chuàng)建一個新的fsimage文件(這個過程不需SecondaryNameNode) 和一個空的editlog;

    3、在安全模式下,各個datanode會向namenode發(fā)送塊列表的最新情況;

    4、此刻namenode運(yùn)行在安全模式。即NameNode的文件系統(tǒng)對于客服端來說是只讀的。(顯示目錄,顯示文件內(nèi)容等。寫、刪除、重命名都會失敗);

    5、NameNode開始監(jiān)聽RPC和HTTP請求

    解釋RPC:RPC(Remote Procedure Call Protocol)——遠(yuǎn)程過程通過協(xié)議,它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議;

    6、系統(tǒng)中數(shù)據(jù)塊的位置并不是由namenode維護(hù)的,而是以塊列表形式存儲在datanode中;

    7、在系統(tǒng)的正常操作期間,namenode會在內(nèi)存中保留所有塊信息的映射信息。

    存儲文件,文件被分成block存儲在磁盤上,為保證數(shù)據(jù)安全,文件會有多個副本 namenode和client的指令進(jìn)行存儲或者檢索block,并且周期性的向namenode節(jié)點(diǎn)報告它存了哪些文件的blo

    文件切分成塊(默認(rèn)大小128M),以塊為單位,每個塊有多個副本存儲在不同的機(jī)器上,副本數(shù)可在文件生成時指定(默認(rèn)3)

    NameNode 是主節(jié)點(diǎn),存儲文件的元數(shù)據(jù)如文件名,文件目錄結(jié)構(gòu),文件屬性(生成時間,副本數(shù),文件權(quán)限),以及每個文件的塊列表以及塊所在的DataNode等等

    DataNode 在本地文件系統(tǒng)存儲文件塊數(shù)據(jù),以及塊數(shù)據(jù)的校驗(yàn)和。

    可以創(chuàng)建、刪除、移動或重命名文件,當(dāng)文件創(chuàng)建、寫入和關(guān)閉之后不能修改文件內(nèi)容。

    NameNode啟動流程

    1、Name啟動的時候首先將fsimage(鏡像)載入內(nèi)存,并執(zhí)行(replay)編輯日志editlog的的各項(xiàng)操作;

    2、一旦在內(nèi)存中建立文件系統(tǒng)元數(shù)據(jù)映射,則創(chuàng)建一個新的fsimage文件(這個過程不需SecondaryNameNode) 和一個空的editlog;

    3、在安全模式下,各個datanode會向namenode發(fā)送塊列表的最新情況;

    4、此刻namenode運(yùn)行在安全模式。即NameNode的文件系統(tǒng)對于客服端來說是只讀的。(顯示目錄,顯示文件內(nèi)容等。寫、刪除、重命名都會失敗);

    5、NameNode開始監(jiān)聽RPC和HTTP請求

    解釋RPC:RPC(Remote Procedure Call Protocol)——遠(yuǎn)程過程通過協(xié)議,它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議;

    6、系統(tǒng)中數(shù)據(jù)塊的位置并不是由namenode維護(hù)的,而是以塊列表形式存儲在datanode中;

    7、在系統(tǒng)的正常操作期間,namenode會在內(nèi)存中保留所有塊信息的映射信息。

    HDFS的特點(diǎn)

    優(yōu)點(diǎn):

    1)處理超大文件

    這里的超大文件通常是指百M(fèi)B、數(shù)百TB大小的文件。目前在實(shí)際應(yīng)用中,HDFS已經(jīng)能用來存儲管理PB級的數(shù)據(jù)了。

    2)流式的訪問數(shù)據(jù)

    HDFS的設(shè)計(jì)建立在更多地響應(yīng)"一次寫入、多次讀取"任務(wù)的基礎(chǔ)上。這意味著一個數(shù)據(jù)集一旦由數(shù)據(jù)源生成,就會被復(fù)制分發(fā)到不同的存儲節(jié)點(diǎn)中,然后響應(yīng)各種各樣的數(shù)據(jù)分析任務(wù)請求。在多數(shù)情況下,分析任務(wù)都會涉及數(shù)據(jù)集中的大部分?jǐn)?shù)據(jù),也就是說,對HDFS來說,請求讀取整個數(shù)據(jù)集要比讀取一條記錄更加高效。

    3)運(yùn)行于廉價的商用機(jī)器集群上

    Hadoop設(shè)計(jì)對硬件需求比較低,只須運(yùn)行在低廉的商用硬件集群上,而無需昂貴的高可用性機(jī)器上。廉價的商用機(jī)也就意味著大型集群中出現(xiàn)節(jié)點(diǎn)故障情況的概率非常高。這就要求設(shè)計(jì)HDFS時要充分考慮數(shù)據(jù)的可靠性,安全性及高可用性。

    缺點(diǎn):

    1)不適合低延遲數(shù)據(jù)訪問

    如果要處理一些用戶要求時間比較短的低延遲應(yīng)用請求,則HDFS不適合。HDFS是為了處理大型數(shù)據(jù)集分析任務(wù)的,主要是為達(dá)到高的數(shù)據(jù)吞吐量而設(shè)計(jì)的,這就可能要求以高延遲作為代價。

    2)無法高效存儲大量小文件

    因?yàn)镹amenode把文件系統(tǒng)的元數(shù)據(jù)放置在內(nèi)存中,所以文件系統(tǒng)所能容納的文件數(shù)目是由Namenode的內(nèi)存大小來決定。一般來說,每一個文件、文件夾和Block需要占據(jù)150字節(jié)左右的空間,所以,如果你有100萬個文件,每一個占據(jù)一個Block,你就至少需要300MB內(nèi)存。當(dāng)前來說,數(shù)百萬的文件還是可行的,當(dāng)擴(kuò)展到數(shù)十億時,對于當(dāng)前的硬件水平來說就沒法實(shí)現(xiàn)了。還有一個問題就是,因?yàn)镸ap task的數(shù)量是由splits來決定的,所以用MR處理大量的小文件時,就會產(chǎn)生過多的Maptask,線程管理開銷將會增加作業(yè)時間。舉個例子,處理10000M的文件,若每個split為1M,那就會有10000個Maptasks,會有很大的線程開銷;若每個split為100M,則只有100個Maptasks,每個Maptask將會有更多的事情做,而線程的管理開銷也將減小很多。

    1280M 1個文件 10block*150字節(jié) = 1500 字節(jié) =1.5KB

    1280M 12.8M 100個 100個block*150字節(jié) = 15000字節(jié) = 15KB

    3)不支持多用戶寫入及任意修改文件

    在HDFS的一個文件中只有一個寫入者,而且寫操作只能在文件末尾完成,即只能執(zhí)行追加操作。目前HDFS還不支持多個用戶對同一文件的寫操作,以及在文件任意位置進(jìn)行修改。

    四、HDFS文件 讀寫流程

    4.1 讀文件流程

    (1) 打開分布式文件

    調(diào)用 分布式文件 DistributedFileSystem.open()方法。

    (2) 從 NameNode 獲得 DataNode 地址

    DistributedFileSystem 使用 RPC 調(diào)用 NameNode, NameNode返回存有該副本的 DataNode 地址, DistributedFileSystem 返回一個輸入流 FSDataInputStream對象, 該對象封存了輸入流DFSInputStream。

    (3) 連接到DataNode

    調(diào)用 輸入流 FSDataInputStream 的 read() 方法, 從而輸入流DFSInputStream 連接 DataNodes。

    (4) 讀取DataNode

    反復(fù)調(diào)用 read()方法, 從而將數(shù)據(jù)從 DataNode 傳輸?shù)娇蛻舳恕?/p>

    (5) 讀取另外的DataNode直到完成

    到達(dá)塊的末端時候, 輸入流 DFSInputStream 關(guān)閉與DataNode 連接,尋找下一個 DataNode。

    (6) 完成讀取, 關(guān)閉連接

    即調(diào)用輸入流 FSDataInputStream.close() 。

    4.2 寫文件流程

    (1) 發(fā)送創(chuàng)建文件請求: 調(diào)用分布式文件系統(tǒng)DistributedFileSystem.create()方法;

    (2) NameNode中創(chuàng)建文件記錄: 分布式文件系統(tǒng)DistributedFileSystem 發(fā)送 RPC 請求給namenode, namenode 檢查權(quán)限后創(chuàng)建一條記錄, 返回輸出流 FSDataOutputStream, 封裝了輸出流 DFSOutputDtream;

    (3) 客戶端寫入數(shù)據(jù): 輸出流 DFSOutputDtream 將數(shù)據(jù)分成一個個的數(shù)據(jù)包, 并寫入內(nèi)部隊(duì)列。 DataStreamer 根據(jù) DataNode 列表來要求 namenode 分配適合的新塊來存儲數(shù)據(jù)備份。一組DataNode 構(gòu)成管線(管線的 DataNode 之間使用 Socket 流式通信)

    (4) 使用管線傳輸數(shù)據(jù): DataStreamer 將數(shù)據(jù)包流式傳輸?shù)焦芫€第一個DataNode, 第一個DataNode 再傳到第二個DataNode ,直到完成。

    (5) 確認(rèn)隊(duì)列: DataNode 收到數(shù)據(jù)后發(fā)送確認(rèn), 管線的DataNode所有的確認(rèn)組成一個確認(rèn)隊(duì)列。 所有DataNode 都確認(rèn), 管線數(shù)據(jù)包刪除。

    (6) 關(guān)閉: 客戶端對數(shù)據(jù)量調(diào)用close() 方法。 將剩余所有數(shù)據(jù)寫入DataNode管線, 并聯(lián)系NameNode且發(fā)送文件寫入完成信息之前等待確認(rèn)。

    (7) NameNode確認(rèn)

    (8) 故障處理: 若過程中發(fā)生故障, 則先關(guān)閉管線, 把隊(duì)列中所有數(shù)據(jù)包添加回去隊(duì)列, 確保數(shù)據(jù)包不漏。 為另一個正常DataNode的當(dāng)前數(shù)據(jù)塊指定一個新的標(biāo)識, 并將該標(biāo)識傳送給NameNode, 一遍故障DataNode在恢復(fù)后刪除上面的不完整數(shù)據(jù)塊. 從管線中刪除故障DataNode 并把余下的數(shù)據(jù)塊寫入余下正常的DataNode。 NameNode發(fā)現(xiàn)復(fù)本兩不足時, 會在另一個節(jié)點(diǎn)創(chuàng)建一個新的復(fù)本

    以上就是關(guān)于hdfs底層原理相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    bilibili安卓hd(bilibili安卓hd版官網(wǎng))

    十大建筑設(shè)計(jì)網(wǎng)站(十大建筑設(shè)計(jì)網(wǎng)站ArchDaily)

    hassle景觀設(shè)計(jì)(archdaily景觀設(shè)計(jì))

    函授本科報名入口官網(wǎng)(函授大專報名入口官網(wǎng))

    衡量通貨膨脹的三大指標(biāo)(衡量通貨膨脹的三大指標(biāo)包括)