Hadoop集群datanode磁盘不均衡的解决方案_第1页
Hadoop集群datanode磁盘不均衡的解决方案_第2页
Hadoop集群datanode磁盘不均衡的解决方案_第3页
Hadoop集群datanode磁盘不均衡的解决方案_第4页
Hadoop集群datanode磁盘不均衡的解决方案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop集群datanode磁盘不均衡的解决方案Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,当hdfs出现不平衡状况的时候,将引发很多问题。作者:朱林海来源:数据杂货铺12016-09-1914:52收藏分享一、引言:Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点,节点与节点之间磁盘大小不一样等等。当hdfs出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。二、问题:因业务需要搭建一个新hadoop集群,并将老的hadoop集群中的数据迁移至新的hadoop集群,而且datanode节点不能全部上线,其中还可能会出现节点上线或下线的情况,这个时候就很容易出现机器与机器之间磁盘的均衡的情况,具体如下:

上图中可以看出max是94.18%,而min是0.37%,其中有600多台是达到94%的,这个时候在跑mapred的时候往往会报错误:押炉网・村*7#>淖韩少帽箱代晌冲牛B察:用丽叫密袖仆平喋lyWH购1CPF转岫中陌MP]fThrw^-QJ:闩齐坤匚咔1叫将孟悼转仙a|or^_^p-ACh^Judc^-p-hd^-s.i^olpcoLdatat^rrG^tt-Os^jiTfroli3<Jttf-ch^ck16>t^TrsarM;^«^rat(MUt>l4^)命orgjjMch*.h#d«p.hdh.K50调网鸣折植rxrgr崩Kkkflur1p<d^trHmlWiSlUrtlWStr»areiJjva-:i3S4]orgjrpjcihad<M甲.hdk.哭叫咧网崂如我曲r«:d齿hck&^pubglr用网叫金心呐k匹岫削心W?)Howgj^jchfrh^k^hdkO#&Ou?ipi|hSir?am登陆到该机器上查看服务器的磁盘,磁盘都快已经达到100%,如下:C—文件釜统一/dev/5-da5devtmpfstmpfstmpfstinpfs/dev/sdcl/dev/sddl/dev/sdbl/dev/sdel/dev/s-dllC—文件釜统一/dev/5-da5devtmpfstmpfstmpfstinpfs/dev/sdcl/dev/sddl/dev/sdbl/dev/sdel/dev/s-dll/dev/sdql/dev/sdnl/dev/sdfl/dev/sdirtL/dev/sdjl/dev/sdil/dev/sdlcl/dev/sdaZtmpfstmpfstmpfs=:■珏GGGGGTTTTTTTT

=^4333399999999

66666

建211111111MGGG2333

9一―|一―|一―UY:uuIi]#己用8.OG□12K

