HDFS體系結構


Namenode


是整個文件系統的管理節點。它維護著整個文件系統的文件目錄樹,文件/目錄的元信息metadate和每個文件對應的數據塊列表。

功能:接收用戶的操作請求。

metadate信息包括:

1、文件的owership和permission。

2、文件包含哪些block塊

3、block保存在哪個DataNode(由DataNode啟動時上報)


metadate存儲到磁盤文件名為“fsimage”。

warn:block的位置信息不回保存到fsimage上。在DataNode啟動時上報,存在內存里。


文件位置:

?hdfs-default.xml的dfs.namenode.name.dir 屬性(hadoop-hdfs-2.7.2.jar ?/ ?hdfs-default.xml)

<property><name>dfs.namenode.name.dir</name><value>file://${hadoop.tmp.dir}/dfs/name</value><description>Determines where on the local filesystem the DFS name nodeshould store the name table(fsimage).  If this is a comma-delimited listof directories then the name table is replicated in all of thedirectories, for redundancy. </description>
</property>

${hadoop.tmp.dir} 配置在 ?core-site.xml?中

<property><name>hadoop.tmp.dir</name><value>/home/hadoop_data</value>
</property>


metadate信息保存磁盤包含:

1、fsimage:元數據鏡像文件。存儲某一時段NameNode內存元數據信息,無block位置信息。



2、edits:metadate操作日志文件

3、fstime:保存最近一次checkpoint的時間。


查看NameNode內容

方式一:webhdfs查看

命令:hdfs oiv -i xxx -o?

Usage: bin/hdfs oiv [OPTIONS] -i INPUTFILE -o OUTPUTFILE
Offline Image Viewer
View a Hadoop fsimage INPUTFILE using the specified PROCESSOR,
saving the results in OUTPUTFILE.The oiv utility will attempt to parse correctly formed image files
and will abort fail with mal-formed image files.The tool works offline and does not require a running cluster in
order to process an image file.The following image processors are available:* XML: This processor creates an XML document with all elements ofthe fsimage enumerated, suitable for further analysis by XMLtools.* FileDistribution: This processor analyzes the file sizedistribution in the image.-maxSize specifies the range [0, maxSize] of file sizes to beanalyzed (128GB by default).-step defines the granularity of the distribution. (2MB by default)* Web: Run a viewer to expose read-only WebHDFS API.-addr specifies the address to listen. (localhost:5978 by default)* Delimited (experimental): Generate a text file with all of the elements commonto both inodes and inodes-under-construction, separated by adelimiter. The default delimiter is \t, though this may bechanged via the -delimiter argument.Required command line arguments:
-i,--inputFile <arg>   FSImage file to process.Optional command line arguments:
-o,--outputFile <arg>  Name of output file. If the specifiedfile exists, it will be overwritten.(output to stdout by default)
-p,--processor <arg>   Select which type of processor to applyagainst image file. (XML|FileDistribution|Web|Delimited)(Web by default)
-delimiter <arg>       Delimiting string to use with Delimited processor.  
-t,--temp <arg>        Use temporary dir to cache intermediate result to generateDelimited outputs. If not set, Delimited processor constructsthe namespace in memory before outputting text.
-h,--help              Display usage information and exit

實例:

?hdfs oiv -i fsimage_0000000000000000162 -o fsimage_000000000000000016_cat

16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading 2 strings
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading 18 inodes.
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading inode references
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loaded 0 inode references
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading inode directory section
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loaded 11 directories
16/08/12 18:46:54 INFO offlineImageViewer.WebImageViewer: WebImageViewer started. Listening on /127.0.0.1:5978. Press Ctrl+C to stop the viewer.

hadoop會啟動內置的tomcat。監聽端口 127.0.0.1:5978

瀏覽器訪問webhdfs方式見博客:http://blog.csdn.net/zengmingen/article/details/52189857

SecureCRT ?clone session 執行:hdfs dfs -ls ?-R webhdfs://127.0.0.1:5978/

drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp
drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn
drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging
drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/hadoop
drwx------   - hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/hadoop/.staging
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history
drwxrwxrwt   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate
drwxrwx---   - hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop
-rwxrwx---   1 hadoop supergroup      33303 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1460643564332_0001-1460643581404-hadoop-wcount.jar-1460643608082-1-1-SUCCEEDED-default-1460643592087.jhist
-rwxrwx---   1 hadoop supergroup        349 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1460643564332_0001.summary
-rwxrwx---   1 hadoop supergroup     115449 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1460643564332_0001_conf.xml
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/wc
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/wc/output
-rw-r--r--   1 hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/wc/output/_SUCCESS
-rw-r--r--   1 hadoop supergroup         36 2016-04-14 22:20 webhdfs://127.0.0.1:5978/wc/output/part-r-00000
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 00:58 webhdfs://127.0.0.1:5978/wc/srcdata
-rw-r--r--   1 hadoop supergroup         44 2016-04-14 00:58 webhdfs://127.0.0.1:5978/wc/srcdata/word.log


方式二:導出到xml(其他文件)查看

命令:hdfs oiv -p XML -i xxxx -o xxxx.xml(XML 必須大寫)

實例:hdfs oiv -p XML -i fsimage_0000000000000000162 -o fsimage_0000000000000000162.xml

命令:?cat fsimage_0000000000000000162.xml 就能查看內容了。


查看edtis內容

方式與查看fsimage不同

