「喵咪大數據」Hadoop節點添加下線和磁盤擴容操作

「喵咪大數據」Hadoop節點添加下線和磁盤擴容操作

Hadoop絕非一個簡單程序,集群模式下更是如此,所有的數據都存儲在Hadoop中如果操作不當會存在丟失數據的風險,那麼怎麼在安全的情況,擴容下線維護或者磁盤滿了怎麼增加空間,就是今天的主要內容了.

附上:

Hadoop的官網:hadoop.apache.org喵了個咪的博客:w-blog.cn

1.增加節點

當磁盤滿了或節點不夠處理速度慢了都需要對節點或者通過增加節點的方式進行磁盤擴容,這個時候就需要用到Hadoop擴容機制了

通過如下命令可以查看各節點情況磁盤容量等

<code>> hadoop dfsadmin -report/<code>

筆者現在有兩個節點兩還剩下大約 33GB的容量,我們先向HDFS中寫入一些數據(筆者這裡寫入了9.1GB的數據)

<code>> hdfs dfs -mkdir input
> hdfs dfs -put /app/install/* input/<code>

可以看到已經寫入了很多大文件這個時候查詢集群狀態會發現兩個節點從原本的33GB剩餘已經縮減到了23GB,因為現在我們只有兩個節點選擇的備份數量也是2個所以每份文件都會在兩個節點中進行存儲

首先先進行節點擴容我們的hadoop-1現在只是作為了NameNode現在要把hadoop-1加入DataNode中然後把現在有的數據進行平均負載讓hadoop-1也承擔一部分文件存儲工作

在master節點上修改slaves增加hadoop-1

<code>> vim /usr/local/hadoop-2.7.3/etc/hadoop/slaves
hadoop-1/<code>

在需要增加到集群的節點中指向如下命令

<code>> hadoop-daemon.sh start datanode #啟動datanode
> yarn-daemons.sh start nodemanager #啟動yarn/<code>

在master節點上執行

<code>hadoop dfsadmin -refreshNodes #刷新識別新增加的節點
yarn rmadmin -refreshNodes #刷新yarn識別新節點/<code>

這個時候在通過 hadoop dfsadmin -report 查看集群狀況就可以看到增加了一個節點,但是這個節點暫時沒有存儲任何的文件需要指向如下命令將文件進行負載均衡

如果不balance,那麼cluster會把新的數據都存放在新的node上,但是這樣會降低mapred的工作效率設置平衡閾值,默認是10%,值越低各節點越平衡,但消耗時間也更長

<code>start-balancer.sh -threshold 5/<code>

如果拷貝時間非常慢可以通過修改hdfs-site.xml設置balance的帶寬,默認只有1M/s

<code>> vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<property>
  <name>dfs.balance.bandwidthPerSec/<name>
  <value>10485760/<value>
  <description>
    Specifies the maximum amount of bandwidth that each datanode
    can utilize for the balancing purpose in term of
    the number of bytes per second.
  /<description>
/<property>/<code>


2.下線節點

當我們不需要節點或者是需要對節點進維護(比如增加磁盤等操作需要重啟)希望能夠平滑下線Hadoop提供對應的方式

在NameNode節點中添加(或修改)如下配置項到hdfs-site.xml

<code>> vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.hosts.exclude/<name>
<value>/usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude/<value>
/<property> /<code>

編輯dfshosts.exclude 增加需要下線的節點名稱

<code>> vim /usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude
hadoop-2/<code>

在執行下線命令

<code>hdfs dfsadmin -refreshNodes/<code>

在通過查看節點就會發現有一個 Decommissioning datanodes 此時任何數據都不會寫入到下線的datanode中(下線的節點中有數據的話hadoop複製該datanode block至其他datanode需要一定的下線時間)此時下線的是hadoop-2 , hadoop-2中的塊將會被遷移到 hadoop-1中,前已完成之後Decommissioning datanodes將會消失然後就可以關閉hadoop-2中的服務了,如果需要在加入到集群中只需要去除dfshosts.exclude在重新刷新

下線nodemanager也是一樣修改l增加如下配置

<code>> vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml
<property>
<name>mapred.hosts.exclude/<name>
<value>/usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude/<value>
/<property>/<code>

執行下線命令

<code>yarn rmadmin -refreshNodes/<code>

在已經下線的節點就可以正常的關閉 datanode進程

<code>hadoop-daemon.sh stop datanode /<code>

通過 hadoop dfsadmin -report 查看會發現hadoop-2的狀態是 Decommissioned 退役狀況 這個時候文件不會再寫入到hadoop2節點中

3.磁盤擴容

當整個集群存入的數據量慢慢增加磁盤總會不夠,此時此刻就需要增加磁盤來解決此類問題

現在我們有3個節點可以查看到如下信息

<code>> hdfs dfsadmin -report
Configured Capacity: 126421499904 (117.74 GB)
Present Capacity: 107068563456 (99.72 GB)
DFS Remaining: 81215922176 (75.64 GB)
DFS Used: 25852641280 (24.08 GB)
DFS Used%: 24.15%/<code>

此時我們給節點2進行磁盤擴容,這裡使用的阿里雲服務器增加了一塊100GB的磁盤掛載到了hadoop-2服務器上https://help.aliyun.com/document_detail/25426.html?spm=5176.doc25446.2.3.zEnJqi

<code>> df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 41152832 13745964 25293384 36% /
/dev/vdb1 103080224 61176 97776220 1% /mnt/<code>

多出了一個 /mut 賦予權限

<code>> sudo chown -R hadoop:hadoop /mnt/<code>

首先現需要下線hadoop-2節點,下線之後在hadoop-2

<code>> su hadoop
> hadoop-daemon.sh stop datanode/<code>

修改hadoop-2配置文件vim hdfs-site.xml

<code>> vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.datanode.data.dir/<name>
<value>file:/usr/local/hadoop-2.7.3/tmp/dfs/data,file:/mnt/dfs/data/<value>
/<property>/<code>

然後在啟動datanode

<code>> hadoop-daemon.sh start datanode/<code>

在hadoop-1通過NameNode中查看集群狀態

<code>> hadoop dfsadmin -report
Name: 192.168.1.102:50010 (sunmi-hadoop-2)
Hostname: sunmi-hadoop-2
Decommission Status : Decommissioned
Configured Capacity: 147694649344 (137.55 GB)
DFS Used: 9414242304 (8.77 GB)
Non DFS Used: 12258566144 (11.42 GB)
DFS Remaining: 126021840896 (117.37 GB)
DFS Used%: 6.37%
DFS Remaining%: 85.33%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Jul 20 11:30:42 CST 2017/<code>

hadoop-2的容量就增加了然後重新讓節點上線

<code>vim /usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude
# 清除
hadoop-2
# 更新節點
> hdfs dfsadmin -refreshNodes
> yarn rmadmin -refreshNodes/<code>

然後在查看集群狀況就增加了100GB的DFS的空間

<code>> hadoop dfsadmin -report
Configured Capacity: 231975649280 (216.04 GB)
Present Capacity: 207191623885 (192.96 GB)
DFS Remaining: 176628416512 (164.50 GB)
DFS Used: 30563207373 (28.46 GB)
DFS Used%: 14.75%/<code>


4 總結

關於Hadoop相關的配置到這篇就已經結束了,關於Hadoop如果希望深入瞭解可以讀閱 這本書,在本次事件中Hadoop主要起到的作用是對原數據的存儲以及提供的任務處理調度能力,最後多謝大家的關注我們下節再見.

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!


分享到:


相關文章: