生产中可能某台机器磁盘空间不够了我们新加了磁盘。
如上图所示,机器挂载了四块磁盘,但是hdfs默认的存储路径dfs.datanode.data.dir只会指向一个目录,我们需要加以调整。
做以上修改即可。
1)不同机器间数据均衡
start-balancer.sh -threshold 10
该参数的意思是让每台机器的磁盘空间利用率不超过10%(尽量不要让namenode节点执行该命令)
2)同一机器不同磁盘数据均衡
1、生成均衡计划
hdfs diskbalancer -plan 机器名
2、执行均衡计划
hdfs diskbalancer -execute 机器名.plan.json
3、查看任务执行情况
hdfs diskbalancer -query 机器名
4、取消均衡任务
hdfs diskbalancer -cancer 机器名.plan.json
HDFS的读写性能一般受磁盘和网络的影响,以上图为例,假设有三台机器,我们将虚拟网络设置为100Mbps。 100/8=12.5,所以正常情况不考虑其他因素,网络的上传下载速度能够达到12.5M/S。
1)写性能。
可以利用Hadoop/share目录下的自带脚本
hadoop-mapreduce-client-job-client-版本号-test.jar TestDSFIO -write -nrFiles 10 -fileSize 128MB
这里测试的是10个文件,一般可以设置为cpu核数-1,测试结果如下
因为我们做实验是有三台虚拟机,我们在其中一台机器上跑的脚本,发送了10个测试文件,每个文件3个副本又因为本地的那份副本不需要进行网络传输,走的直接是磁盘IO。所以实际网络写入量应该是20份。201.61大概为32M/s,因为每台虚拟机我们配置的网络是100m也就是12.5m/s,所以312.5大致也是30多。所以我们的网络资源得到了不错的应用。如果测试发现压测的写入速度远小于理论速度,有种可能是磁盘写入速度成为了瓶颈,我们的网络资源存在浪费,此时可以考虑增加固态硬盘等策略。
2)读性能。
读性能也可以使用上述那个脚本 参数改为-read即可。此时要注意应该选则三台之外的另一台机器作为脚本运行端。因为根据短路规则,他会直接读取本地的副本,避免走网络传输,此时测的速度就是磁盘的IO速度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)