HDFS前言
l 設(shè)計(jì)思想
分而治之:將大文件矫钓、大批量文件,分布式存放在大量服務(wù)器上,以便于采取分而治之的方式對海量數(shù)據(jù)進(jìn)行運(yùn)算分析荞估;
l 在大數(shù)據(jù)系統(tǒng)中作用:
為各類分布式運(yùn)算框架(如:mapreduce,spark稚新,tez勘伺,……)提供數(shù)據(jù)存儲(chǔ)服務(wù)
l 重點(diǎn)概念:文件切塊,副本存放褂删,元數(shù)據(jù)
HDFS的概念和特性
首先飞醉,它是一個(gè)文件系統(tǒng),用于存儲(chǔ)文件屯阀,通過統(tǒng)一的命名空間——目錄樹來定位文件
其次缅帘,它是分布式的轴术,由很多服務(wù)器聯(lián)合起來實(shí)現(xiàn)其功能,集群中的服務(wù)器有各自的角色钦无;
重要特性如下:
(1)HDFS中的文件在物理上是分塊存儲(chǔ)(block)逗栽,塊的大小可以通過配置參數(shù)( dfs.blocksize)來規(guī)定,默認(rèn)大小在hadoop2.x版本中是128M失暂,老版本中是64M
(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塊信息(block的id,及所在的datanode服務(wù)器)
(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)一次寫入想罕,多次讀出的場景,且不支持文件的修改
(注:適合用來做數(shù)據(jù)分析霉涨,并不適合用來做網(wǎng)盤應(yīng)用按价,因?yàn)椋槐阈薷捏仙舆t大楼镐,網(wǎng)絡(luò)開銷大,成本太高)
常用命令參數(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
-moveFromLocal
功能:從本地剪切粘貼到hdfs
示例:hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
-moveToLocal
功能:從hdfs剪切粘貼到本地
示例:hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt
--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
-tail
功能:顯示一個(gè)文件的末尾
示例:hadoop fs -tail /weblog/access_log.1
-text
功能:以字符形式打印一個(gè)文件的內(nèi)容
示例:hadoop fs -text /weblog/access_log.1
-chgrp
-chmod
-chown
功能:linux文件系統(tǒng)中的用法一樣框产,對文件所屬權(quán)限
示例:
hadoop fs -chmod 666 /hello.txt
hadoop fs -chown someuser:somegrp /hello.txt
-copyFromLocal
功能:從本地文件系統(tǒng)中拷貝文件到hdfs路徑去
示例:hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/
-copyToLocal
功能:從hdfs拷貝到本地
示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz
-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
-getmerge
功能:合并下載多個(gè)文件
示例:比如hdfs的目錄 /aaa/下有多個(gè)文件:log.1, log.2,log.3,...
hadoop fs -getmerge /aaa/log.* ./log.sum
-put
功能:等同于copyFromLocal
示例:hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
-rm
功能:刪除文件或文件夾
示例:hadoop fs -rm -r /aaa/bbb/
-rmdir
功能:刪除空目錄
示例:hadoop fs -rmdir /aaa/bbb/ccc
-df
功能:統(tǒng)計(jì)文件系統(tǒng)的可用空間信息
示例:hadoop fs -df -h /
-du
功能:統(tǒng)計(jì)文件夾的大小信息
示例:
hadoop fs -du -s -h /aaa/*
-count
功能:統(tǒng)計(jì)一個(gè)指定目錄下的文件節(jié)點(diǎn)數(shù)量
示例:hadoop fs -count /aaa/
-setrep
功能:設(shè)置hdfs中文件的副本數(shù)量
示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz
<這里設(shè)置的副本數(shù)只是記錄在namenode的元數(shù)據(jù)中错洁,是否真的會(huì)有這么多副本秉宿,還得看datanode的數(shù)量>