Java+大数据开发——HDFS详解
| 1. HDFS 介紹 |
???什么是HDFS
? 首先,它是一個(gè)文件系統(tǒng),用于存儲(chǔ)文件,通過統(tǒng)一的命名空間——目錄樹來定位文件。
? ? 其次,它是分布式的,由很多服務(wù)器聯(lián)合起來實(shí)現(xiàn)其功能,集群中的服務(wù)器有各自的角色;
???設(shè)計(jì)思想
? ? 分而治之:將大文件、大批量文件,分布式存放在大量服務(wù)器上,以便于采取分而治之的方式對海量數(shù)據(jù)進(jìn)行運(yùn)算分析;
???在大數(shù)據(jù)系統(tǒng)中作用:
? 為各類分布式運(yùn)算框架(如:mapreduce,spark,tez,……)提供數(shù)據(jù)存儲(chǔ)服務(wù)。
???Hdfs整體架構(gòu)如下
?
| 2. HDFS的特性 |
(1)HDFS中的文件在物理上是分塊存儲(chǔ)(block)。塊的大小可以通過配置參數(shù)( dfs.blocksize)來規(guī)定,默認(rèn)大小在hadoop2.x版本中是128M。
(2)HDFS文件系統(tǒng)會(huì)給客戶端提供一個(gè)統(tǒng)一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
(3)目錄結(jié)構(gòu)及文件分塊信息(元數(shù)據(jù))的管理由namenode節(jié)點(diǎn)承擔(dān),namenode是HDFS集群主節(jié)點(diǎn),負(fù)責(zé)維護(hù)整個(gè)hdfs文件系統(tǒng)的目錄樹,以及每一個(gè)路徑(文件)所對應(yīng)的block塊信息。
(4)文件的各個(gè)block的存儲(chǔ)管理由datanode節(jié)點(diǎn)承擔(dān),datanode是HDFS集群從節(jié)點(diǎn),每一個(gè)block都可以在多個(gè)datanode上存儲(chǔ)多個(gè)副本(副本數(shù)量也可以通過參數(shù)設(shè)置dfs.replication)。
(5)HDFS是設(shè)計(jì)成適應(yīng)一次寫入,多次讀出的場景,且不支持文件的修改。
?
| 3. HDFS 的shell(命令行客戶端)操作 |
3.1HDFS命令行客戶端使用
HDFS提供shell命令行客戶端,使用命令語法為:hadoop fs <args>,它支持支持多種文件系統(tǒng)的訪問,主要包括Local和HDFS兩種,配置文件中的fs.defaultFS的值決定了默認(rèn)訪問的文件系統(tǒng)。其中命令中的“fs”表示FileSystem Shell。
“<args>”是“fs”的子命令,包括:
創(chuàng)建目錄:mkdir
列表文件:ls
查看文件:cat
轉(zhuǎn)移文件:put、get、mv、cp
刪除文件:rm、rmr
管理命令:test、du、expunge
3.2常用命令參數(shù)介紹
?
| -help ???????????? 功能:輸出這個(gè)命令參數(shù)手冊 |
| -ls ????????????????? 功能:顯示目錄信息 示例: hadoop fs -ls hdfs://hadoop-server01:9000/ 備注:這些參數(shù)中,所有的hdfs路徑都可以簡寫 -->hadoop fs -ls / ??等同于上一條命令的效果 |
| -mkdir ????????????? 功能:在hdfs上創(chuàng)建目錄 示例:hadoop fs ?-mkdir ?-p ?/aaa/bbb/cc/dd |
| --appendToFile ? 功能:追加一個(gè)文件到已經(jīng)存在的文件末尾 示例:hadoop ?fs ?-appendToFile ?./hello.txt ?hdfs://hadoop-server01:9000/hello.txt 可以簡寫為:Hadoop ?fs ?-appendToFile ?./hello.txt ?/hello.txt |
| -cat ? 功能:顯示文件內(nèi)容 ? 示例:hadoop fs -cat ?/hello.txt |
| -cp ????????????? 功能:從hdfs的一個(gè)路徑拷貝hdfs的另一個(gè)路徑 示例: hadoop??fs??-cp ?/aaa/jdk.tar.gz ?/bbb/jdk.tar.gz.2 -mv ???????????????????? 功能:在hdfs目錄中移動(dòng)文件 示例: hadoop??fs??-mv??/aaa/jdk.tar.gz ?/ |
| -get ????????????? 功能:等同于copyToLocal,就是從hdfs下載文件到本地 示例:hadoop fs -get ?/aaa/jdk.tar.gz |
| -put ??????????????? 功能:等同于copyFromLocal 示例:hadoop??fs??-put??/aaa/jdk.tar.gz ?/bbb/jdk.tar.gz.2 |
| -rm ??????????????? 功能:刪除文件或文件夾 示例:hadoop fs -rm -r /aaa/bbb/ |
?
| 4. HDFS 的工作機(jī)制 |
4.1概述
? ? ? ? ? 1、HDFS集群分為兩大角色:NameNode、DataNode;
? ? ? ? ? 2、NameNode負(fù)責(zé)管理整個(gè)文件系統(tǒng)的元數(shù)據(jù);
? ? ? ? ? 3、DataNode 負(fù)責(zé)管理用戶的文件數(shù)據(jù)塊;
? ? ?4、文件會(huì)按照固定的大小(blocksize)切成若干塊后分布式存儲(chǔ)在若干臺(tái)datanode上;
? ? ?5、每一個(gè)文件塊可以有多個(gè)副本,并存放在不同的datanode上;
? ? ? ? ? 6、Datanode會(huì)定期向Namenode匯報(bào)自身所保存的文件block信息,而namenode則會(huì)負(fù)責(zé)保持文件的副本數(shù)量;
? ? ? ? ? 7、HDFS的內(nèi)部工作機(jī)制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進(jìn)行;
?
4.2HDFS寫數(shù)據(jù)流程
客戶端要向HDFS寫數(shù)據(jù),首先要跟namenode通信以確認(rèn)可以寫文件并獲得接收文件block的datanode,然后,客戶端按順序?qū)⑽募饌€(gè)block傳遞給相應(yīng)datanode,并由接收到block的datanode負(fù)責(zé)向其他datanode復(fù)制block的副本。
?
4.3HDFS讀數(shù)據(jù)流程
客戶端將要讀取的文件路徑發(fā)送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據(jù)返回的信息找到相應(yīng)datanode逐個(gè)獲取文件的block并在客戶端本地進(jìn)行數(shù)據(jù)追加合并從而獲得整個(gè)文件。
?
| 5.NAMENODE 工作機(jī)制 |
5.1NAMENODE 職責(zé)
NAMENODE職責(zé):負(fù)責(zé)客戶端請求的響應(yīng)以及元數(shù)據(jù)的管理(查詢,修改)。
?
5.2元數(shù)據(jù)管理
namenode對數(shù)據(jù)的管理采用了三種存儲(chǔ)形式:
1、內(nèi)存元數(shù)據(jù)(NameSystem)
2、磁盤元數(shù)據(jù)鏡像文件
3、數(shù)據(jù)操作日志文件(可通過日志運(yùn)算出元數(shù)據(jù))
?
5.3元數(shù)據(jù)儲(chǔ)存機(jī)制
A、內(nèi)存中有一份完整的元數(shù)據(jù)(內(nèi)存meta data)
B、磁盤有一個(gè)“準(zhǔn)完整”的元數(shù)據(jù)鏡像(fsimage)文件(在namenode的工作目錄中)
C、用于銜接內(nèi)存metadata和持久化元數(shù)據(jù)鏡像fsimage之間的操作日志(edits文件)
?
5.4元數(shù)據(jù)手動(dòng)查看
可以通過hdfs的一個(gè)工具來查看edits中的信息
bin/hdfs oev -i edits -o edits.xml
bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml
?
5.5元數(shù)據(jù)的checkpoint
每隔一段時(shí)間,會(huì)由secondary namenode將namenode上積累的所有edits和一個(gè)最新的fsimage下載到本地,并加載到內(nèi)存進(jìn)行merge(這個(gè)過程稱為checkpoint)。
?
| 6. DATANODE 的工作機(jī)制 |
6.1DATANODE 工作職責(zé)
1、存儲(chǔ)管理用戶的文件塊數(shù)據(jù)
2、定期向namenode匯報(bào)自身所持有的block信息(通過心跳信息上報(bào))
?
6.2觀察驗(yàn)證DATANODE 功能
上傳一個(gè)文件,觀察文件的block具體的物理存放情況:
在每一臺(tái)datanode機(jī)器上的這個(gè)目錄中能找到文件的切塊:
/home/hadoop/app/hadoop-2.6.5/tmp/dfs/data/current/BP-193442119-192.168.2.120-1432457733977/current/finalized
?
作者:杰瑞教育出處:http://www.cnblogs.com/jerehedu/?
版權(quán)聲明:本文版權(quán)歸煙臺(tái)杰瑞教育科技有限公司和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
技術(shù)咨詢:
?
總結(jié)
以上是生活随笔為你收集整理的Java+大数据开发——HDFS详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转发萌新人鱼博客-Java面向对象-面向
- 下一篇: TypeScript入门知识五(面向对象