HDFS-叢集擴容及縮容
新增白名單
白名單:在白名單的主機IP地址可以訪問叢集,對叢集進行資料的儲存。不在白名單的主機可以訪問叢集,但是不會在主機上儲存資料
企業中:配置白名單,可以儘量防止黑客惡意訪問攻擊。
配置白名單的步驟
1.在NameNode節點的主機(hadoop102)/opt/module/hadoop-3.1.3/etc/hadoop
目錄下分別建立whitelist和blacklist檔案
建立白名單
[ranan@hadoop102 hadoop]$ vim whitelist
hadoop102
hadoop103
[ranan@hadoop102 hadoop]$ touch blacklist # 為後續黑名單做準備
2.在 /opt/module/hadoop-3.1.3/etc/hadoop
下的hdfs-site.xml 配置檔案中增加 dfs.hosts 配置引數
與當前叢集建立聯絡
[ranan@hadoop102 hadoop]$ vim hdfs-site.xml
# 新增
<!-- 白名單 -->
<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>
# 分發給其他節點
[ranan@hadoop102 hadoop]$ xsync whitelist blacklist hdfs-site.xml
3.第一次新增白名單(黑名單)必須重啟叢集,不是第一次,只需要重新整理 NameNode 節點。
[ranan@hadoop102 hadoop-3.1.3]$ myhadoop.sh stop
[ranan@hadoop102 hadoop-3.1.3]$ myhadoop.sh start
沒有104了,但是104還是啟動了相應的程式
[ranan@hadoop102 bin]$ jpsall
=============== hadoop102 ===============
2918 DataNode
2760 NameNode
3721 Jps
3515 JobHistoryServer
3310 NodeManager
=============== hadoop103 ===============
2947 NodeManager
2789 ResourceManager
3367 Jps
2558 DataNode
=============== hadoop104 ===============
3059 Jps
2825 NodeManager
2538 DataNode
2670 SecondaryNameNode
5.在 hadoop104 上執行上傳資料
[ranan@hadoop104 bin]$ hadoop fs -put myhadoop.sh /
客戶端還可以訪問叢集
但是資料不會在hadoop104上儲存
二次配置白名單
1.增加hadoop104
[ranan@hadoop104 bin]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
[ranan@hadoop104 hadoop]$ vim whitelist
[ranan@hadoop104 hadoop]$ cat whitelist
hadoop102
hadoop103
hadoop104
[ranan@hadoop104 hadoop]$ xsync whitelist
2.重新整理NameNode
[ranan@hadoop104 hadoop]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
3.刪除之前上傳的,重新進行提交
[ranan@hadoop104 bin]$ hadoop fs -put myhadoop.sh /
增加新伺服器
需求
隨著公司業務的增長,資料量越來越大,原有的資料節點的容量已經不能滿足儲存資料
的需求,需要在原有叢集基礎上動態新增新的資料節點。
動態新增:不重啟已有叢集
環境準備
在hadoop100主機上再克隆一臺hadoop105主機
修改IP地址和主機名稱
[ranan@hadoop100 ~]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.10.105 #修改成105
[ranan@hadoop100 ~]$ sudo vim /etc/hostname
hadoop105
[ranan@hadoop100 ~]$reboot
之前已經配置過了主機名及地址對映,所以就不用在所有節點/etc/host的檔案中新增新節點。這裡直接使用hadoop105進行連線
將hadoop102裡module下的hadoop和jdk傳給hadoop105,拷貝環境變數給hadoop105
[ranan@hadoop102 opt]$ scp -r module/* ranan@hadoop105:/opt/module/
[ranan@hadoop102 etc]$ sudo scp /etc/profile.d/my_env.sh root@hadoop105:/etc/profile.d/
# 在105上使環境變數生效
[ranan@hadoop105 module]$ source /etc/profile
配置無密連線,hadoop102(NameNode)、hadoop103(ResourceManager)到hadoop105
# 102 - 105
[ranan@hadoop102 etc]$ cd ~/.ssh
[ranan@hadoop102 .ssh]$ ssh-copy-id hadoop105
# 103 - 105
[ranan@hadoop103 ~]$ cd .ssh
[ranan@hadoop103 .ssh]$ ssh-copy-id hadoop105
此時hadoop102上的data和log也在hadoop105上,但是hadoop105是不能用的
在hadoop105上刪除hadoop102的data和logs
[ranan@hadoop105 hadoop-3.1.3]$ rm -rf data/ logs/
服役新節點具體步驟
直接啟動 DataNode, 即可關聯到叢集
[ranan@hadoop105 hadoop-3.1.3]$ hdfs --daemon start datanode
WARNING: /opt/module/hadoop-3.1.3/logs does not exist. Creating.
[ranan@hadoop105 hadoop-3.1.3]$ jps
2640 DataNode
2724 Jps
[ranan@hadoop105 hadoop-3.1.3]$ yarn --daemon start nodemanager
[ranan@hadoop105 hadoop-3.1.3]$ jps
2640 DataNode
2784 NodeManager
2887 Jps
因為我們配置了白名單,所以沒有立即生效,那把hadoop105新增進去。
在hadoop102上的/opt/module/hadoop-3.1.3/etc/hadoop
目錄下whiltelist
注意這裡分發的指令碼里面只有102、103、104所以這裡還需要手動的在Hadoop105上修改
[ranan@hadoop102 hadoop]$ vim whitelist
hadoop102
hadoop103
hadoop104
hadoop105
[ranan@hadoop102 hadoop]$ xsync whitelist
不是第一次配置白名單,不用停止叢集,直接重新整理NameNode
[ranan@hadoop102 hadoop]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
新增成功
在hadoop105上測試是否能上傳成功
[ranan@hadoop105 hadoop-3.1.3]$ hadoop fs -put wuguo.txt /
問題1 伺服器間資料均衡
那麼就存在一個問題,哪個節點上傳的資料最多,那麼他儲存的資料就多,會導致儲存不均衡的情況
如果資料不均衡(hadoop105 資料少,其他節點資料多),怎麼處理?
解決辦法:服務間資料均衡
問題2 105是怎麼關聯到叢集的
在核心配置檔案core-site.xml
裡 指定NameNode在哪個伺服器上(hadoop102上),作為DataNode自動取報告了
DataNode啟動後告訴NameNode本機的塊資訊(塊是否完好)
真正的修改需要/opt/module/hadoop-3.1.3/etc/hadoop/workers檔案,新增hadoop105節點。
伺服器間資料均衡
應用場景
場景1:如果經常在 hadoop102 和 hadoop104 上提交任務,且副本數為 2,由於資料本地性原則,就會導致 hadoop102 和 hadoop104 資料過多, hadoop103 儲存的資料量小。
場景2:新服役的伺服器資料量比較少,需要執行叢集均衡命令
伺服器間資料均衡配置
開啟資料均衡命
[ranan@hadoop102 hadoop-3.1.3]$ cd /opt/module/hadoop-3.1.3
[ranan@hadoop102 hadoop-3.1.3]$ sbin/start-balancer.sh -threshold 10
對於引數 10,代表的是叢集中各個節點(任意兩個節點)的磁碟空間利用率相差不超過 10%,可根據實際情況進行調整
我這裡虛擬機器資料量不大,所以執行了該命令沒反應
停止資料均衡命令
如果開啟命令執行時間過長,我們也可以停止
[ranan@hadoop102 hadoop-3.1.3]$ sbin/stop-balancer.sh
由於 HDFS 需要啟動單獨的 Rebalance Server 來執行 Rebalance 操作, 所以儘量
不要在 NameNode 上執行 start-balancer.sh,而是找一臺比較空閒的機器
黑名單退役舊節點
黑名單:在黑名單的主機 IP 地址不可以訪問叢集(待測試!),不能用來儲存資料。
企業中:配置黑名單,用來退役伺服器。
黑名單配置步驟
編輯/opt/module/hadoop-3.1.3/etc/hadoop 目錄下的 blacklist 檔案
需要在 hdfs-site.xml 配置檔案中增加 dfs.hosts 配置引數
配置白名單時新建了,並在hdfs-site檔案中增加了dfs.hosts.exclude配置引數,這裡我們就不修改了
<!-- 黑名單 -->
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value>
</property>
之前已經重啟叢集了,這裡我們就相當於不是首次配置了,直接重新整理NameNode節點就行
[ranan@hadoop102 hp]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
[ranan@hadoop102 hadoop]$ vim blacklist
hadoop105
[ranan@hadoop102 hadoop]$ xsync blacklist # 分發,105節點手動新增(也可以不配置因為它被拉入了黑名單)
[ranan@hadoop102 hadoop]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
如果立即檢視,hadoop105處於Decommissioning(退役中)狀態,把hadoop105的副本複製給其他節點。
如下圖,把副本給了hadoop103
等待退役節點狀態為 decommissioned(所有塊已經複製完成),停止該節點及節點資源
管理器。 注意:如果副本數是 3,當前服役的節點小於等於 3,是不能退役成功的,需要修改
副本數後才能退役
終止程式
stop hadoop105 datanode/nodemanager
[ranan@hadoop105 hadoop]$ hdfs --daemon stop datanode
[ranan@hadoop105 hadoop]$ yarn --daemon stop nodemanager
退役時可能其他伺服器資料猛增所以一般都需要叢集資料在平衡
[ranan@hadoop102 hadoop]$sbin/start-balancer.sh -threshold 10