生產調優4 HDFS-叢集擴容及縮容(含伺服器間資料均衡)

rananie發表於2021-12-07

HDFS-叢集擴容及縮容

新增白名單

白名單:在白名單的主機IP地址可以訪問叢集,對叢集進行資料的儲存。不在白名單的主機可以訪問叢集,但是不會在主機上儲存資料
企業中:配置白名單,可以儘量防止黑客惡意訪問攻擊。

image

配置白名單的步驟

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

4.在 web 瀏覽器上檢視 DataNode

image

沒有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 /

客戶端還可以訪問叢集
image

但是資料不會在hadoop104上儲存
image

二次配置白名單

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

34.在 web 瀏覽器上檢視 DataNode

image

3.刪除之前上傳的,重新進行提交

[ranan@hadoop104 bin]$ hadoop fs -put myhadoop.sh /

image

增加新伺服器

需求

隨著公司業務的增長,資料量越來越大,原有的資料節點的容量已經不能滿足儲存資料
的需求,需要在原有叢集基礎上動態新增新的資料節點

動態新增:不重啟已有叢集

環境準備

在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

image

之前已經配置過了主機名及地址對映,所以就不用在所有節點/etc/host的檔案中新增新節點。這裡直接使用hadoop105進行連線

image

將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

檢視

image

因為我們配置了白名單,所以沒有立即生效,那把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

新增成功

image

在hadoop105上測試是否能上傳成功

[ranan@hadoop105 hadoop-3.1.3]$ hadoop fs -put wuguo.txt /

image

問題1 伺服器間資料均衡

那麼就存在一個問題,哪個節點上傳的資料最多,那麼他儲存的資料就多,會導致儲存不均衡的情況
如果資料不均衡(hadoop105 資料少,其他節點資料多),怎麼處理?
解決辦法:服務間資料均衡

問題2 105是怎麼關聯到叢集的

在核心配置檔案core-site.xml 裡 指定NameNode在哪個伺服器上(hadoop102上),作為DataNode自動取報告了

DataNode啟動後告訴NameNode本機的塊資訊(塊是否完好)

伺服器間資料均衡

應用場景

場景1:如果經常在 hadoop102 和 hadoop104 上提交任務,且副本數為 2,由於資料本地性原則,就會導致 hadoop102 和 hadoop104 資料過多, hadoop103 儲存的資料量小。

場景2:新服役的伺服器資料量比較少,需要執行叢集均衡命令

image

伺服器間資料均衡配置

開啟資料均衡命

[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%,可根據實際情況進行調整

我這裡虛擬機器資料量不大,所以執行了該命令沒反應

image

停止資料均衡命令

如果開啟命令執行時間過長,我們也可以停止

[ranan@hadoop102 hadoop-3.1.3]$ sbin/stop-balancer.sh

由於 HDFS 需要啟動單獨的 Rebalance Server 來執行 Rebalance 操作, 所以儘量
不要在 NameNode 上執行 start-balancer.sh,而是找一臺比較空閒的機器

黑名單退役舊節點

黑名單:在黑名單的主機 IP 地址不可以訪問叢集(待測試!),不能用來儲存資料。
企業中:配置黑名單,用來退役伺服器。

image

黑名單配置步驟

編輯/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

image

等待退役節點狀態為 decommissioned(所有塊已經複製完成),停止該節點及節點資源
管理器。 注意:如果副本數是 3,當前服役的節點小於等於 3,是不能退役成功的,需要修改
副本數後才能退役

image

終止程式
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

相關文章