问题描述1:
当前hadoop集群承载多个Hbase,且大部分数据为2副本,目前更换硬盘需要重启主机,故需要重启datanode进程,如果一次重启多台主机,担心会有丢数据风险,需要最优化的实施方案。
建议:实际上不管有几份副本,都建议一台台的主机重启。因为如果一次重启多台主机的话,确实可能会造成某些block读不到,影响应用。
问题描述2:
但是从Hbase的角度上来说,我们一般都是采取以库为单位,更换硬盘的方式。比如A库有三台故障硬盘主机,我们会向业务申请停库时间窗口,集体更换该库的所有故障硬盘。如果以一次一台的速率重启主机,会造成多次停库操作,我们也不便向业务侧多次申请停库操作。 所以,能否在2副本的情况下,完成上述操作?
按照建议所说的,需要一台一台主机的做。以下是相关的步骤。
1. 先进入Active NameNod Web UI,通过Cloudera Manager --> HDFS --> Web UI -->选中Active NameNode,就会看到一个Summary的窗口。
https://nightly57-2.gce.cloudera.com:20102/dfshealth.html#tab-overview
2. 在这个窗口中部,"Number of Under-Replicated Blocks"应该是0.
3. 更换硬盘,等待它上面的DataNode的服务角色启动成功。这个时候,在上面的窗口中的"Number of Under-Replicated Blocks"应该是大于0,如果不断地刷新的话,会看到这个数字在变小,直到再回归成0。这个时候就意味着所有的block都同步了。
4.可以通过以上步骤算出一台主机大概需要多长时间完成复制。 另外,在更换硬盘前,最好执行"hdfs fsck /"命令来查看是否所有的block都在正常状态,没有missing。