0%

使用Cloudera Manager在线为集群减容

使用 Cloudera Manager 在线为集群减容


前言

公司节约成本,需要对 CDH 集群进行减容

减容自然针对非核心服务所在的节点进行下线操作,记录一下下线操作

操作

经过调研使用 Cloudera Manager 在线减容集群。具体过程可以参见 Fayson 的文章—如何使用Cloudera Manager在线为集群减容

这里选择的是 节点正常下线 方法,在正常下线时勾选了“解除授权角色”和“跳过管理角色”功能,则在进行节点下线的时候会将该节点的数据复制到集群的其它节点上,在数据全部复制成功后才会将该节点从集群中删除。这样就不会发生数据丢失的情况

最后的最后把 Host 移除 CM 之后,要登录到移除的机器上,停止 cloudera-scm-agent, 不然又监听到 agent 心跳又将其加入回 CM

扩展

当然,针对 Apache 版的 Hadoop 集群也有相应操作。

HDFS 部分DataNode节点涉及到裁撤,需要对其进行下线处理,过程相对较麻烦,需要保证要下架的机器中的数据拷贝到集群其他节点中,不能够直接关闭节点来达到下线的目标。

先确认NameNode的hdfs-site.xml文件有无下方配置,没有的话,可能要添加之后重启,重启操作可以利用 NameNode HA 来规避风险

1
2
3
4
<property>
<name>dfs.hosts.exclude</name>
<value>/etc/hadoop/conf/dfs.exclude</value>
</property>

将要下线的机器加入到dfs.hosts.exclude指定的文件中(使用主机名,ip基本不靠谱),如要下架的机器hostname为:foo、bar两台,一个hostname占一行,那么该文件中的内容则为

1
2
foo
bar

执行命令来让 NameNode 读取配置文件

1
hdfs dfsadmin -refreshNodes

执行命令或者在Web UI页面上查看要下架机器的状态

1
hadoop dfsadmin -report

Decommission Status : Decommission in progress 表示正在向集群内其他节点拷贝数据

拷贝完成后,状态变为Decommissioned时,说明要下降机器中的数据已经拷贝到其他机器中。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。

停止 DataNode

1
$HADOOP_HOME/sbin/hadoop-daemon.sh stop datanode

清空 dfs.exclude 文件,再次执行让NameNode重启读取配置文件

1
hdfs dfsadmin -refreshNodes

最后需要再清除 slaves 文件,防止下次整个集群重启时,该节点不能通过 NameNode 自动启动

注意:当下线一个datanode节点,有可能该节点长时间处于Decommission In Progress状态,一直不能转变为Decommissioned。请用hadoop fsck /检查下是否有些块少于指定的块数,特别注意那些mapreduce的临时文件。将这些删除,并且从垃圾箱移除,该节点就可以顺利下线。

有时候可以使用这种方式进行数据的转移,在节点的磁盘被使用殆尽的状况下,平衡进程太慢,节点退役反而很快,退役后格式化磁盘,而后加回来,加快了数据的平衡处理。


参考链接: