自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hadoop集群datanode磁盤不均衡的解決方案

云計(jì)算 Hadoop
Hadoop的HDFS集群非常容易出現(xiàn)機(jī)器與機(jī)器之間磁盤利用率不平衡的情況,當(dāng)hdfs出現(xiàn)不平衡狀況的時(shí)候,將引發(fā)很多問題。

[[171718]]

一、引言:

Hadoop的HDFS集群非常容易出現(xiàn)機(jī)器與機(jī)器之間磁盤利用率不平衡的情況,比如集群中添加新的數(shù)據(jù)節(jié)點(diǎn),節(jié)點(diǎn)與節(jié)點(diǎn)之間磁盤大小不一樣等等。當(dāng)hdfs出現(xiàn)不平衡狀況的時(shí)候,將引發(fā)很多問題,比如MR程序無法很好地利用本地計(jì)算的優(yōu)勢(shì),機(jī)器之間無法達(dá)到更好的網(wǎng)絡(luò)帶寬使用率,機(jī)器磁盤無法利用等等。

二、問題:

因業(yè)務(wù)需要搭建一個(gè)新hadoop集群,并將老的hadoop集群中的數(shù)據(jù)遷移至新的hadoop集群,而且datanode節(jié)點(diǎn)不能全部上線,其中還可能會(huì)出現(xiàn)節(jié)點(diǎn)上線或下線的情況,這個(gè)時(shí)候就很容易出現(xiàn)機(jī)器與機(jī)器之間磁盤的均衡的情況,具體如下:

 

 上圖中可以看出max是94.18%,而min是0.37%,其中有600多臺(tái)是達(dá)到94%的,這個(gè)時(shí)候在跑mapred的時(shí)候往往會(huì)報(bào)錯(cuò)誤:

 

 登陸到該機(jī)器上查看服務(wù)器的磁盤,磁盤都快已經(jīng)達(dá)到100%,如下:

 因?yàn)槲覀冊(cè)趆dfs-site.xml中設(shè)置了dfs.datanode.du.reserved的值,所以磁盤會(huì)有一定預(yù)留空間:

  1. <property>  
  2.     <name>dfs.datanode.du.reserved</name>  
  3.     <value>107374182400</value>  
  4. </property>  

上面這個(gè)參數(shù)的意思:

Reserved space in bytes per volume. Always leave this much space free for non dfs use.

再查看datanode日志,希望能找到可靠的線索:

 

這種錯(cuò)誤無法通過namenode來避免,因?yàn)樗粫?huì)再failed的時(shí)候去嘗試往別的節(jié)點(diǎn)寫數(shù), 最初的辦法是將該節(jié)點(diǎn)的datanode關(guān)閉掉,就能順利地跑完這個(gè)mapreduce。

再者查看namenode的頁面,看到有好多datanode的節(jié)點(diǎn)的Remaining快要趨于0B了,這個(gè)時(shí)候就很容易出現(xiàn)上面的報(bào)錯(cuò)。

 為了防止上面的報(bào)錯(cuò)再次出現(xiàn)以及避免hdfs數(shù)據(jù)不均衡,對(duì)hadoop集群做balance已經(jīng)不可避免了!

二、解決方案

1、balancer

大家首先會(huì)想到hadoop自帶的balancer,那就先介紹一下balancer!

Balancer.java中是這么描述balancer的:

The balancer is a tool that balances disk space usage on an HDFS cluster when some datanodes become full or when new empty nodes join the cluster.

The tool is deployed as an application program that can be run by the cluster administrator on a live HDFS cluster while applications adding and deleting files.

下面的圖片是官網(wǎng)中balancer命令得詳解:

 考慮到balancer是最近需要經(jīng)常做的操作,所以我們自己開發(fā)了一個(gè)查看balancer情況的頁面,結(jié)果如下:

 上圖可以看到每個(gè)集群下balancer執(zhí)行情況。

balance一天能成功移動(dòng)的數(shù)據(jù)量大約在10-20T,這個(gè)數(shù)據(jù)量很難滿足超大集群。

目前我們調(diào)用balance會(huì)使用如下命令:

  1. start-balancer.sh -threshold 20 -policy blockpool -include -f /tmp/ip.txt 

上面的命令通過手工篩選出磁盤高的和磁盤低的放在ip.txt文件中,這樣balance就只通過這文件里的了,另外還需要設(shè)置適當(dāng)?shù)膖hreshold值,因?yàn)槭嵌鄋amespace的,所以需要選擇blockpool模式。

