集群新加节点的目的 一是为了应付源源不断的日志存储,而是加快计算的能力,但是如果hdfs上的数据存储没有原则 ,那 总有一天扩容是要崩盘的,无法面对源源不断的扩容需求,另外 hadoop rebalance 也是有瓶颈的,有的就是本身的硬件性能影响,你看到有人说 可以做到几秒 移动 几个TB 的数据块,你有咩有问过人家的网络带宽是多少?
比如说阿里云 内网带宽就是130MB/S,HDFS 数据节点的数据块rebalance 其实就是通过内网的网络通信 来传输 移动 数据的,你如果hadoop使用的是外网连接的,那就更扯了,除非 外网比内网有更快的传输速度。
我们的hadoop 部署在阿里云上,阿里云上的虚拟化后的网卡性能 基本就是百兆网卡而已,而且不能调节大小,你撑死传输速率打满网卡,也就130MB/s,我们自己rebalance时 的测试 20小时 传输了大概9T左右的数据,平均下来,单台新增节点 接受 数据传输的能力是 106MB/S,这个速度 其实也是已经相当可以了,比35mb/s要好很多。但是老大还是嫌弃 ,太慢,是呀,能有什么办法,谁让这个网卡的硬件性能的局限,当然rebalance有几个参数 ,比如 多线程 申请更大的网络带宽,其实都是治标不治本,你申请1GB/s 的带宽,根本就是扯淡 无法实现 痴人说梦 只能是自说自话,有种你自己飞过来呀 !
所以这个rebalance 就给我们很多思考,1.时机 2.硬件 3 业务 4 数据
1.耗时长 所以安排在一定 在业务清闲 的周五开始 或者周末,hdfs 磁盘占用在80%左右就应该扩容 rebalance
2.硬件 ,你必须考虑到网卡 带宽 硬盘读写速度,这个不是自己摘块 硬盘安装到 另一台机器上,不是可插拔的
3.业务上,rebalance 影响都 mapReduce job,基本上是不可以进行的,也会影响到数据流的写入
4.数据 rebalance时, 集群按道理应该进入安全模式,禁止外界对 数据的操作,万一数据丢失重复 找不到 都是有可能的,我们对历史日志文件 归档 压缩 清洗加删除 ,才能保证集群的万古长青
参考一些 文献 ,发现大家 对 hdfs的 rebalance 还是 颇有怨言的,谁让你穷 ,买不起万兆网卡 ,买不 起 MLC SSD 企业硬盘
https://www.quora.com/What-are-the-best-practices-for-running-Hadoop-Balancer-in-a-cluster
http://www.informit.com/articles/article.aspx?p=2755708&seqNum=5
http://people.apache.org/~liuml07/2017/05/31/My-HDFS-balancer-is-slow/
https://community.hortonworks.com/articles/43615/hdfs-balancer-1-100x-performance-improvement.html
https://community.hortonworks.com/questions/27364/when-should-i-stop-the-balancer.html