天天看點

[喵咪大資料]Hadoop節點添加下線和磁盤擴容操作

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

附上:

Hadoop的官網:

hadoop.apache.org 喵了個咪的部落格: w-blog.cn

1.增加節點

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

通過如下指令可以檢視各節點情況磁盤容量等

> hadoop dfsadmin -report           

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

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

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

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

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

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

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

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

在master節點上執行

hadoop dfsadmin -refreshNodes #重新整理識别新增加的節點
yarn rmadmin -refreshNodes    #重新整理yarn識别新節點           

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

如果不balance,那麼cluster會把新的資料都存放在新的node上,但是這樣會降低mapred的工作效率

設定平衡門檻值,預設是10%,值越低各節點越平衡,但消耗時間也更長

start-balancer.sh -threshold 5           

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

> 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>           

2.下線節點

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

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

> 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>             

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

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

在執行下線指令

hdfs dfsadmin -refreshNodes           

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

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

> 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>           

執行下線指令

yarn rmadmin -refreshNodes           

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

hadoop-daemon.sh stop datanode            

通過 hadoop dfsadmin -report 檢視會發現hadoop-2的狀态是 Decommissioned 退役狀況 這個時候檔案不會再寫入到hadoop2節點中

3.磁盤擴容

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

現在我們有3個節點可以檢視到如下資訊

> 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%           

此時我們給節點2進行磁盤擴容,這裡使用的阿裡雲伺服器增加了一塊100GB的磁盤挂載到了hadoop-2伺服器上

步驟 4:Linux 格式化和挂載資料盤_快速入門_雲伺服器 ECS-阿裡雲
> df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/vda1       41152832 13745964  25293384  36% /
/dev/vdb1      103080224    61176  97776220   1% /mnt           

多出了一個 /mut 賦予權限

> sudo chown -R hadoop:hadoop /mnt           

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

> su hadoop
> hadoop-daemon.sh stop datanode           

修改hadoop-2配置檔案vim hdfs-site.xml

> 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>           

然後在啟動datanode

> hadoop-daemon.sh start datanode           

在hadoop-1通過NameNode中檢視叢集狀态

> 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           

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

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

然後在檢視叢集狀況就增加了100GB的DFS的空間

> 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%           

4 總結

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

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

繼續閱讀