另外帶寬也是限制balance的一個(gè)因素,在hdfs-site.xml中是有設(shè)置的:

  1. <property>  
  2.     <name>dfs.datanode.balance.bandwidthPerSec</name>   
  3.     <value>10485760</value>   
  4. </property>  

但是這個(gè)需要重啟,hadoop提供了一個(gè)動(dòng)態(tài)調(diào)整的命令:

  1. hdfs dfsadmin -fs hdfs://ns1:8020 -setBalancerBandwidth 104857600 
  2. hdfs dfsadmin -fs hdfs://ns2:8020 -setBalancerBandwidth 104857600 

2、上下節(jié)點(diǎn):

其實(shí)將高磁盤的節(jié)點(diǎn)強(qiáng)制Decommission是最快最有效的方案。

下節(jié)點(diǎn)的時(shí)候可能會(huì)出現(xiàn)有ns不能正常下掉的情況,其實(shí)這個(gè)時(shí)候節(jié)點(diǎn)的數(shù)據(jù)大部分已經(jīng)移出去了,可能有一些塊卡在那邊沒有移出去。

這個(gè)時(shí)候只能一個(gè)一個(gè)節(jié)點(diǎn)將已經(jīng)Decommissioned節(jié)點(diǎn)stop掉datanode進(jìn)程,如果在namenode的頁面上看到有丟失塊的話,就需要將這個(gè)塊先get到本地,在put上去。例如:

  1. hdfs dfs -get hdfs://ns1/test1/dt=2016-07-24/000816_0.lzo 
  2.   
  3. hdfs dfs -put -f 000816_0.lzo hdfs://ns1/test1/dt=2016-07-24/000816_0.lzo 
  4.   
  5. hdfs dfs -chown test1:test1 hdfs://ns1/test1/dt=2016-07-24/000816_0.lzo 

前提條件需要將這個(gè)節(jié)點(diǎn)的datanode重新啟動(dòng)。

3、升降數(shù)據(jù)副本:

升降副本是一個(gè)迫不得已的辦法,這樣如果datanode有掛掉節(jié)點(diǎn),就會(huì)增加丟失塊的幾率。

具體降副本的命令如下:

  1. hdfs dfs -setrep -R -w 2 hdfs://ns1/tmp/test.db 

升副本的命令如下:

  1. hdfs dfs -setrep -R -w 3 hdfs://ns1/tmp/test.db 

上面的命令是將ns1下的/tmp/test.db副本數(shù)降至2個(gè),然后又將它升至3個(gè)副本。具體的hdfs dfs -setrep命令如下圖:

這樣動(dòng)態(tài)的升降副本可以解決。

另外在升降副本的遇到一個(gè)BUG:

 推測(cè)可能是namenode的replications模塊有夯住情況,所以出現(xiàn)該情況執(zhí)行kill掉進(jìn)行,跳過該塊再跑!

總結(jié):之所以選擇使用升降副本是因?yàn)樗皇軒挼目刂?,另外在升降副本的時(shí)候hadoop是需要重新寫數(shù)的,這個(gè)時(shí)候它會(huì)優(yōu)先往磁盤低寫數(shù)據(jù),這樣就能將磁盤高的數(shù)據(jù)遷移至磁盤低的。

4、distcp

DistCp (distributed copy) is a tool used for large inter/intra-cluster copying. It uses MapReduce to effect its distribution, error handling and recovery, and reporting. It expands a list of files and directories into input to map tasks, each of which will copy a partition of the files specified in the source list. Its MapReduce pedigree has endowed it with some quirks in both its semantics and execution. The purpose of this document is to offer guidance for common tasks and to elucidate its model.

在這里舉一個(gè)例子:

 

通過distcp將/tmp/output12上的數(shù)據(jù)調(diào)用mapreduce遷移至/tmp/zhulh目錄下,原先/tmp/output12上的數(shù)據(jù)還是有存在的,但是它的塊就發(fā)生了變化。

這個(gè)時(shí)候有人可能會(huì)說怎么不使用cp命令呢?

兩者的區(qū)別如下:

CP的模式是不走mapreduce的;DISTCP的模式是走mapreduce的,所以它優(yōu)先寫有nodemanager的機(jī)器;

CP是單線程的,類似scp的模式,在執(zhí)行速度上比DISTCP要慢很多。

5、提高dfs.datanode.du.reserved值

官網(wǎng)是這么說的:Reserved space in bytes per volume. Always leave this much space free for non dfs use.

