内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

怎么理解Hadoop中的HDFS

這篇文章給大家介紹怎么理解Hadoop中的HDFS,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

我們提供的服務(wù)有:網(wǎng)站制作、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、安定ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的安定網(wǎng)站制作公司

一、HDFS的基本概念

1.1、數(shù)據(jù)塊(block)

  • HDFS(Hadoop Distributed File System)默認(rèn)的最基本的存儲單位是64M的數(shù)據(jù)塊。

  • 和普通文件系統(tǒng)相同的是,HDFS中的文件是被分成64M一塊的數(shù)據(jù)塊存儲的。

  • 不同于普通文件系統(tǒng)的是,HDFS中,如果一個(gè)文件小于一個(gè)數(shù)據(jù)塊的大小,并不占用整個(gè)數(shù)據(jù)塊存儲空間。

1.2、元數(shù)據(jù)節(jié)點(diǎn)(Namenode)和數(shù)據(jù)節(jié)點(diǎn)(datanode)

  • 元數(shù)據(jù)節(jié)點(diǎn)用來管理文件系統(tǒng)的命名空間

    • 其將所有的文件和文件夾的元數(shù)據(jù)保存在一個(gè)文件系統(tǒng)樹中。

    • 這些信息也會在硬盤上保存成以下文件:命名空間鏡像(namespace image)及修改日志(edit log)

    • 其還保存了一個(gè)文件包括哪些數(shù)據(jù)塊,分布在哪些數(shù)據(jù)節(jié)點(diǎn)上。然而這些信息并不存儲在硬盤上,而是在系統(tǒng)啟動的時(shí)候從數(shù)據(jù)節(jié)點(diǎn)收集而成的。

  • 數(shù)據(jù)節(jié)點(diǎn)是文件系統(tǒng)中真正存儲數(shù)據(jù)的地方。

    • 客戶端(client)或者元數(shù)據(jù)信息(namenode)可以向數(shù)據(jù)節(jié)點(diǎn)請求寫入或者讀出數(shù)據(jù)塊。

    • 其周期性的向元數(shù)據(jù)節(jié)點(diǎn)回報(bào)其存儲的數(shù)據(jù)塊信息。

  • 從元數(shù)據(jù)節(jié)點(diǎn)(secondary namenode)

    • 從元數(shù)據(jù)節(jié)點(diǎn)并不是元數(shù)據(jù)節(jié)點(diǎn)出現(xiàn)問題時(shí)候的備用節(jié)點(diǎn),它和元數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)不同的事情。

    • 其主要功能就是周期性將元數(shù)據(jù)節(jié)點(diǎn)的命名空間鏡像文件和修改日志合并,以防日志文件過大。這點(diǎn)在下面會相信敘述。

    • 合并過后的命名空間鏡像文件也在從元數(shù)據(jù)節(jié)點(diǎn)保存了一份,以防元數(shù)據(jù)節(jié)點(diǎn)失敗的時(shí)候,可以恢復(fù)。

1.2.1、元數(shù)據(jù)節(jié)點(diǎn)文件夾結(jié)構(gòu)

怎么理解Hadoop中的HDFS

  • VERSION文件是java properties文件,保存了HDFS的版本號。

    • layoutVersion是一個(gè)負(fù)整數(shù),保存了HDFS的持續(xù)化在硬盤上的數(shù)據(jù)結(jié)構(gòu)的格式版本號。

    • namespaceID是文件系統(tǒng)的唯一標(biāo)識符,是在文件系統(tǒng)初次格式化時(shí)生成的。

    • cTime此處為0

    • storageType表示此文件夾中保存的是元數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。

namespaceID=1232737062

cTime=0

storageType=NAME_NODE

layoutVersion=-18