命令:hdfs oev -i xxxx ?-o xxx.xml ? (default xml ?file

實例:hdfs oev -i edits_0000000000000000163-0000000000000000163 -o edits_0000000000000000163-0000000000000000163.xml

命令:?cat edits_0000000000000000163-0000000000000000163.xml

<?xml version="1.0" encoding="UTF-8"?>
<EDITS><EDITS_VERSION>-63</EDITS_VERSION><RECORD><OPCODE>OP_START_LOG_SEGMENT</OPCODE><DATA><TXID>163</TXID></DATA></RECORD>
</EDITS>


SecondaryNameNode(SNN)

-當數據很多時,NN的metadate也會很大,當matedate寫入磁盤時,會帶來NN機子的IO使用較高,給NN增加壓力

因而分配一個助手。http://blog.csdn.net/zengmingen/article/details/51115802

Datanode

提供真實文件數據的存儲服務。

1、文件塊(block):最基本的存儲單元。對于文件內容而言,一個文件的長度大小是size,那么從文件的0偏移開始,按照固定的大小,順序對文件進行劃分并編號,劃分好的每一個塊稱為一個block,hdfs默認block大小是128MB,一個256MB文件,共有256/128=2個block。

不同于普通文件系統的是,HDFS中,如果一個文件小于一個數據塊的大小,并不占用整個數據塊存儲空間。

hdfs有append追加功能,但一般都不用,追加會改變block的數量,block又有副本,成本太高。


2、Replication。多復本。默認是三個。

在hdfs-site.xml的dfs.replication屬性

<configuration><property><name>dfs.replication</name><value>1</value>
</property></configuration>



warn

1、如果副本數設置為3,但datanode機器只有2臺,那整個hadoop是不能工作存不了數據的。一個datanode節點不能有兩個相同內容的block。

2、啟動DataNode線程時會向NameNode匯報block信息。

3、通過向NameNode發送心跳保持與其聯系(3秒一次),如果NameNode 10分鐘沒有收到DataNode心跳,則認為其已經lost,并copy其上的block(其他DataNode的相同副本)到其他DataNode。


Block的副本放置策略

第一個副本:放置在上傳文件的DataNode上。

如果是集群外提交,則隨機選擇一臺磁盤不太滿,cpu不太忙的機子。

第二個副本:放置在第一個副本不同的機架的機子上。

第三個副本:放置在與第二個副本相同機架不同機子上。

更多副本:隨機節點。


數據存儲:staging


HDFS client上傳數據到HDFS時,會首先在本地緩存數據,當數據達到一個block大小時,請求NameNode分配一個block。
NameNode會把block所在的DataNode的地址告訴HDFS client。
HDFS client會直接和DataNode通信,把數據寫到DataNode節點一個block文件中。

數據存儲:讀文件解析


步驟解析:

1、首先調用FileSystem對象的open方法,其實是一個DistributedFileSystem的實例。

2、DistributedFileSystem通過RPC獲得文件的第一批block的locations,同一block按照重復數(replication)會返回多個locations,這些locations按照hadoop拓撲結構排序,距離客戶端近的排在前面。

3、前兩步會返回一個FSDataInputStream對象,該對象會被封裝成DFSInputStream對象,DFSInputStream可以方便的管理datanode和namenode數據流。客戶端調用read方法,DFSInputStream最會找出離客戶端最近的datanode并連接。

4、數據從datanode源源不斷的流向客戶端。

5、如果第一塊的數據讀完了,就會關閉指向第一塊的datanode連接,接著讀取下一塊。這些操作對客戶端來說是透明的,客戶端的角度看來只是讀一個持續不斷的流。

6、如果第一批block都讀完了,DFSInputStream就會去namenode拿下一批blocks的location,然后繼續讀,如果所有的塊都讀完,這時就會關閉掉所有的流。

warn:

1、如果在讀數據的時候,DFSInputStream和datanode的通訊發生異常,就會嘗試正在讀的block的排第二近的datanode,并且會記錄哪個datanode發生錯誤,剩余的blocks讀的時候就會直接跳過該datanode。DFSInputStream也會檢查block數據校驗,如果發現一個壞的block,就會先報告到namenode節點,然后DFSInputStream在其他的datanode上讀該block的鏡像。

2、該設計的方向就是客戶端直接連接datanode來檢索數據并且namenode來負責為每一個block提供最優的datanode,namenode僅僅處理block location的請求,這些信息都加載在namenode的內存中,hdfs通過datanode集群可以承受大量客戶端的并發訪問。


數據存儲:寫文件解析


步驟解析:

1.客戶端通過調用DistributedFileSystem的create方法創建新文件。

2.DistributedFileSystem通過RPC調用namenode去創建一個沒有blocks關聯的新文件,創建前,namenode會做各種校驗,比如文件是否存在,客戶端有無權限去創建等。如果校驗通過,namenode就會記錄下新文件,否則就會拋出IO異常。

3.前兩步結束后會返回FSDataOutputStream的對象,與讀文件的時候相似,FSDataOutputStream被封裝成DFSOutputStream.DFSOutputStream可以協調namenode和datanode。客戶端開始寫數據到DFSOutputStream,DFSOutputStream會把數據切成一個個小packet,然后排成隊列data quene。

4.DataStreamer會去處理接受data quene,他先問詢namenode這個新的block最適合存儲的在哪幾個datanode里(參考第二小節),比如重復數是3,那么就找到3個最適合的datanode,把他們排成一個pipeline.DataStreamer把packet按隊列輸出到管道的第一個datanode中,第一個datanode又把packet輸出到第二個datanode中,以此類推。

5.DFSOutputStream還有一個對列叫ack quene,也是有packet組成,等待datanode的收到響應,當pipeline中的所有datanode都表示已經收到的時候,這時akc quene才會把對應的packet包移除掉。

6.客戶端完成寫數據后調用close方法關閉寫入流。

7.DataStreamer把剩余得包都刷到pipeline里然后等待ack信息,收到最后一個ack后,通知datanode把文件標示為已完成。

warn:

如果在寫的過程中某個datanode發生錯誤,會采取以下幾步:

1) pipeline被關閉掉;

2)為了防止防止丟包ack quene里的packet會同步到data quene里;

3)把產生錯誤的datanode上當前在寫但未完成的block刪掉;

4)block剩下的部分被寫到剩下的兩個正常的datanode中;

5)namenode找到另外的datanode去創建這個塊的復制。當然,這些操作對客戶端來說是無感知的。

warn:

另外要注意得一點,客戶端執行write操作后,寫完得block才是可見的,正在寫的block對客戶端是不可見的,只有調用sync方法,客戶端才確保該文件被寫操作已經全部完成,當客戶端調用close方法時會默認調用sync方法。是否需要手動調用取決你根據程序需要在數據健壯性和吞吐率之間的權衡。






