新聞中心
[TOC]
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)青羊免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
一、HDFS體系組成概述
這是一個分布式文件系統(tǒng),適用于于一次寫入多次讀取的場景。包含以下角色:
NameNode(nn):
存儲文件的元數(shù)據(jù),如文件名、文件目錄結(jié)構(gòu),文件屬性等,以及每個文件的塊列表和塊所在的DataNode等。以及響應(yīng)客戶端對hdfs的讀寫操作,如創(chuàng)建目錄、上傳文件等。還有保存讀寫日志。
DataNode(dn):
在本地文件系統(tǒng)中存儲文件塊數(shù)據(jù),以及塊數(shù)據(jù)的校驗和
SecondaryNameNode(snn):
用來監(jiān)控HDFS狀態(tài)的輔助后臺程序,每隔一段時間獲取HDFS元數(shù)據(jù)的快照,相當(dāng)于對NameNode進(jìn)行備份。
二、HDFS-NameNode
主要職責(zé)是管理hdfs的所有節(jié)點。
1、響應(yīng)客戶端對hdfs的請求,如增刪改查。
2、管理和維護hdfs 的元數(shù)據(jù)信息以及日志(非log日志)
NameNode會在 core-site.xml中指定的hadoop.tmp.dir 的目錄中 創(chuàng)建目錄:dfs/name/ 。下面我們看看這個目錄的結(jié)構(gòu)。
[root@bigdata121 tmp]# tree dfs/name
dfs/name
├── current
│?? ├── edits_0000000000000000001-0000000000000000002
│?? ├── edits_0000000000000000003-0000000000000000004
│?? ├── edits_0000000000000000005-0000000000000000006
│?? ├── edits_0000000000000000007-0000000000000000008
│?? ├── edits_0000000000000000009-0000000000000000009
│?? ├── edits_0000000000000000010-0000000000000000011
│?? ├── edits_0000000000000000012-0000000000000000013
│?? ├── edits_0000000000000000014-0000000000000000015
│?? ├── edits_0000000000000000016-0000000000000000017
│?? ├── edits_0000000000000000018-0000000000000000019
│?? ├── edits_0000000000000000020-0000000000000000021
│?? ├── edits_0000000000000000022-0000000000000000024
│?? ├── edits_0000000000000000025-0000000000000000026
│?? ├── edits_inprogress_0000000000000000027
│?? ├── fsimage_0000000000000000024
│?? ├── fsimage_0000000000000000024.md5
│?? ├── fsimage_0000000000000000026
│?? ├── fsimage_0000000000000000026.md5
│?? ├── seen_txid
│?? └── VERSION
└── in_use.lock
各個文件目錄的作用如下:
1、current
主要存放hdfs的存儲的數(shù)據(jù)的元信息和日志。
(1)edits文件
是一個二進(jìn)制文件,主要記錄對hdfs的增刪改操作的信息,類似于MySQL的二進(jìn)制日志。其中 edits_inprogress_xxxxx 表示是最新的edits日志,是目前正在使用的。
可以使用命令查看 edits文件的內(nèi)容:
//格式:hdfs oev -i 輸入文件 -o 輸出文件(xml格式)
[root@bigdata121 current]# hdfs oev -i edits_inprogress_0000000000000000038 -o /tmp/edits_inprogess.xml
[root@bigdata121 current]# cat /tmp/edits_inprogess.xml
-63
OP_START_LOG_SEGMENT 表示操作的類別,這里是表示日志開始記錄
38 類似于操作的ID,是唯一的
OP_ADD_BLOCK //像這個就表示上傳文件的操作
34
/jdk-8u144-linux-x64.tar.gz._COPYING_
1073741825
134217728
1001
1073741826
0
1002
-2
(2)fsimage文件
hdfs中的數(shù)據(jù)的元數(shù)據(jù)文件。記錄hdfs文件系統(tǒng)中各個數(shù)據(jù)塊的信息,但并不是最新的。需要定時將edits文件合并到這里,才是最新的??梢允褂妹畈榭?fsimage 文件的內(nèi)容:
//格式 : hdfs oiv -p 輸出格式 -i 輸入文件 -o 輸出文件
[root@bigdata121 current]# hdfs oiv -p XML -i fsimage_0000000000000000037 -o /tmp/fsimage37.xml
[root@bigdata121 current]# cat /tmp/fsimage37.xml
-63 1 17e75c2a11685af3e043aa5e604dc831e5b14674
1780930535 1000 1002 0 1073741826 37
16387 3 16385 DIRECTORY 1558145602785 root:supergroup:0755 9223372036854775807 -1
16386 DIRECTORY input 1558105166840 root:supergroup:0755 -1 -1
16387 FILE jdk-8u144-linux-x64.tar.gz 2 1558145602753 1558145588521 134217728 root:supergroup:0644 1073741825 1001 134217728
1073741826 1002 51298114
0
0 0
16385 16386 16387
0 0 0 0 1 0 0
記錄的信息更為詳細(xì)。文件的元數(shù)據(jù),如文件權(quán)限、時間戳等都有記錄。
(3)seen_txid
txid是類似于事件id的概念,指的是每個操作的一個標(biāo)識。這個文件中記錄的是最新的txid的下一個,即當(dāng)前最后一個txid是37,那么該文件記錄的就是38.
(4)fsimage和edit文件命名方式的聯(lián)系
edits文件:
我們可以看到edits文件都是 edits_00000xxx-000000xxx的方式命名的,其實意思就是表示該edits文件中記錄了txid操作事件的范圍。而 edit_inprogess_00000xxx 則表示當(dāng)前所記錄到的最新的txid事件。
fsimage文件:
以fsimage_000000xxx 的方式命名,表示的是該fsimage 文件記錄到的最新的txid事件,請注意,因為fsimage是有條件觸發(fā)之后,edits文件才會合并到fsimage的,否則不會合并。所以一般情況下,edits文件后面的txid肯定是比fsimage 大的。
2、in_use.lock
這個文件主要是對當(dāng)前的node進(jìn)行鎖操作,避免當(dāng)前機器同時啟動多個namenode。只能啟動一個namenode
三、HDFS-DataNode
HDFS的數(shù)據(jù)節(jié)點,主要就是存儲數(shù)據(jù)的block文件的。會在指定的目錄下創(chuàng)建一個 dfs/data 目錄,看一下目錄結(jié)構(gòu):
[root@bigdata122 dfs]# tree data
data
├── current
│?? ├── BP-1130553825-192.168.50.121-1557922928723
│?? │?? ├── current
│?? │?? │?? ├── finalized
│?? │?? │?? │?? └── subdir0
│?? │?? │?? │?? └── subdir0
│?? │?? │?? │?? ├── blk_1073741825
│?? │?? │?? │?? ├── blk_1073741825_1001.meta
│?? │?? │?? │?? ├── blk_1073741826
│?? │?? │?? │?? └── blk_1073741826_1002.meta
│?? │?? │?? ├── rbw
│?? │?? │?? └── VERSION
│?? │?? ├── scanner.cursor
│?? │?? └── tmp
│?? └── VERSION
└── in_use.lock
在HDFS中,文件都是被分割成多個等大的數(shù)據(jù)塊進(jìn)行存儲的。
hadoop 1.x 中數(shù)據(jù)塊默認(rèn)大小是 64M
hadoop 2.x 中數(shù)據(jù)塊默認(rèn)大小是 128M
hadoop 3.x 中不再采用多副本的模式存儲,而是采用糾刪碼技術(shù)。
請見 https://www.cnblogs.com/basenet855x/p/7889994.html
在上面的目錄中 blk_xxxxx 的文件其實就是blk文件,每個的大小為指定的塊大小。
四、HDFS-SecondaryNameNode
用來監(jiān)控HDFS狀態(tài)的輔助后臺程序,主要就是輔助 NameNode節(jié)點的工作(并非是 NameNode的備節(jié)點),其中主要工作就是 合并edits文件到fsimage文件。
1、根據(jù) checkpoint的 時間間隔(默認(rèn)3600秒)或者 edits文件到達(dá)64M 的觸發(fā)條件,將edits文件合并fsimage。
2、edits合并到fsimage之后,edits文件可以清空了。
網(wǎng)頁題目:二、hdfs體系架構(gòu)
新聞來源:http://biofuelwatch.net/article/jccdos.html