1.2.2、文件系統(tǒng)命名空間映像文件及修改日志
  • 當(dāng)文件系統(tǒng)客戶端(client)進(jìn)行寫操作時(shí),首先把它記錄在修改日志中(edit log)

  • 元數(shù)據(jù)節(jié)點(diǎn)在內(nèi)存中保存了文件系統(tǒng)的元數(shù)據(jù)信息。在記錄了修改日志后,元數(shù)據(jù)節(jié)點(diǎn)則修改內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)。

  • 每次的寫操作成功之前,修改日志都會同步(sync)到文件系統(tǒng)。

  • fsimage文件,也即命名空間映像文件,是內(nèi)存中的元數(shù)據(jù)在硬盤上的checkpoint,它是一種序列化的格式,并不能夠在硬盤上直接修改。

  • 同數(shù)據(jù)的機(jī)制相似,當(dāng)元數(shù)據(jù)節(jié)點(diǎn)失敗時(shí),則最新checkpoint的元數(shù)據(jù)信息從fsimage加載到內(nèi)存中,然后逐一重新執(zhí)行修改日志中的操作。

  • 從元數(shù)據(jù)節(jié)點(diǎn)就是用來幫助元數(shù)據(jù)節(jié)點(diǎn)將內(nèi)存中的元數(shù)據(jù)信息checkpoint到硬盤上的

  • checkpoint的過程如下:

    • 從元數(shù)據(jù)節(jié)點(diǎn)通知元數(shù)據(jù)節(jié)點(diǎn)生成新的日志文件,以后的日志都寫到新的日志文件中。

    • 從元數(shù)據(jù)節(jié)點(diǎn)用http get從元數(shù)據(jù)節(jié)點(diǎn)獲得fsimage文件及舊的日志文件。

    • 從元數(shù)據(jù)節(jié)點(diǎn)將fsimage文件加載到內(nèi)存中,并執(zhí)行日志文件中的操作,然后生成新的fsimage文件。

    • 從元數(shù)據(jù)節(jié)點(diǎn)獎(jiǎng)新的fsimage文件用http post傳回元數(shù)據(jù)節(jié)點(diǎn)

    • 元數(shù)據(jù)節(jié)點(diǎn)可以將舊的fsimage文件及舊的日志文件,換為新的fsimage文件和新的日志文件(第一步生成的),然后更新fstime文件,寫入此次checkpoint的時(shí)間。

    • 這樣元數(shù)據(jù)節(jié)點(diǎn)中的fsimage文件保存了最新的checkpoint的元數(shù)據(jù)信息,日志文件也重新開始,不會變的很大了。

怎么理解Hadoop中的HDFS

1.2.3、從元數(shù)據(jù)節(jié)點(diǎn)的目錄結(jié)構(gòu)

怎么理解Hadoop中的HDFS

1.2.4、數(shù)據(jù)節(jié)點(diǎn)的目錄結(jié)構(gòu)

怎么理解Hadoop中的HDFS

  • 數(shù)據(jù)節(jié)點(diǎn)的VERSION文件格式如下:

namespaceID=1232737062

storageID=DS-1640411682-127.0.1.1-50010-1254997319480

cTime=0

storageType=DATA_NODE

layoutVersion=-18

  • blk_<id>保存的是HDFS的數(shù)據(jù)塊,其中保存了具體的二進(jìn)制數(shù)據(jù)。

  • blk_<id>.meta保存的是數(shù)據(jù)塊的屬性信息:版本信息,類型信息,和checksum

  • 當(dāng)一個(gè)目錄中的數(shù)據(jù)塊到達(dá)一定數(shù)量的時(shí)候,則創(chuàng)建子文件夾來保存數(shù)據(jù)塊及數(shù)據(jù)塊屬性信息。

二、數(shù)據(jù)流(data flow)

2.1、讀文件的過程

  • 客戶端(client)用FileSystem的open()函數(shù)打開文件

  • DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),得到文件的數(shù)據(jù)塊信息。

  • 對于每一個(gè)數(shù)據(jù)塊,元數(shù)據(jù)節(jié)點(diǎn)返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址。

  • DistributedFileSystem返回FSDataInputStream給客戶端,用來讀取數(shù)據(jù)。

  • 客戶端調(diào)用stream的read()函數(shù)開始讀取數(shù)據(jù)。

  • DFSInputStream連接保存此文件第一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。

  • Data從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端(client)

  • 當(dāng)此數(shù)據(jù)塊讀取完畢時(shí),DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接此文件下一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。

  • 當(dāng)客戶端讀取完畢數(shù)據(jù)的時(shí)候,調(diào)用FSDataInputStream的close函數(shù)。

  • 在讀取數(shù)據(jù)的過程中,如果客戶端在與數(shù)據(jù)節(jié)點(diǎn)通信出現(xiàn)錯(cuò)誤,則嘗試連接包含此數(shù)據(jù)塊的下一個(gè)數(shù)據(jù)節(jié)點(diǎn)。

  • 失敗的數(shù)據(jù)節(jié)點(diǎn)將被記錄,以后不再連接。

