六里橋做網(wǎng)站公司長沙網(wǎng)站優(yōu)化價(jià)格
視頻課程地址:https://www.bilibili.com/video/BV1WY4y197g7
課程資料鏈接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8
這里寫目錄標(biāo)題
- 一、VMware準(zhǔn)備Linux虛擬機(jī)
- 1.1. VMware安裝Linux虛擬機(jī)
- 1.1.1. 修改虛擬機(jī)子網(wǎng)IP和網(wǎng)關(guān)
- 1.1.2. 安裝Linux虛擬機(jī)
- 1.2. VMware克隆三臺Linux虛擬機(jī)
- 1.3. 為三臺虛擬機(jī)配置固定IP
- 1.4. 配置免密登錄
- 1.5. JDK環(huán)境部署
- 1.6. 防火墻、SELinux、時(shí)間同步配置
- 1.6.1. 關(guān)閉防火墻
- 1.6.2. 關(guān)閉SELinux
- 1.6.3. 配置時(shí)間同步
- 1.7. 使用VMware快照功能保存當(dāng)前已配置好的初始環(huán)境
- 二、在虛擬機(jī)里部署HDFS集群
- 2.1. 部署node1虛擬機(jī)
- 2.2. 部署node2和node3虛擬機(jī)
- 2.3. 初始化并啟動(dòng)Hadoop集群(格式化文件系統(tǒng))
- 2.4. 快照部署好的集群
- 2.5. 部署過程中可能會(huì)遇到的問題
- 2.5. Hadoop HDFS集群啟停腳本
- 三、使用HDFS文件系統(tǒng)
- 3.1. 使用命令操作HDFS文件系統(tǒng)
- 3.1.1. HDFS文件系統(tǒng)基本信息
- 3.1.2. HDFS文件系統(tǒng)的2套命令體系
- 3.1.3. 創(chuàng)建文件夾
- 3.1.4. 查看指定目錄下的內(nèi)容
- 3.1.5. 上傳文件到HDFS指定目錄下
- 3.1.6. 查看HDFS中文件的內(nèi)容
- 3.1.7. 從HDFS下載文件到本地
- 3.1.8. 復(fù)制HDFS文件(在HDFS系統(tǒng)內(nèi)復(fù)制)
- 3.1.9. 追加數(shù)據(jù)到HDFS文件中
- 3.1.10. 移動(dòng)或重命名HDFS文件(在HDFS系統(tǒng)內(nèi)移動(dòng))
- 3.1.11. 刪除HDFS文件
- 3.1.12. 其他HDFS命令
- 3.2. HDFS Web瀏覽
- 3.3. HDFS系統(tǒng)權(quán)限
- 3.3.1. 修改HDFS文件權(quán)限
- 3.3.2. 修改HDFS文件所屬用戶和組
一、VMware準(zhǔn)備Linux虛擬機(jī)
1.1. VMware安裝Linux虛擬機(jī)
VMware虛擬機(jī)安裝程序下載地址(需要自己想辦法激活):https://download3.vmware.com/software/WKST-1750-WIN/VMware-workstation-full-17.5.0-22583795.exe
CentOS操作系統(tǒng)鏡像下載地址:https://vault.centos.org/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
1.1.1. 修改虛擬機(jī)子網(wǎng)IP和網(wǎng)關(guān)
下載后,先安裝VMware虛擬機(jī),安裝成功后,需改虛擬機(jī)網(wǎng)絡(luò)配置。
1、在“編輯”-“虛擬網(wǎng)絡(luò)編輯器”中修改NAT8網(wǎng)卡的子網(wǎng)IP地址;
2、進(jìn)入編輯器后,選擇“VMnet8”網(wǎng)卡,然后點(diǎn)擊右下角的“更改設(shè)置”按鈕;
3、獲取管理員權(quán)限后,選擇“VMnet8”網(wǎng)卡,將其子網(wǎng)IP修改為“192.168.88.0”;
4、點(diǎn)擊“NAT設(shè)置”按鈕,在NAT設(shè)置界面,將網(wǎng)關(guān)IP修改為“192.168.88.2”,并保存上述設(shè)置。
1.1.2. 安裝Linux虛擬機(jī)
1、通過VMware菜單中的“文件”-“新建虛擬機(jī)”創(chuàng)建一個(gè)新的虛擬機(jī);
2、選擇前面下載的CentOS操作系統(tǒng)鏡像;
3、輸入Linux系統(tǒng)用戶名和密碼(該密碼也是root的密碼);
4、填寫虛擬機(jī)名稱和虛擬機(jī)的存放位置;
5、之后一直下一步、完成,然后虛擬機(jī)開始自己安裝,直至安裝完成,此過程視個(gè)人電腦和網(wǎng)絡(luò)情況可能需要半小時(shí)左右,中間不用任何操作,待系統(tǒng)安裝完畢后,虛擬機(jī)會(huì)自動(dòng)重啟,看到如下界面,代表安裝成功。
1.2. VMware克隆三臺Linux虛擬機(jī)
1、將前面安裝好的虛擬機(jī)關(guān)機(jī),然后在VMware左側(cè)的菜單中,鼠標(biāo)右鍵剛才安裝好的虛擬機(jī),選擇“管理”-“克隆”;
2、然后點(diǎn)擊下一頁按鈕,直到“克隆方法”界面;
3、在克隆方法界面選擇“創(chuàng)建完整克隆”,然后繼續(xù)下一頁;
4、重命名虛擬機(jī)名稱為node1,選擇克隆出來的虛擬機(jī)存放的路徑,然后點(diǎn)擊“完成”按鈕,VMware就會(huì)克隆出一個(gè)一摸一樣的虛擬機(jī),此過程很快,一般3~5秒的樣子;
5、依照上述方法,再克隆出node2和node3,總共3臺虛擬機(jī)出來;
6、此時(shí)先別啟動(dòng)這3臺虛擬機(jī),先對3臺虛擬機(jī)的內(nèi)存大小進(jìn)行調(diào)整,分別將node1調(diào)整到4GB,node2和node3調(diào)整成2GB;
7、內(nèi)存調(diào)整完畢后,分別將node1、2、3開機(jī),在開機(jī)時(shí),VMware會(huì)彈窗提示“無法連接虛擬設(shè)備 ide1:0…”,直接點(diǎn)“否”即可,至此,虛擬機(jī)克隆完畢,后續(xù)我們使用的也是這3臺虛擬機(jī)。
1.3. 為三臺虛擬機(jī)配置固定IP
1、三臺虛擬機(jī)分別啟動(dòng)后,在虛擬機(jī)中打開命令行,修改主機(jī)名,輸入如下命令:
# 切換成root用戶
[itheima@locahost ~]$ su -
# 修改當(dāng)前虛擬機(jī)的主機(jī)名,這里只演示node1,node2和node3命令相同,只是最后的參數(shù)需要修改成node2和node3
[root@locahost ~]# hostnamectl set-hostname node1
2、上述命令執(zhí)行完畢后,關(guān)閉命令行,并重新打開命令行,此時(shí)可以看到命令行內(nèi)的主機(jī)名已經(jīng)變成了node1、node2和node3
3、在命令行里切換到root用戶,并執(zhí)行如下命令:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
4、打開ifcfg-ens33文件后,將其中BOOTPROTO
配置項(xiàng)的值修改為static
,然后再在文件末尾追加如下內(nèi)容:
IPADDR="192.168.88.101"
NETMASK="255.255.255.0"
GATEWAY="192.168.88.2"
DNS1="192.168.88.2"
其中,在node1虛擬機(jī)中,IPADDR
的值為192.168.88.101
,node2虛擬機(jī)的IPADDR
的值為192.168.88.102
,node3虛擬機(jī)的IPADDR
的值為192.168.88.103
;
5、修改網(wǎng)網(wǎng)卡配置后,在命令行中重啟網(wǎng)卡,執(zhí)行如下命令:
systemctl restart network
然后可以使用ifconfig
命令查看及其的IP地址,查看上述修改是否成功。
1.4. 配置免密登錄
1、修改Windows系統(tǒng)(本機(jī),非虛擬機(jī))的hosts文件(目錄為C:\Windows\System32\drivers\etc\
),將如下內(nèi)容追加在hosts文件末尾并保存
192.168.88.101 node1
192.168.88.102 node2
192.168.88.103 node3
2、使用本機(jī)的ssh工具連接三臺虛擬機(jī)(node1、node2、node3),后續(xù)所有的命令通過ssh工具操作;
3、分別修改三臺虛擬機(jī)的hosts文件,此處以node1為例,在命令行中輸入
vim /etc/hosts
在hosts文件中追加如下內(nèi)容:
192.168.88.101 node1
192.168.88.102 node2
192.168.88.103 node3
保存并退出,然后同樣的步驟修改node2和node3的hosts文件。
4、在三臺虛擬機(jī)上分別執(zhí)行ssh-keygen -t rsa -b 4096
命令,然后一路回車到底,給三臺虛擬機(jī)分別生成好自己的密鑰;
5、在三臺虛擬機(jī)上都執(zhí)行如下命令,完成免密登錄的授權(quán)操作:
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
執(zhí)行命令過程中,有配置項(xiàng)需要確認(rèn)輸入yes
,然后,還需要輸入root密碼;
6、可以在node1虛擬機(jī)通過命令ssh node2
查看是否已經(jīng)配置好了node1到node2的免密登錄,同理,可以在node2驗(yàn)證到另兩臺服務(wù)器的免密登錄;
7、至此,我們配置好了三臺虛擬機(jī)root用戶之間的免密登錄,接下來,我們還需要配置三臺虛擬機(jī)之間hadoop用戶的免密登錄;
8、使用useradd hadoop
和passwd hadoop
命令分別在三臺虛擬機(jī)上創(chuàng)建hadoop用戶;
9、在三臺虛擬機(jī)上使用su - hadoop
命令切換成hadoop用戶,然后使用簽名用過的ssh-keygen -t rsa -b 4096
命令生成hadoop用戶的ssh密鑰;
10、然后再在三臺虛擬機(jī)上執(zhí)行如下命令,實(shí)現(xiàn)hadoop用戶之間的免密登錄:
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
具體操作和上面配置root用戶的免密登錄時(shí)一樣。至此,免密登錄配置完成。
1.5. JDK環(huán)境部署
1、目前還是使用jdk 1.8版本,下載頁面:https://www.oracle.com/cn/java/technologies/downloads/,打開頁面一直往下劃,劃到JDK 1.8的部分,下載x64 Compressed Archive
版本;
2、下載后,在虛擬機(jī)里面切換成root用戶,然后將剛才下載好的jdk壓縮包上傳到root目錄下,執(zhí)行如下命令:
mkdir -p /export/server
# 解壓剛才上傳的jdk壓縮包到/export/server目錄
tar -zxvf jdk-8u391-linux-x64.tar.gz -C /export/server/
# 創(chuàng)建軟連接
ln -s /export/server/jdk1.8.0_391/ /export/server/jdk
3、配置環(huán)境變量,使用命令vim /etc/profile
打開環(huán)境變量配置文件,然后在文件末尾追加如下內(nèi)容:
export JAVA_HOME=/export/server/jdk
export PATH=$PATH:$JAVA_HOME/bin
然后使用source /etc/profile
命令使環(huán)境變量生效;
4、將操作系統(tǒng)自帶的jdk替換成我們剛才安裝的jdk:
# 刪除系統(tǒng)自帶的java程序
rm -f /usr/bin/java
# 軟連接我們自己安裝的java程序
ln -s /export/server/jdk/bin/java /usr/bin/java
此時(shí),jdk配置完成,可以使用java -version
和javac -version
命令校驗(yàn)系統(tǒng)所使用的java是否已經(jīng)是我們自己安裝的JDK。
5、使用scp
命令,將已解壓的jdk文件夾復(fù)制到node2和node3
# 復(fù)制到node2
scp -r /export/server/jdk1.8.0_391/ node2:`pwd`/
# 復(fù)制到node3
scp -r /export/server/jdk1.8.0_391/ node3:`pwd`/
6、然后參考上面的流程,創(chuàng)建軟連接、配置環(huán)境變量、移除系統(tǒng)自帶的java,完成node2和node3的配置。
1.6. 防火墻、SELinux、時(shí)間同步配置
1.6.1. 關(guān)閉防火墻
在三臺虛擬機(jī)上分別執(zhí)行如下命令:
# 關(guān)閉防火墻
systemctl stop firewalld.service
# 關(guān)閉防火墻的開機(jī)自啟
systemctl disable firewalld.service
1.6.2. 關(guān)閉SELinux
使用vim /etc/sysconfig/selinux
打開selinux的配置文件,將其中的SELINUX=enforcing
修改為SELINUX=disabled
,然后保存退出,并重啟虛擬機(jī)(可通過reboot
命令)即可。
1.6.3. 配置時(shí)間同步
在三臺虛擬機(jī)上分別依次執(zhí)行以下步驟
1、安裝ntp軟件
yum install -y ntp
2、更新時(shí)區(qū)
# 刪除系統(tǒng)的默認(rèn)時(shí)區(qū)信息
rm -f /etc/localtime
# 設(shè)置虛擬機(jī)的時(shí)區(qū)為中國上海時(shí)區(qū)
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、同步時(shí)間
# 使用阿里云的ntp服務(wù)校準(zhǔn)本機(jī)時(shí)間
ntpdate -u ntp.aliyun.com
4、開啟ntp服務(wù)并設(shè)置開機(jī)自啟
# 啟動(dòng)NTP服務(wù)
systemctl start ntpd.service
# 設(shè)置NTP服務(wù)開機(jī)自啟動(dòng)
systemctl enable ntpd.service
1.7. 使用VMware快照功能保存當(dāng)前已配置好的初始環(huán)境
1、將三臺虛擬機(jī)全部關(guān)機(jī);
2、在VMware中,在左側(cè)虛擬機(jī)上右鍵,選擇“快照”-“拍攝快照”,填寫快照名稱和備注,創(chuàng)建虛擬機(jī)快照;
node2和node3重復(fù)上述步驟,完成快照拍攝
二、在虛擬機(jī)里部署HDFS集群
下載Hadoop:https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
本次演示部署結(jié)構(gòu)如下圖所示:
本次部署服務(wù)清單如下表所示:
節(jié)點(diǎn) | 部署的服務(wù) |
---|---|
node1 | NameNode、DataNode、SecondaryNameNode |
node2 | DataNode |
node3 | DataNode |
2.1. 部署node1虛擬機(jī)
1、將下載好的Hadoop壓縮包上傳至node1虛擬機(jī)的root目錄;
2、將Hadoop壓縮包解壓至/export/server
目錄下
tar -zxvf hadoop-3.3.4.tar.gz -C /export/server/
3、創(chuàng)建hadoop目錄的軟鏈接
# 切換工作目錄
cd /export/server/
# 創(chuàng)建軟連接
ln -s /export/server/hadoop-3.3.4/ hadoop
4、hadoop目錄結(jié)構(gòu)如下
目錄 | 存放內(nèi)容 |
---|---|
bin | 存放Hadoop的各類程序(命令) |
etc | 存放Hadoop的配置文件 |
include | 存放Hadopp用到的C語言的頭文件 |
lib | 存放Linux系統(tǒng)的動(dòng)態(tài)鏈接庫(.so文件) |
libexec | 存放配置Hadoop系統(tǒng)的腳本文件(.sh和.cmd文件) |
licenses_binary | 存放許可證文件 |
sbin | 管理員程序(super bin) |
share | 存放二進(jìn)制源碼(jar包) |
5、配置workers文件
cd etc/hadoop/
vim workers
將workers文件原有的內(nèi)容刪掉,改為
node1
node2
node3
保存即可;
6、配置hadoop-env.sh文件,使用vim hadoop-env.sh
打開,修改以下配置:
# 指明JDK安裝目錄
export JAVA_HOME=/export/server/jdk
# 指明HADOOP安裝目錄
export HADOOP_HOME=/export/server/hadoop
# 指明HADOOP配置文件的目錄
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
#指明HADOOP運(yùn)行日志文件的目錄
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
7、配置core-site.xml文件,使用vim core-site.xml
打開文件,修改以下配置:
<configuration><property><!--HDFS 文件系統(tǒng)的網(wǎng)絡(luò)通訊路徑--><name>fs.defaultFS</name><value>hdfs://node1:8020</value></property><property><!--io 操作文件緩沖區(qū)大小--><name>io.file.buffer.size</name><value>131072</value></property>
</configuration>
8、配置hdfs-site.xml文件,修改以下配置:
<configuration><property><!--hdfs 文件系統(tǒng),默認(rèn)創(chuàng)建的文件權(quán)限設(shè)置--><name>dfs.datanode.data.dir.perm</name><!-- 700權(quán)限即rwx------ --><value>700</value></property><property><!--NameNode 元數(shù)據(jù)的存儲位置--><name>dfs.namenode.name.dir</name><!-- 在 node1 節(jié)點(diǎn)的 /data/nn 目錄下 --><value>/data/nn</value></property><property><!--NameNode 允許哪幾個(gè)節(jié)點(diǎn)的 DataNode 連接(即允許加入集群)--><name>dfs.namenode.hosts</name><value>node1,node2,node3</value></property><property><!--hdfs 默認(rèn)塊大小--><name>dfs.blocksize</name><!--268435456即256MB--><value>268435456</value></property><property><!--namenode 處理的并發(fā)線程數(shù)--><name>dfs.namenode.handler.count</name><value>100</value></property><property><!--從節(jié)點(diǎn) DataNode 的數(shù)據(jù)存儲目錄,即數(shù)據(jù)存放在node1、node2、node3三臺機(jī)器中的路徑--><name>dfs.datanode.data.dir</name><value>/data/dn</value></property>
</configuration>
9、根據(jù)上一步的配置項(xiàng),在node1節(jié)點(diǎn)創(chuàng)建/data/nn
和/data/dn
目錄,在node2和node3節(jié)點(diǎn)創(chuàng)建/data/dn
目錄;
10、將已配置好的hadoop程序從node1分發(fā)到node2和node3:
# 切換工作目錄
cd /export/server/
# 將node1的hadoop-3.3.4/目錄復(fù)制到node2的同樣的位置
scp -r hadoop-3.3.4/ node2:`pwd`/
# 將node1的hadoop-3.3.4/目錄復(fù)制到node3的同樣的位置
scp -r hadoop-3.3.4/ node3:`pwd`/
11、將Hadoop加入環(huán)境變量,使用vim /etc/profile
打開環(huán)境變量文件,將以下內(nèi)容添加在文件末尾:
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
執(zhí)行source /etc/profile
命令使環(huán)境變量配置生效;
12、修改相關(guān)目錄的權(quán)限:
chown -R hadoop:hadoop /data
chown -R hadoop:hadoop /export/
2.2. 部署node2和node3虛擬機(jī)
本小節(jié)內(nèi)容如無特殊說明,均需在node2和node3虛擬機(jī)分別執(zhí)行!
1、為hadoop創(chuàng)建軟鏈接,命令都是一樣的,如下所示:
cd /export/server/
ln -s /export/server/hadoop-3.3.4/ hadoop
2、將Hadoop加入環(huán)境變量,使用vim /etc/profile
打開環(huán)境變量文件,將以下內(nèi)容添加在文件末尾:
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
執(zhí)行source /etc/profile
命令使環(huán)境變量配置生效;
3、修改相關(guān)目錄的權(quán)限:
chown -R hadoop:hadoop /data
chown -R hadoop:hadoop /export/
2.3. 初始化并啟動(dòng)Hadoop集群(格式化文件系統(tǒng))
1、在node1虛擬機(jī)上執(zhí)行以下命令:
# 切換為hadoop用戶
su - hadoop
# 格式化namenode
hadoop namenode -format
2、啟動(dòng)集群,在node1虛擬機(jī)上執(zhí)行以下命令:
# 一鍵啟動(dòng)整個(gè)集群,包括namenode、secondarynamenode和所有的datanode
start-dfs.sh
# 查看當(dāng)前系統(tǒng)中正在運(yùn)行的Java進(jìn)程,可以看到每臺虛擬機(jī)上hadoop的運(yùn)行情況
jps
3、執(zhí)行上述步驟之后,我們可以在我們自己的電腦(非虛擬機(jī))上查看 HDFS WEBUI(即HADOOP管理頁面),可以通過訪問namenode所在服務(wù)器的9870端口查看,在本案例中因?yàn)閚amenode處于node1虛擬機(jī)上,所以可以訪問http://node1:9870/打開。PS:因?yàn)橹拔覀円呀?jīng)配置了本機(jī)的hosts文件,所以這里可以使用node1訪問,其實(shí)這個(gè)地址對應(yīng)的就是http://192.168.88.101:9870/。
4、如果看到以下界面,代表Hadoop集群啟動(dòng)成功了。
2.4. 快照部署好的集群
為了保存剛部署好的集群,在后續(xù)如果出現(xiàn)無法解決的問題,不至于重新部署一遍,使用虛擬機(jī)快照的方式進(jìn)行備份。
1、一鍵關(guān)閉集群,在node1虛擬機(jī)執(zhí)行以下命令:
# 切換為hadoop用戶
su - hadoop
# 一鍵關(guān)閉整個(gè)集群
stop-dfs.sh
關(guān)閉完成后,可以在node1、node2、node3虛擬機(jī)中使用jps
命令查看相應(yīng)Java進(jìn)程是否已消失。
2、關(guān)閉三臺虛擬機(jī);
3、在VMware中,分別在三臺虛擬機(jī)上右鍵,“快照”-“拍攝快照”功能創(chuàng)建快照。
2.5. 部署過程中可能會(huì)遇到的問題
- 在以Hadoop用戶身份執(zhí)行
start-dfs.sh
命令時(shí),提示Permission denied。此時(shí)需要檢查三臺虛擬機(jī)上相關(guān)路徑(/data、/export/server及其子路徑)上hadoop用戶是否具有讀、寫、執(zhí)行的權(quán)限。 - 在執(zhí)行
start-dfs.sh
命令后,使用jps
命令可以查看已啟動(dòng)的服務(wù),若發(fā)現(xiàn)有服務(wù)未啟動(dòng)成功的,可以查看/export/server/hadoop/logs目錄下的日志文件,若在日志文件中看到類似于無權(quán)限、不可訪問等報(bào)錯(cuò)信息,同樣需要檢查對應(yīng)機(jī)器的相關(guān)路徑權(quán)限。 - 執(zhí)行
hadoop namenode -format
、start-dfs.sh
、stop-dfs.sh
等Hadoop相關(guān)命令時(shí),若提示command not found,則代表著環(huán)境變量沒配置好,需要檢查三臺機(jī)器的/etc/profile文件的內(nèi)容(需要使用source
命令使環(huán)境變量生效)以及hadoop的軟連接是否正確。 - 執(zhí)行
start-dfs.sh
命令后,node1的相關(guān)進(jìn)程啟動(dòng)成功,但node2和node3沒有啟動(dòng)的,需要檢查workers文件的配置是否有node2和node3。 - 若在日志文件中看到WstxEOFException或Unexpected EOF等信息,大概率是xml配置文件有問題,需要仔細(xì)檢查core-site.xml和hdfs-site.xml文件里面的內(nèi)容(少了某個(gè)字母或字符、寫錯(cuò)了某個(gè)字母或字符),尤其是符號。
綜上,常見出錯(cuò)點(diǎn)總結(jié)為:
- 權(quán)限未正確配置;
- 配置文件錯(cuò)誤;
- 未格式化
2.5. Hadoop HDFS集群啟停腳本
注意:在使用以下命令前,一定要確保當(dāng)前是hadoop用戶,否則將報(bào)錯(cuò)或沒有效果!!!
-
Hadoop HDFS 組件內(nèi)置了HDFS集群的一鍵啟停腳本。
-
$HADOOP_HOME/sbin/start-dfs.sh,一鍵啟動(dòng)HDFS集群
執(zhí)行流程:- 在執(zhí)行此腳本的機(jī)器上,啟動(dòng)SecondaryNameNode;
- 讀取
core-site.xml
內(nèi)容(fs.defaultFS項(xiàng)),確定NameNode所在機(jī)器,啟動(dòng)NameNode; - 讀取
workers
內(nèi)容,確定DataNode所在機(jī)器,啟動(dòng)全部DataNode。
-
$HADOOP_HOME/sbin/stop-dfs.sh,一鍵關(guān)閉HDFS集群
執(zhí)行流程:- 在執(zhí)行此腳本的機(jī)器上,關(guān)閉SecondaryNameNode;
- 讀取
core-site.xml
內(nèi)容(fs.defaultFS項(xiàng)),確定NameNode所在機(jī)器,關(guān)閉NameNode; - 讀取
workers
內(nèi)容,確認(rèn)DataNode所在機(jī)器,關(guān)閉全部NameNode。
-
-
除了一鍵啟停外,也可以單獨(dú)控制某個(gè)進(jìn)程的啟停。
-
$HADOOP_HOME/sbin/hadoop-daemon.sh,此腳本可以單獨(dú)控制所在機(jī)器的進(jìn)程啟停
用法:hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)
-
$HADOOP_HOME/sbin/hdfs,此程序也可以單獨(dú)控制所在機(jī)器的進(jìn)程啟停
用法:hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)
-
三、使用HDFS文件系統(tǒng)
3.1. 使用命令操作HDFS文件系統(tǒng)
3.1.1. HDFS文件系統(tǒng)基本信息
- HDFS和Linux系統(tǒng)一樣,均是以
/
作為根目錄的組織形式; - 如何區(qū)分HDFS和Linux文件系統(tǒng):
- Linux文件系統(tǒng)以
file://
作為協(xié)議頭,HDFS文件系統(tǒng)以hdfs://namenode:port
作為協(xié)議頭; - 例如,有路徑
/usr/local/hello.txt
,在Linux文件系統(tǒng)中表示為file:///usr/local/hello.txt
,在HDFS文件系統(tǒng)中表示為hdfs://node1:8020/usr/local/hello.txt
; - 但一般情況下,協(xié)議頭是可以省略的,使用Linux命令時(shí),會(huì)自動(dòng)識別為
file://
協(xié)議頭,使用HDFS命令時(shí),會(huì)自動(dòng)識別為hdfs://namenode:port
協(xié)議頭; - 但如果需要再使用HDFS命令操作Linux文件時(shí),需要明確使用
file://
協(xié)議頭。
- Linux文件系統(tǒng)以
3.1.2. HDFS文件系統(tǒng)的2套命令體系
老版本
用法:hadoop fs [generic options]
新版本
用法:hdfs dfs [generic options]
兩套命令用法完全一致,效果完全一樣,但某些特殊命令需要選擇hadoop或hdfs命令。
3.1.3. 創(chuàng)建文件夾
用法:
hadoop fs -mkdir [-p] <path> ...
hdfs dfs -mkdir [-p] <path> ...
path為待創(chuàng)建的目錄
-p 選項(xiàng)意思與Linux的mkdir -p一樣,自動(dòng)逐層創(chuàng)建對應(yīng)的目錄。
例如:
hadoop fs -mkdir -p file:///home/hadoop/test
在Linux系統(tǒng)下創(chuàng)建/home/hadoop/test文件夾;
hadoop fs -mkdir -p hdfs://node1:8020/itheima/bigdata
在HDFS中創(chuàng)建/itheima/bigdata文件夾;
hdfs dfs -mkdir -p /home/hadoop/itcast
在HDFS中創(chuàng)建/home/hadoop/itcast文件夾;
3.1.4. 查看指定目錄下的內(nèi)容
用法:
hadoop fs -ls [-h] [-R] [<path> ...]
hdfs dfs -ls [-h] [-R] [<path> ...]
path為指定的目錄路徑
-h 人性化顯示size
-R 遞歸查看指定目錄及其子目錄。
例如:
hdfs dfs -ls /
查看HDFS 根目錄下的內(nèi)容
hadoop fs -ls /
查看HDFS 根目錄下的內(nèi)容,與上面等效
hdfs dfs -ls -R /
遞歸查看HDFS根目錄下的內(nèi)容
hdfs dfs -ls file:///
查看當(dāng)前這臺Linux機(jī)器根目錄下的內(nèi)容
hdfs dfs -ls -h /
查看HDFS根目錄下的內(nèi)容,當(dāng)文件大小大于1k之后,其大小會(huì)有單位,便于人的閱讀;
3.1.5. 上傳文件到HDFS指定目錄下
用法:
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
hdfs dfs -put [-f] [-p] <localsrc> ... <dst>
-f 當(dāng)目標(biāo)文件已存在時(shí),覆蓋目標(biāo)文件
-p 保留訪問和修改時(shí)間,所有權(quán)和權(quán)限
localsrc 要上傳的本地(Linux系統(tǒng))文件的路徑
dst 要保存在HDFS中的具體路徑。
例如:
hadoop fs -put file:///home/hadoop/test.txt hdfs://node1:8020/
將本地/home/hadoop/下的test.txt文件上傳到HDFS的根目錄下的完整寫法;
hdfs dfs -put test2.txt /
將本地當(dāng)前目錄下的test2.txt文件上傳到HDFS的根目錄下;
hdfs dfs -put -f test2.txt /
將本地目錄下的test2.txt文件上傳到HDFS的根目錄下,并強(qiáng)制覆蓋原有的test2.txt文件;
3.1.6. 查看HDFS中文件的內(nèi)容
用法:
hadoop fs -cat <src> ...
hdfs dfs -cat <src> ...
讀取大文件時(shí),可以使用管道符配合more
hadoop fs -cat <src> | more
hdfs dfs -cat <src> | more
例如:
hadoop fs -cat /test.txt
查看HDFS根目錄下test.txt文件的內(nèi)容
hdfs dfs -cat /test2.txt | more
查看HDFS根目錄下的test2.txt文件的內(nèi)容,可以翻頁,適用于查看大文件
3.1.7. 從HDFS下載文件到本地
用法:
hadoop fs -get [-f] [-p] <src> ... <localdst>
hdfs dfs -get [-f] [-p] <src> ... <localdst>
-f 當(dāng)目標(biāo)文件已存在時(shí),覆蓋目標(biāo)文件
-p 保留訪問和修改時(shí)間,所有權(quán)和權(quán)限
src 要下載的HDFS文件路徑
localdst 要保存在本地Linux系統(tǒng)中的路徑。
例如:
hadoop fs -get /test.txt .
將HDFS根目錄下的test.txt文件下載到本地Linux系統(tǒng)的當(dāng)前目錄下;
hadoop fs -get -f /test.txt .
將HDFS根目錄下的test.txt文件下載到本地Linux系統(tǒng)的當(dāng)前目錄下,若本地已存在test.txt,則強(qiáng)制覆蓋;
hdfs dfs -get /test2.txt .
將HDFS根目錄下的test2.txt文件下載到本地的當(dāng)前目錄下;
3.1.8. 復(fù)制HDFS文件(在HDFS系統(tǒng)內(nèi)復(fù)制)
用法:
hadoop fs -cp [-f] <src> ... <dst>
hdfs dfs -cp [-f] <src> ... <dst>
-f 若目標(biāo)文件存在,則強(qiáng)制覆蓋目標(biāo)文件
src HDFS文件系統(tǒng)中被復(fù)制的文件路徑
dst 要復(fù)制到的HDFS文件系統(tǒng)目標(biāo)路徑
例如:
hadoop fs -cp /test.txt /home/
將HDFS根目錄下的test.txt文件復(fù)制到HDFS文件系統(tǒng)/home/目錄下
hadoop fs -cp /test.txt /home/abc.txt
將HDFS根目錄下的test.txt文件復(fù)制到HDFS文件系統(tǒng)/home/目錄下,并將其改名為abc.txt
3.1.9. 追加數(shù)據(jù)到HDFS文件中
用法:
hadoop fs -appendToFile <localsrc> ... <dst>
hdfs dfs -appendToFile <localsrc> ... <dst>
localsrc Linux系統(tǒng)的本地文件路徑,要追加的內(nèi)容放在這個(gè)文件里
dst HDFS文件系統(tǒng)中被追加的文件,如果文件不存在則創(chuàng)建該文件
在HDFS系統(tǒng)中想要修改文件,僅有兩種方式:刪除 或 追加
例如:
hadoop fs -appendToFile append.txt /test.txt
將Linux本地當(dāng)前目錄下的append.txt文件中的內(nèi)容追加到HDFS系統(tǒng)根目錄下test.txt文件中去
3.1.10. 移動(dòng)或重命名HDFS文件(在HDFS系統(tǒng)內(nèi)移動(dòng))
用法:
hadoop fs -mv <src> ... <dst>
hdfs dfs -mv <src> ... <dst>
src HDFS文件系統(tǒng)中的源文件
dst HDFS文件系統(tǒng)中的目標(biāo)位置
例如:
hadoop fs -mv /test.txt /itheima
將HDFS系統(tǒng)根目錄下的test.txt文件移動(dòng)到HDFS系統(tǒng)/itheima/目錄里
hdfs dfs -mv /test2.txt /itheima/abc.txt
將HDFS系統(tǒng)根目錄下的test2.txt文件移動(dòng)到HDFS系統(tǒng)/itheima/目錄里,并將其改名為abc.txt
3.1.11. 刪除HDFS文件
用法:
hadoop fs -rm [-r] [-skipTrash] URI [URI ...]
hdfs dfs -rm [-r] [-skipTrash] URI [URI ...]
-r 刪除文件夾時(shí)需要此參數(shù),刪除文件時(shí)不用
-skipTrash 跳過回收站,直接刪除(徹底刪除)
回收站功能默認(rèn)是關(guān)閉的,如果需要開啟,需要修改core-site.xml
配置文件。
例如:
hadoop fs -rm -r /home
刪除HDFS系統(tǒng)中的/home文件夾
hdfs dfs -rm /itheima/test.txt
刪除HDFS系統(tǒng)中/itheima目錄下的test.txt文件
配置開啟Hadoop的回收站
修改core-site.xml
配置文件vim /export/server/hadoop/etc/hadoop/core-site.xml
:
<property><!--回收站保留的時(shí)間,1440的單位是分鐘,代表著1天,超過這個(gè)時(shí)間之后,刪除的文件就徹底刪除了--><name>fs.trash.interval</name><value>1440</value>
</property><property><!--指垃圾回收的檢查間隔,應(yīng)該是小于或者等于fs.trash.interval,120分鐘即每2小時(shí)檢查一次,檢查時(shí)發(fā)現(xiàn)如果有文件的刪除時(shí)間大于上面的1440,就從回收站里面刪掉,也就是徹底刪除了--><name>fs.trash.checkpoint.interval</name><value>120</value>
</property>
無需重啟集群,在哪個(gè)機(jī)器配置的,在哪個(gè)機(jī)器執(zhí)行命令就生效。即如果只是在node1節(jié)點(diǎn)配置了,那只有在node1節(jié)點(diǎn)執(zhí)行刪除命令才有用,在其他節(jié)點(diǎn)執(zhí)行是沒用的!!!
回收站默認(rèn)位置在:/user/用戶名(hadoop)/.Trash
刪除HDFS系統(tǒng)內(nèi)的文件hadoop fs -rm /itheima/abc.txt
會(huì)看到有如下提示
[hadoop@node1 ~]$ hadoop fs -rm /itheima/abc.txt
2023-12-02 14:58:06,322 INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/itheima/abc.txt' to trash at: hdfs://node1:8020/user/hadoop/.Trash/Current/itheima/abc.txt
可以看到,雖然輸入的是rm
命令,但實(shí)際上HDFS系統(tǒng)會(huì)將要?jiǎng)h除的文件移動(dòng)到hdfs://node1:8020/user/hadoop/.Trash/Current/
目錄下。
此時(shí),可以使用 hadoop fs -ls -R /
命令查看,當(dāng)開啟回收站后,HDFS系統(tǒng)會(huì)在根目錄下默認(rèn)創(chuàng)建/user/當(dāng)前用戶/Current
的目錄(當(dāng)前用戶為hadoop)
當(dāng)然,也可以通過參數(shù)-skipTrash實(shí)現(xiàn)徹底刪除,不讓被刪除的文件進(jìn)入回收站
hadoop fs -rm -r -skipTrash /itheima
徹底刪除(不進(jìn)入回收站)HDFS根目錄下的itheima文件夾,此命令執(zhí)行效果如下:
[hadoop@node1 ~]$ hadoop fs -rm -r -skipTrash /itheima
Deleted /itheima
可以看到,和不開回收站時(shí),執(zhí)行rm
命令的效果一樣。
3.1.12. 其他HDFS命令
官方文檔:https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-common/FileSystemShell.html
3.2. HDFS Web瀏覽
除了上述的命令方式外,還可以通過HDFS NameNode節(jié)點(diǎn)的Web頁面操作文件系統(tǒng),入口在http://node1:9870/中
在Web頁面中可以查看,但是沒法操作文件,因?yàn)镠DFS系統(tǒng)的權(quán)限是給hadoop用戶的,但是Web頁面默認(rèn)情況下其實(shí)是個(gè)匿名用戶(dr.who)
當(dāng)然,也可以讓W(xué)eb頁面擁有權(quán)限,需要修改core-site.xml
配置文件,增加如下配置:
<property><name>hadoop.http.staticuser.user</name><value>hadoop</value>
</property>
將Web頁面的權(quán)限設(shè)置成hadoop用戶。
但是,不推薦這樣做:
- HDFS WEBUI,只讀權(quán)限挺好的,簡單瀏覽即可
- 如果給與高權(quán)限,會(huì)有很大的安全問題,造成數(shù)據(jù)泄露或丟失
3.3. HDFS系統(tǒng)權(quán)限
HDFS系統(tǒng)有自己獨(dú)立的權(quán)限體系,但其權(quán)限類型與Linux一致,都是按照讀(r)、寫(w)、可執(zhí)行(x)進(jìn)行授權(quán),權(quán)限分為三組,從左到右依次是所有者的權(quán)限、所有組的權(quán)限、其他用戶權(quán)限。通過hadoop fs -ls
或hdfs dfs -ls
命令可以查看到HDFS系統(tǒng)內(nèi)各文件和文件夾的權(quán)限。
但與Linux不同的是,在Linux系統(tǒng)中超級用戶是root,但在HDFS系統(tǒng)中,超級用戶是啟動(dòng)namenode的用戶(本示例中就是hadoop用戶),如果在HDFS系統(tǒng)中的文件時(shí)遇到Permission denied
等權(quán)限不足的報(bào)錯(cuò)提醒時(shí),首先要檢查的就是當(dāng)前用戶是否為啟動(dòng)namenode的用戶。
3.3.1. 修改HDFS文件權(quán)限
用法:
hadoop fs -chmod [-R] 777 <path>
hdfs dfs -chmod [-R] 777 <path>
例如:
hadoop fs -chmod 777 /test3.txt
將HDFS根目錄下的test3.txt文件的權(quán)限修改成所有人可讀、可寫、可執(zhí)行
[hadoop@node1 ~]$ hadoop fs -chmod 777 /test3.txt
[hadoop@node1 ~]$ hdfs dfs -ls /test3.txt
-rwxrwxrwx 3 hadoop supergroup 268037352 2023-12-05 10:48 /test3.txt
3.3.2. 修改HDFS文件所屬用戶和組
用法:
hadoop fs -chown [-R] hadoop:supergroup <path>
hdfs dfs -chown [-R] hadoop:supergroup <path>
例如:
hadoop fs -chown root:supergroup /test.txt
將HDFS根目錄下的test.txt文件的所有者修改為root用戶,所有組為supergroup。
[hadoop@node1 ~]$ hadoop fs -chown root:supergroup /test.txt
[hadoop@node1 ~]$ hdfs dfs -ls /test.txt
-rw-r--r-- 3 root supergroup 44 2023-12-02 15:11 /test.txt