50M□1.7t1.7T1.7T1.7T1.7T1.7T1.7T1.7T1.7T1.7T1.7T1.7T12SM□□□df-h可用256G63G63G63G63G103g102G97G101G102G102G101G101G102G102G102G103G65M13G13G13G己用黑4%0%1%1%0%95%95%95%95%95%95%95%95%95%95%95%95%^7%0%0%0%l-UdUdLVeiidLlie:£挂载点/dev/dev/shm/run/sys/fs/cgroiip/data9'/datal0/data8/datall/dataG/datal/dataZ/dataO/data//data4/dat/dataS/boot/run/user/600/run/user/601/run/user/a<property><name>dfs.datanode.du.reserved</name><value>107374182400</value></property>上面这个参数的意思:Reservedspaceinbytespervolume.Alwaysleavethismuchspacefreefornondfsuse.再查看datanode日志,希望能找到可靠的线索:这种错误无法通过namenode来避免,因为它不会再failed的时候去尝试往别的节点写数,最初的办法是将该节点的datanode关闭掉,就能顺利地跑完这个mapreduce。再者查看namenode的页面,看到有好多datanode的节点的Remaining快要趋于0B了,这个时候就很容易出现上面的报错。为了防止上面的报错再次出现以及避免hdfs数据不均衡,对hadoop集群做balance已经不可避免了!二、解决方案1、balancer大家首先会想到hadoop自带的balancer,那就先介绍一下balancer!Balancer.java中是这么描述balancer的:ThebalancerisatoolthatbalancesdiskspaceusageonanHDFSclusterwhensomedatanodesbecomefullorwhennewemptynodesjointhecluster.ThetoolisdeployedasanapplicationprogramthatcanberunbytheclusteradministratoronaliveHDFSclusterwhileapplicationsaddinganddeletingfiles.下面的图片是官网中balancer命令得详解:AdriinistratianConiriAndsuHfulhr»*YiniErMfin君■btLncrh-±£±batuvlrs[-1^-lhEa=fr3l±']'*-*1Wl*]£-*i£-l.U-3e:-TLuqX,[-LnE-TulE|-TliearthhIs?%|-:xcoj-=?piraft^dLas?4b-x-x1=?|][^Ld!lri-i14»-3"jnMCidla^&cnPI-ihlIle?七对—■j&CMmJeJ!CLuirkW±MIudi她丁朋场日bdlw^M叫N.”二flu|lMkkUhS£#dM4UhU&ik姐lA*Rh山!kMik*妃■"Oa*.Ari1c;|^<n|i*AEgeMfi硅@由c^Md!|%W*Ww<H-1>*■:Ehrrifaflid.-udwlp-f-:hDit5l>j|£wiE*5tparatMfcrtdSwsb?E«(fc*Oilf!<etSMfr&mb&ngMinjtij赣the-hML^dfc-i■:hwJhWe>|«<c^-,"-as4iGwat*dfetd■-«is><sMvft+9M?d^edd-wwwJeshob*bylh«Wvice*.-lU.”lmHtaHB<^*oti«ns2>-Hudmu^inkimbwH心电―心<"«We由心.Thh顷』硕FE^tdtfJufe耳牛.Kuht■£k.utfbiUiitfj"^日女户AnjdmlrtMfjAwgfi&~1版prtuOrtX!mo*:#tht佐财心^土勺p*w帷k5*sfuij-.iri'6affiMtd*ud-£.KoUihifllh«HMlqm.lIt•fr*i\r^KcliJi'itb«d.ihu-U.考虑到balancer是最近需要经常做的操作,所以我们自己开发了一个查看balancer情况的页面,结果如下:UMinctns^MS!;Q上图可以看到每个集群下balancer执行情况。balance一天能成功移动的数据量大约在10-20T,这个数据量很难满足超大集群。目前我们调用balance会使用如下命令:start-balancer.sh-threshold20-policyblockpool-include-f/tmp/ip.txt上面的命令通过手工筛选出磁盘高的和磁盘低的放在ip.txt文件中,这样balance就只通过这文件里的了,另外还需要设置适当的threshold值,因为是多namespace的,所以需要选择blockpool模式。另外带宽也是限制balance的一个因素,在hdfs-site.xml中是有设置的:<property><name>dfs.datanode.balance.bandwidthPerSec</name><value>10485760</value>4.</property>但是这个需要重启,hadoop提供了一个动态调整的命令:hdfsdfsadmin-fshdfs://ns1:8020-setBalancerBandwidth104857600hdfsdfsadmin-fshdfs://ns2:8020-setBalancerBandwidth1048576002、上下节点:其实将高磁盘的节点强制Decommission是最快最有效的方案。下节点的时候可能会出现有ns不能正常下掉的情况,其实这个时候节点的数据大部分已经移出去了,可能有一些块卡在那边没有移出去。这个时候只能一个一个节点将已经Decommissioned节点stop掉datanode进程,如果在namenode的页面上看到有丢失块的话,就需要将这个块先get到本地,在put上去。例如:hdfsdfs-gethdfs://ns1/test1/dt=2016-07-24/000816_0.lzo2.hdfsdfs-put-f000816_0.lzohdfs://ns1/test1/dt=2016-07-24/000816_0.lzo4.hdfsdfs-chowntest1:test1hdfs://ns1/test1/dt=2016-07-24/000816_0.lzo前提条件需要将这个节点的datanode重新启动。3、升降数据副本:升降副本是一个迫不得己的办法,这样如果datanode有挂掉节点,就会增加丢失块的几率。具体降副本的命令如下:1.hdfsdfs-setrep-R-w2hdfs://ns1/tmp/test.db升副本的命令如下:1.hdfsdfs-setrep-R-w3hdfs://ns1/tmp/test.db上面的命令是将ns1下的/tmp/test.db副本数降至2个,然后又将它升至3个副本。具体的hdfsdfs-setrep命令如下图:setrep^Wfll;心皆fl-|riir-qi|~1][f]iThE>/■心CtianyiHDiisrma汹CkRotdaf^.□wXb由diKtifYth<nEhtcc<F.-mandrranftitfrdiFGm!Mk/cjIMni血荒网cf础flrsurdtrUi字tirrrotmlr«efOTEttfat呵”・■Th.11vrwr.;e5i*ir#chacwmaHrl-H.i1:防ihrrt^.ii蛇nTli悍rmnlidutvuhei™-t御彳[imr.-■碧n嶂EMCEH扃旧卜也山明脚WlHT,KhM时的配4*Lilufrc-|dilri|iJJUM-/l!iJtaiff^i|dLfutg:叩号Clwsjutte*jrd叽5ffrat这样动态的升降副本可以解决。另外在升降副本的遇到一个BUG:推测可能是namenode的replications模块有夯住情况,所以出现该情况执行kill掉进行,跳过该块再跑!总结:之所以选择使用升降副本是因为它不受带宽的控制,另外在升降副本的时候hadoop是需要重新写数的,这个时候它会优先往磁盘低写数据,这样就能将磁盘高的数据迁移至磁盘低的。4、distcpDistCp(distributedcopy)isatoolusedforlargeinter/intra-clustercopying.ItusesMapReducetoeffectitsdistribution,errorhandlingandrecovery,andreporting.Itexpandsalistoffilesanddirectoriesintoinputtomaptasks,eachofwhichwillcopyapartitionofthefilesspecifiedinthesourcelist.ItsMapReducepedigreehasendoweditwithsomequirksinbothitssemanticsandexecution.Thepurposeofthisdocumentistoofferguidanceforcommontasksandtoelucidateitsmodel.在这里举一个例子:In^utsplitbytts=115spiliedEecQrda=OFailed-shuff1es=OMergedrapdutputs=OGCtimeelapseriCm5)=26<PUtimespent(ims)=1160PhysicalmemoryCbyt-es3snapshtJL=3499950-QBVirtualmemory(bytsnapstiot=Z-453123072Totalcflmmltteriheap质想自(byt)=100558438JFileinpurFormatcaunrersByt^SRtitd=S10FileoutputF&rwiatcountersByteswrittfen=Oo「9rapacherhadmapr-edr^opyFapperEYTESCO.P1ED=0ETTESEXPECTED=C■COPY=3橱代dfs-Is7trtpya:hulh/Faunif11tenis匚「*.ya『rtsup•虫g「ciupQi<hg-口9-dtFtuip/定HuiK/ouiputiw通过distcp将/tmp/output12上的数据调用mapreduce迁移至/tmp/zhulh目录下,原先/tmp/output12上的数据还是有存在的,但是它的块就发生了变化。这个时候有人可能会说怎么不使用cp命令呢?两者的区别如下:CP的模式是不走mapreduce的;DISTCP的模式是走mapreduce的,所以它优先写有nodemanager的机器;CP是单线程的,类似scp的模式,在执行速度上比DISTCP要慢很多。5、提高dfs.datanode.du.reserved值官网是这么说的:Reservedspaceinbytespervolume.Alwaysleavethismuchspacefreefornondfsuse.在上面的提到dfs.datanode.du.reserved的值是设成100G,因为namenode认为该节点还有剩余的空间,所以给分配到这里,假如这个块是128K,但是实际剩余空间只有100K,所以就会报上面的错误,假如把dfs.datanode.du.reserved成300G,让namenode知道该节点已经没有剩余空间,所以就不会往这里写数据了。6、关闭nodemanger进程在现有计算资源多余的情况下,可以考虑关闭高磁盘节点的nodemanager,避免在该节点起YarnChild,因为如果在该节点上进行计算的话,数据存储首先会往本地写一份,这样更加加重了本地节点的负担。7、删除旧数据该方案是在迫不得己的情况下进行的,因为删掉的数据可能以后还得补回来,这样的话又是得要浪费一定的时间。另外在删除数据时候就得需要跳过回收站才能算是真正删除,可以使用的命令如下:[hadpSr*]Shadcrapdfs-Is/rmp/zhulli/output12deprecated^;它ofThisscriptto牡工整亡ut它hdfsCdmniriddQp「巨亡3£它此insteaduserhiehdfscofmandForfit.Found2-rw-r-'-r--2yarnsupergroupD2016-09»071>.:5d/tmp/zhuTh/outputl2/.SUCCES5-r-w-r--r—_^^gmucergr-oup02-016-09-071.9;50/tmp/zhulh/oi^tputl2/pairt-OOflOO[h*hado-opdfs-rwr-skipTrash/tmp/zhijilli/ouitputl2DEPRECATE&:Lfaeof-thisscripttqexs-cutehd"Fsconnna-ndisdepre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论