怎么理解Hadoop中的HDFS

2.2、寫文件的過程

  • 客戶端調(diào)用create()來創(chuàng)建文件

  • DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),在文件系統(tǒng)的命名空間中創(chuàng)建一個(gè)新的文件。

  • 元數(shù)據(jù)節(jié)點(diǎn)首先確定文件原來不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件。

  • DistributedFileSystem返回DFSOutputStream,客戶端用于寫數(shù)據(jù)。

  • 客戶端開始寫入數(shù)據(jù),DFSOutputStream將數(shù)據(jù)分成塊,寫入data queue。

  • Data queue由Data Streamer讀取,并通知元數(shù)據(jù)節(jié)點(diǎn)分配數(shù)據(jù)節(jié)點(diǎn),用來存儲數(shù)據(jù)塊(每塊默認(rèn)復(fù)制3塊)。分配的數(shù)據(jù)節(jié)點(diǎn)放在一個(gè)pipeline里。

  • Data Streamer將數(shù)據(jù)塊寫入pipeline中的第一個(gè)數(shù)據(jù)節(jié)點(diǎn)。第一個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)塊發(fā)送給第二個(gè)數(shù)據(jù)節(jié)點(diǎn)。第二個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)發(fā)送給第三個(gè)數(shù)據(jù)節(jié)點(diǎn)。

  • DFSOutputStream為發(fā)出去的數(shù)據(jù)塊保存了ack queue,等待pipeline中的數(shù)據(jù)節(jié)點(diǎn)告知數(shù)據(jù)已經(jīng)寫入成功。

  • 如果數(shù)據(jù)節(jié)點(diǎn)在寫入的過程中失?。?/p>

    • 關(guān)閉pipeline,將ack queue中的數(shù)據(jù)塊放入data queue的開始。

    • 當(dāng)前的數(shù)據(jù)塊在已經(jīng)寫入的數(shù)據(jù)節(jié)點(diǎn)中被元數(shù)據(jù)節(jié)點(diǎn)賦予新的標(biāo)示,則錯(cuò)誤節(jié)點(diǎn)重啟后能夠察覺其數(shù)據(jù)塊是過時(shí)的,會被刪除。

    • 失敗的數(shù)據(jù)節(jié)點(diǎn)從pipeline中移除,另外的數(shù)據(jù)塊則寫入pipeline中的另外兩個(gè)數(shù)據(jù)節(jié)點(diǎn)。

    • 元數(shù)據(jù)節(jié)點(diǎn)則被通知此數(shù)據(jù)塊是復(fù)制塊數(shù)不足,將來會再創(chuàng)建第三份備份。

  • 當(dāng)客戶端結(jié)束寫入數(shù)據(jù),則調(diào)用stream的close函數(shù)。此操作將所有的數(shù)據(jù)塊寫入pipeline中的數(shù)據(jù)節(jié)點(diǎn),并等待ack queue返回成功。最后通知元數(shù)據(jù)節(jié)點(diǎn)寫入完畢。

怎么理解Hadoop中的HDFS

關(guān)于怎么理解Hadoop中的HDFS就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享題目:怎么理解Hadoop中的HDFS
鏈接分享:http://www.rwnh.cn/article34/pgcepe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、全網(wǎng)營銷推廣企業(yè)網(wǎng)站制作、電子商務(wù)品牌網(wǎng)站制作、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
儋州市| 石林| 纳雍县| 汕尾市| 贞丰县| 贞丰县| 海南省| 石狮市| 昌江| 韶山市| 丘北县| 廊坊市| 凤凰县| 张家界市| 沈丘县| 五寨县| 巴青县| 华容县| 阳信县| 松阳县| 巴楚县| 临武县| 镇赉县| 嘉黎县| 镇雄县| 开原市| 桐乡市| 泸西县| 澄江县| 柳河县| 德令哈市| 五常市| 曲阳县| 丰都县| 防城港市| 长治县| 垫江县| 延安市| 黄浦区| 碌曲县| 隆昌县|