HADOOP 優化(2):HDFS (2)多目錄/叢集擴容及縮容
3HDFS—多目錄
3.1 NameNode多目錄配置
1)NameNode的本地目錄可以配置成多個,且每個目錄存放內容相同,增加了可靠性
2)具體配置如下
(1)在hdfs-site.xml檔案中新增如下內容
<property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2</value> </property>
注意:因為每臺伺服器節點的磁碟情況不同
(2)停止叢集,刪除三臺節點的data和logs中所有資料。
[atguigu@hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/
[atguigu@hadoop103 hadoop-3.1.3]$ rm -rf data/ logs/
[atguigu@hadoop104 hadoop-3.1.3]$ rm -rf data/ logs/
(3)格式化叢集並啟動。
[atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs namenode -format
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
3)檢視結果
[atguigu@hadoop102 dfs]$ ll
總用量 12
drwx------. 3 atguigu atguigu 4096 12月 11 08:03 data
drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name1
drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name2
檢查name1和name2裡面的內容,發現一模一樣。
3.2DataNode多目錄配置
1)DataNode可以配置成多個目錄,每個目錄儲存的資料不一樣(資料不是副本)
2)具體配置如下
在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>
3)檢視結果
[atguigu@hadoop102 dfs]$ ll 總用量 12 drwx------. 3 atguigu atguigu 4096 4月 4 14:22 data1 drwx------. 3 atguigu atguigu 4096 4月 4 14:22 data2 drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name1 drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name2
4)向叢集上傳一個檔案,再次觀察兩個資料夾裡面的內容發現不一致(一個有數一個沒有)
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /
3.3叢集資料均衡之磁碟間資料均衡
生產環境,由於硬碟空間不足,往往需要增加一塊硬碟。剛載入的硬碟沒有資料時,可以執行磁碟資料均衡命令。(Hadoop3.x新特性)
(1)生成均衡計劃(我們只有一塊磁碟,不會生成計劃)
hdfs diskbalancer -plan hadoop103
(2)執行均衡計劃
hdfs diskbalancer -execute hadoop103.plan.json
(3)檢視當前均衡任務的執行情況
hdfs diskbalancer -query hadoop103
(4)取消均衡任務
hdfs diskbalancer -cancel hadoop103.plan.json
4HDFS—叢集擴容及縮容
4.1新增白名單
白名單:表示在白名單的主機IP地址可以,用來儲存資料。
企業中:配置白名單,可以儘量防止黑客惡意訪問攻擊。
配置白名單步驟如下:
1)在NameNode節點的/opt/module/hadoop-3.1.3/etc/hadoop目錄下分別創建whitelist 和blacklist檔案
(1)建立白名單
[atguigu@hadoop102 hadoop]$ vimwhitelist
在whitelist中新增如下主機名稱,假如叢集正常工作的節點為102 103
hadoop102
hadoop103
(2)建立黑名單
[atguigu@hadoop102 hadoop]$ touch blacklist
保持空的就可以
2)在hdfs-site.xml配置檔案中增加dfs.hosts配置引數
<!-- 白名單 --> <property> <name>dfs.hosts</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/whitelist</value> </property> <!-- 黑名單 --> <property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value> </property>
3)分發配置檔案whitelist,hdfs-site.xml
[atguigu@hadoop104 hadoop]$ xsync hdfs-site.xml whitelist
4)第一次新增白名單必須重啟叢集,不是第一次,只需要重新整理NameNode節點即可
[atguigu@hadoop102 hadoop-3.1.3]$ myhadoop.sh stop
[atguigu@hadoop102 hadoop-3.1.3]$ myhadoop.sh start
5)在web瀏覽器上檢視DN,http://hadoop102:9870/dfshealth.html#tab-datanode
6)在hadoop104上執行上傳資料資料失敗
[atguigu@hadoop104 hadoop-3.1.3]$ hadoop fs -put NOTICE.txt /
7)二次修改白名單,增加hadoop104
[atguigu@hadoop102 hadoop]$ vimwhitelist
修改為如下內容
hadoop102
hadoop103
hadoop104
8)重新整理NameNode
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
9)在web瀏覽器上檢視DN,http://hadoop102:9870/dfshealth.html#tab-datanode
4.2服役新伺服器
1)需求
隨著公司業務的增長,資料量越來越大,原有的資料節點的容量已經不能滿足儲存資料的需求,需要在原有叢集基礎上動態新增新的資料節點。
2)環境準備
(1)在hadoop100主機上再克隆一臺hadoop105主機
(2)修改IP地址和主機名稱
[root@hadoop105 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@hadoop105 ~]# vim /etc/hostname
(3)拷貝hadoop102的/opt/module目錄和/etc/profile.d/my_env.sh到hadoop105
[atguigu@hadoop102 opt]$ scp -r module/* atguigu@hadoop105:/opt/module/
[atguigu@hadoop102 opt]$ sudo scp/etc/profile.d/my_env.sh root@hadoop105:/etc/profile.d/my_env.sh
[atguigu@hadoop105 hadoop-3.1.3]$ source /etc/profile
(4)刪除hadoop105上Hadoop的歷史資料,data和log資料
[atguigu@hadoop105 hadoop-3.1.3]$ rm -rf data/ logs/
(5)配置hadoop102和hadoop103到hadoop105的ssh無密登入
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop105
[atguigu@hadoop103 .ssh]$ ssh-copy-id hadoop105
3)服役新節點具體步驟
(1)直接啟動DataNode,即可關聯到叢集
[atguigu@hadoop105 hadoop-3.1.3]$ hdfs --daemon start datanode
[atguigu@hadoop105 hadoop-3.1.3]$ yarn --daemon start nodemanager
4)在白名單中增加新服役的伺服器
(1)在白名單whitelist中增加hadoop104、hadoop105,並重啟叢集
[atguigu@hadoop102 hadoop]$ vim whitelist
修改為如下內容
hadoop102
hadoop103
hadoop104
hadoop105
(2)分發
[atguigu@hadoop102 hadoop]$ xsync whitelist
(3)重新整理NameNode
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
5)在hadoop105上上傳檔案
[atguigu@hadoop105 hadoop-3.1.3]$ hadoop fs -put /opt/module/hadoop-3.1.3/LICENSE.txt /
思考:如果資料不均衡(hadoop105資料少,其他節點資料多),怎麼處理?
4.3伺服器間資料均衡
1)企業經驗:
在企業開發中,如果經常在hadoop102和hadoop104上提交任務,且副本數為2,由於資料本地性原則,就會導致hadoop102和hadoop104資料過多,hadoop103儲存的資料量小。
另一種情況,就是新服役的伺服器資料量比較少,需要執行叢集均衡命令。
2)開啟資料均衡命令:
[atguigu@hadoop105 hadoop-3.1.3]$ sbin/start-balancer.sh -threshold 10
對於引數10,代表的是叢集中各個節點的磁碟空間利用率相差不超過10%,可根據實際情況進行調整。
3)停止資料均衡命令:
[atguigu@hadoop105 hadoop-3.1.3]$ sbin/stop-balancer.sh
注意:由於HDFS需要啟動單獨的Rebalance Server來執行Rebalance操作,所以儘量不要在NameNode上執行start-balancer.sh,而是找一臺比較空閒的機器。
4.4 黑名單退役伺服器
黑名單:表示在黑名單的主機IP地址不可以,用來儲存資料。
企業中:配置黑名單,用來退役伺服器。
黑名單配置步驟如下:
1)編輯/opt/module/hadoop-3.1.3/etc/hadoop目錄下的blacklist檔案
[atguigu@hadoop102hadoop]vim blacklist
新增如下主機名稱(要退役的節點)
hadoop105
注意:如果白名單中沒有配置,需要在hdfs-site.xml配置檔案中增加dfs.hosts配置引數
<!-- 黑名單 --> <property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value> </property>
2)分發配置檔案blacklist,hdfs-site.xml
[atguigu@hadoop104 hadoop]$ xsync hdfs-site.xml blacklist
3)第一次新增黑名單必須重啟叢集,不是第一次,只需要重新整理NameNode節點即可
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
4)檢查Web瀏覽器,退役節點的狀態為decommission in progress(退役中),說明資料節點正在複製塊到其他節點
5)等待退役節點狀態為decommissioned(所有塊已經複製完成),停止該節點及節點資源管理器。注意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數後才能退役
[atguigu@hadoop105 hadoop-3.1.3]$ hdfs --daemon stop datanode
stopping datanode
[atguigu@hadoop105 hadoop-3.1.3]$ yarn--daemon stop nodemanager
stopping nodemanager
6)如果資料不均衡,可以用命令實現叢集的再平衡
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-balancer.sh -threshold 10
本文來自部落格園,作者:秋華,轉載請註明原文連結:https://www.cnblogs.com/qiu-hua/p/15229240.html