至HDFS上传文件。假定从datanode开始上传文件,上传的数据将导致目前的当务之急是全datanode圆盘。这是一个分布式程序的执行是非常不利。
解决方案:
1、从其他非datanode节点上传
可以hadoop文件夹复制一份到一个不在集群中的节点(直接从非datanode的namenode上传也能够,可是这样不太好。会添加namenode的负担。而且时间长了会让namenode上放了各种乱七八糟的文件),在这个节点上不启动不论什么hadoop进程,可是能够当作client使用。
上传文件到集群。
也能够自己写一个上传文件的程序、在其它非集群节点上执行来上传文件。在程序中要注意自己设置必要的配置,比方namenode的url、副本数等等,由于假设不设置,会使用你程序中所带的hadoop jar包中的默认配置,而不是集群的默认配置。
2、使用balancer
能够通过
hdfs balancer -threshold XX
来进行平衡,xx是一个百分比。
关于这个命令的使用方法网上一搜一大堆。
可是默认情况下,这个平衡时非常慢的,由于默认的hadoop不同意balancer占用非常大的网络带宽。
能够通过
hdfs dfsadmin -setBalanacerBandwidth newbandwidth
设置带宽,在字节