在上面的提到dfs.datanode.du.reserved的值是設(shè)成100G,因?yàn)閚amenode認(rèn)為該節(jié)點(diǎn)還有剩余的空間,所以給分配到這里,假如這個(gè)塊是128K,但是實(shí)際剩余空間只有100K,所以就會(huì)報(bào)上面的錯(cuò)誤,假如把dfs.datanode.du.reserved成300G,讓namenode知道該節(jié)點(diǎn)已經(jīng)沒有剩余空間,所以就不會(huì)往這里寫數(shù)據(jù)了。

6、關(guān)閉nodemanger進(jìn)程

在現(xiàn)有計(jì)算資源多余的情況下,可以考慮關(guān)閉高磁盤節(jié)點(diǎn)的nodemanager,避免在該節(jié)點(diǎn)起YarnChild,因?yàn)槿绻谠摴?jié)點(diǎn)上進(jìn)行計(jì)算的話,數(shù)據(jù)存儲(chǔ)首先會(huì)往本地寫一份,這樣更加加重了本地節(jié)點(diǎn)的負(fù)擔(dān)。

7、刪除舊數(shù)據(jù)

該方案是在迫不得已的情況下進(jìn)行的,因?yàn)閯h掉的數(shù)據(jù)可能以后還得補(bǔ)回來,這樣的話又是得要浪費(fèi)一定的時(shí)間。

另外在刪除數(shù)據(jù)時(shí)候就得需要跳過回收站才能算是真正刪除,可以使用的命令如下:

三、方案選擇

考慮到有多達(dá)600臺(tái)機(jī)器磁盤使用率達(dá)到94%,而且這部分高的機(jī)器是在同一個(gè)機(jī)房的,所以不能采用上下節(jié)點(diǎn)的方法,***的辦法如下:

1、提高dfs.datanode.du.reserved的值;

2、關(guān)閉nodemanager進(jìn)程;

3、升降副本;

4、啟動(dòng)hadoop自帶的balance;

人工的定期觀察,當(dāng)達(dá)到期望的效果的時(shí)候就是恢復(fù)成原樣;在提高dfs.datanode.du.reserved的值就得需要考慮到datanode需要進(jìn)行輪詢的重啟,這個(gè)時(shí)候就考慮到時(shí)間間隔,如果時(shí)間過短就可能就丟,如果過長就是費(fèi)的時(shí)間比較多。

這種方法好比:比如在節(jié)假日的時(shí)候,某個(gè)收費(fèi)口的車輛特別多,那個(gè)時(shí)候執(zhí)法人員就會(huì)封閉這個(gè)收費(fèi)站的出口,等車輛過的差不多的時(shí)候再給開放。這次的方案有這個(gè)有點(diǎn)類似,當(dāng)主機(jī)的dfs.datanode.du.reserved值高于目前磁盤使用的情況,namenode就不會(huì)分配數(shù)據(jù)過來了,通過升降副本和balance能快速的將本機(jī)的數(shù)據(jù)轉(zhuǎn)移走。

四、結(jié)束語

本篇文章主要介紹了對(duì)hadoop數(shù)據(jù)出現(xiàn)不均衡情況下可以使用的方法,及我們情況下使用的方案!

責(zé)任編輯:趙寧寧 來源: 數(shù)據(jù)雜貨鋪
相關(guān)推薦

2012-07-24 13:36:56

負(fù)載均衡WebSphere深信服

2012-08-03 11:21:50

應(yīng)用交付深信服

2010-05-07 12:36:57

DHCP負(fù)載均衡

2010-04-21 10:30:12

負(fù)載均衡

2010-04-20 21:12:34

負(fù)載均衡解決方案

2010-05-06 15:49:50

Web2.0負(fù)載均衡

2010-05-10 16:15:34

2011-10-21 15:59:51

深信服負(fù)載均衡

2012-08-08 15:34:18

負(fù)載均衡深信服

2013-05-14 15:47:27

MySQL監(jiān)控錯(cuò)誤日志

2010-03-23 16:43:39

負(fù)載均衡互聯(lián)網(wǎng)鏈路深信服科技

2023-11-29 08:35:28

群多租戶ES運(yùn)維

2021-02-18 09:28:32

Kubernetes開源SaaS

2013-09-24 14:23:37

華為eLTE方案華為eLTE華為

2010-12-23 11:01:19

集群FTPFTP代理

2014-01-07 13:54:02

HadoopYARN

2009-12-25 14:40:38

Windows 7圖標(biāo)丟失

2011-12-31 16:36:07

深信服負(fù)載均衡

2013-11-29 12:44:04

HadoopHadoop高可用京東Hadoop

2013-12-13 10:24:34

開源SQLHadoop
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)