本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539329.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么要將html頁面和樣式表分離,0031 如何使用css文件對網頁內容和樣式進行分離...

原標題&#xff1a;0031 如何使用css文件對網頁內容和樣式進行分離上節課&#xff0c;學習了針對文字可以設置很多種樣式。這節課&#xff0c;學習如何將內容和樣式進行分離。上節課的課后練習1.將斜體字體效果去除2.將工作經歷和工作經驗(部分)這2行文字也做成簡介這行文字的效…

redis 關系數據庫怎么轉換 和_redis數據庫設計(轉)

閱讀目錄redis是什么redis就是一個存儲key-value鍵值對的倉庫&#xff0c;如何使用redis在于如何理解你需要設計的系統的E-R的模型&#xff0c;然后合理的規劃redis的數據庫結構場景我舉一個簡單的消息系統的例子&#xff0c;業務需求&#xff1a;服務器端發送消息給用戶E-R模型…

Hadoop Archives

介紹 時間&#xff1a; Hadoop Archives (HAR files)是在0.18.0版本中引入的。 作用&#xff1a; 將hdfs里的小文件打包成一個文件&#xff0c;相當于windows的zip&#xff0c;rar。Linux的 tar等壓縮文件。把多個文件打包一個文件。 意義&#xff1a; 它的出現就是為了緩…

js 判斷日期時間差

2019獨角獸企業重金招聘Python工程師標準>>> alert(GetDateDiff("2018-02-27 19:20:22","2018-02-27 09:20:22","hour"));function GetDateDiff(startTime, endTime, diffType) {//將xxxx-xx-xx的時間格式&#xff0c;轉換為 xxxx/xx…

python 圖形_Python圖形數據

CSGraph代表 壓縮稀疏圖 &#xff0c;它著重于基于稀疏矩陣表示的快速圖算法。 圖表表示 首先&#xff0c;讓我們了解一個稀疏圖是什么以及它在圖表示中的作用。 什么是稀疏圖&#xff1f; 圖形只是節點的集合&#xff0c;它們之間有鏈接。圖表幾乎可以代表任何事物 - 社交網絡…

本地運行hadoop-Failed to locate the winutils binary in the hadoop binary path

轉自&#xff1a;http://www.cnblogs.com/zq-inlook/p/4386216.html 之前在mac上調試hadoop程序&#xff08;mac之前配置過hadoop環境&#xff09;一直都是正常的。因為工作需要&#xff0c;需要在windows上先調試該程序&#xff0c;然后再轉到linux下。程序運行的過程中&#…

dubbo 支持服務降級嗎_dubbo面試題!會這些,說明你真正看懂了dubbo源碼

整理了一些dubbo可能會被面試的面試題&#xff0c;感覺非常不錯。如果你基本能回答說明你看懂了dubbo源碼&#xff0c;對dubbo了解的足夠全面。你可以嘗試看能不能回答下。我們一起看下有哪些問題吧&#xff1f;dubbo中"讀接口"和"寫接口"有什么區別?談談…

不滿足于汽車制造,豐田展示仿鋼鐵俠機器支撐腿架

而汽車制造商開發機器人也不是豐田一家的專利&#xff0c;此前現代也推出過類似的支撐機器人腿架 大多數人對于豐田的印象都停留在汽車制造上&#xff0c;不過他們卻不僅僅滿足于汽車事業的發展&#xff0c;最近&#xff0c;豐田正在研發一款機器人支撐腿架&#xff0c;來幫助…

js html異步加載的屬性,異步加載JS的五種方式

方案一&#xff1a;點評&#xff1a;HTML5中新增的屬性&#xff0c;Chrome、FF、IE9&IE9均支持(IE6~8不支持)。此外&#xff0c;這種方法不能保證腳本按順序執行。方案二&#xff1a;點評&#xff1a;兼容所有瀏覽器。此外&#xff0c;這種方法可以確保所有設置defer屬性的…

python中各操作符的優先級_Python3練習題系列(06)——各種符號總結

Python3中的各種符號總結 1關鍵字 import keyword print(keyword.kwlist, end\t) [False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, r…

hdfs java讀寫hdfs demo

windows環境配置&#xff1a; 1.下載winutils的windows版本 GitHub上&#xff0c;有人提供了winutils的windows的版本&#xff0c; 項目地址是&#xff1a;https://github.com/srccodes/hadoop-common-2.2.0-bin,直接下載此項目的zip包&#xff0c;下載后是文件名是hadoop-comm…

cesium 經緯度繪制點_NCL繪制2016年1號臺風(Nepartak)

begin ncol 6 ;臺風參數 nrow 31 ;時次總數 nbin 6 ;已知該該氣旋共經歷了6個等級的演變 ;讀入臺風資料 data asciiread("NEPARTAK.txt",(/nrow,ncol/),"integer") ;/31,6/ 31行6列&#xff0c;integer整數類型 ;;數據讀取函數總結&…

VR究竟多奇幻?eSmart邀你共赴一場VR奇幻之旅!

今年夏天&#xff0c;快來參加首屆eSmart展會&#xff0c;來一場VR游戲的奇妙之旅&#xff0c;見識最好玩、最有趣的VR游戲&#xff01; 正如十幾年前互聯網的興起開創了全新時代一樣&#xff0c;VR產業在近兩年也勢不可擋。隨著一重行業巨頭的進入&#xff0c;2016年&#xf…

HTML5新的解析順序,HTML5新表單新功能解析

HTML5新增了很多屬性功能。但是有兼容性問題&#xff0c;因為這些表單功能新增的。我這里做了一個簡單的練習&#xff0c;方便參考。如果完全兼容的話&#xff0c;那我們寫表單的時候就省了很多代碼以及各種判斷。HTML5表單新功能解析#da{width:350px;height:600px;margin:0 au…

python子類繼承父類屬性實例_Python實現子類調用父類的初始化實例

前言 python中進行面向對象編程&#xff0c;當在子類的實例中調用父類的屬性時&#xff0c;由于子類的__init__方法重寫了父類的__init__方法&#xff0c;如果在子類中這些屬性未經過初始化&#xff0c;使用時就會出錯。 例如以下的代碼: class A(object): def __init__(self):…

hadoop 回收站Trash

介紹&#xff1a; Hadoop回收站trash&#xff0c;默認是關閉的。 和Linux系統的回收站設計一樣&#xff0c;HDFS會為每一個用戶創建一個回收站目錄&#xff1a;/user/用戶名/.Trash/&#xff0c;每一個被用戶通過Shell刪除的文件/目錄&#xff0c;在系統回收站中都一個周期&…

opencv畫框返回坐標 python_[python]依靠pynput和pyautogui替換ahk

autohotkey當然是不錯的工具&#xff0c;但是這個東西的社群一直發展的不行。從開始學習python以后&#xff0c;我就不時會希望能找到別的工具替代ahk。Python的眾多包里面確實是有對應的工具的&#xff1a;模擬鼠標和鍵盤的操作可以用pyautogui&#xff0c;而捕捉熱鍵則可以使…

Hadoop SequenceFile

apache原文&#xff1a;http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html 概念&#xff1a; SequenceFile是一個由二進制序列化過的key/value的字節流組成的文本存儲文件&#xff0c;它可以在map/reduce過程中的input/output 的format時被使…

機器學習算法平臺alink_Alink漫談(十二) :在線學習算法FTRL 之 整體設計

Alink漫談(十二) &#xff1a;在線學習算法FTRL 之 整體設計[Toc]0x00 摘要Alink 是阿里巴巴基于實時計算引擎 Flink 研發的新一代機器學習算法平臺&#xff0c;是業界首個同時支持批式算法、流式算法的機器學習平臺。本文和下文將介紹在線學習算法FTRL在Alink中是如何實現的&a…

Linux Shell獲取系統資源使用百分比(CentOS)

CPU使用率&#xff1a; top -b -n 1 | head -n 4 | grep "^Cpu(s)" | awk {print $2} | cut -d u -f 1 內存使用率&#xff1a; free -m | grep ^- | awk {print $3/($3$4)*100"%"} IO使用率&#xff08;FS_PATH的值改成df -h出來的那些Filesystem名稱即可…