答應(yīng)我一次做好一件事情就可以了
DataNode相關(guān)概念
DataNode工作機(jī)制
- 一個(gè)數(shù)據(jù)塊在DataNode上以文件形式存儲(chǔ)在磁盤(pán)上夭委,包括兩個(gè)文件驳遵,一個(gè)是數(shù)據(jù)本身,一個(gè)是元數(shù)據(jù)包括數(shù)據(jù)塊的長(zhǎng)度,塊數(shù)據(jù)的校驗(yàn)和,以及時(shí)間戳禀挫。
- DataNode啟動(dòng)后向NameNode注冊(cè),通過(guò)后逗余,周期性(1小時(shí))的向NameNode上報(bào)所有的塊信息特咆。
- 心跳是每3秒一次季惩,心跳返回結(jié)果帶有NameNode給該DataNode的命令如復(fù)制塊數(shù)據(jù)到另一臺(tái)機(jī)器录粱,或刪除某個(gè)數(shù)據(jù)塊。如果超過(guò)10分鐘沒(méi)有收到某個(gè)DataNode的心跳画拾,則認(rèn)為該節(jié)點(diǎn)不可用啥繁。
- 集群運(yùn)行中可以安全加入和退出一些機(jī)器【后面介紹新增節(jié)點(diǎn)和退役節(jié)點(diǎn)】。
數(shù)據(jù)完整性
? 當(dāng)DataNode讀取Block的時(shí)候青抛,它會(huì)計(jì)算CheckSum旗闽。如果計(jì)算后的CheckSum,與Block創(chuàng)建時(shí)值不一樣蜜另,說(shuō)明Block已經(jīng)損壞适室。Client讀取其他DataNode上的Block。DataNode在其文件創(chuàng)建后周期驗(yàn)證CheckSum举瑰,如圖所示
掉線時(shí)限參數(shù)設(shè)置
在hdfs-site.xml中配置
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value> # 單位毫秒
</property>
<property>
<name> dfs.heartbeat.interval </name>
<value>3</value> # 單位秒
</property>
服役新數(shù)據(jù)節(jié)點(diǎn)
技術(shù)背景
隨著公司業(yè)務(wù)量越來(lái)越大捣辆,原來(lái)的數(shù)據(jù)節(jié)點(diǎn)已經(jīng)不能滿足其存儲(chǔ)數(shù)據(jù)的需求,需要進(jìn)行節(jié)點(diǎn)的動(dòng)態(tài)擴(kuò)充
如果是使用云服務(wù)器就需要在創(chuàng)建一個(gè)實(shí)例此迅,如果是自己的虛擬機(jī)克隆一臺(tái)就行
下面演示虛擬機(jī)克隆來(lái)新增節(jié)點(diǎn)
1.環(huán)境準(zhǔn)備
(1)在hadoop104主機(jī)上再克隆一臺(tái)hadoop105主機(jī)
(2)修改IP地址和主機(jī)名稱(chēng)
(3)刪除原來(lái)HDFS文件系統(tǒng)留存的文件(/opt/module/hadoop-2.7.2/data 和log)
(4)source 一下配置文件: source /etc/profile
2.服務(wù)節(jié)點(diǎn)步驟
(1)直接啟動(dòng)DataNode汽畴,即可關(guān)聯(lián)到集群,是不是超級(jí)簡(jiǎn)單
[zhutiansama@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[zhutiansama@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
(2)在hadoop105上上傳文件
[zhutiansama@hadoop105 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /
(3)如果數(shù)據(jù)不均衡,可以用命令實(shí)現(xiàn)集群的再平衡
[zhutiansama@hadoop102 sbin]$ ./start-balancer.sh
退役舊數(shù)據(jù)節(jié)點(diǎn)【白名單】
要點(diǎn):直接將想要的從機(jī)添加到白名單即可
配置白名單步驟如下:
(1)在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下創(chuàng)建dfs.hosts文件
[zhutiansama@hadoop102 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[zhutiansama@hadoop102 hadoop]$ touch dfs.hosts
[zhutiansama@hadoop102 hadoop]$ vi dfs.hosts
添加如下主機(jī)名稱(chēng)(不添加hadoop105)
hadoop102
hadoop103
hadoop104
(2)在NameNode的hdfs-site.xml配置文件中增加dfs.hosts屬性
<property>
<name>dfs.hosts</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
</property>
(3)配置文件分發(fā)
[zhutiansama@hadoop102 hadoop]$ xsync hdfs-site.xml
(4)刷新NameNode
[zhutiansama@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
(5)更新ResourceManager節(jié)點(diǎn)
[zhutiansama@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
(6)在web瀏覽器上查看
如果數(shù)據(jù)不平衡可以再使用start-balancer.sh命令
退役舊數(shù)據(jù)節(jié)點(diǎn)【黑名單】
操作同上耸序,只是將白名單文件換位黑名單文件dfs.hosts.exclude
在黑名單上的主機(jī)都會(huì)被踢出集群
Datanode多目錄配置
這個(gè)多目錄不是副本的意思忍些,是表明你不想要把所有數(shù)據(jù)都放在一個(gè)目錄下罷了
具體配置如下hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>