测试环境有个EMR集群由于业务发展 datanode的内存不够用,需要做节点扩容.
    在EMR Hardware 页面中,找到Core类型的task instance group,将实例数+1.
    可以观察到一个新的节点很快被拉起来,从namenode的web管理页面上也可以看到新节点已经可用. http://namenodeip:50070/dfshealth.html#tab-datanode
    登录到新节点后台,查看/var/log/hadoop-hdfs/下的datanode日志(hadoop-hdfs-datanode-ip-xxx-xxx-xxx-xxx.log),可以看到新节点在不断同步数据.
    25分钟后,节点收到一个shutdown信号,自动退出.然后又拉起一个新节点,不断出现这个循环.
    一开始怀疑是EMR pipeline自身的超时机制导致,节点的数据量太大,导致datanode没能在EMR扩容pipeline超时前完成复制,从而引发节点被删除.但是观察每次节点被删除时,都会在namenode管理页面上发现新的block 丢失,因此,这个新节点实际上应该已经可用,并有数据写入.
    这个环境购买了AWS的白金级的商业支持,提了个工单给AWS,多次跟催后,AWS工程师从s3上的日志中分析,认为daemons/setup-dns.log.gz里显示的结果是

    1. + echo 'Reverse DNS is incorrect.'
    2. Reverse DNS is incorrect.
    3. + return 2
    4. + return 2

    因此认为VPC上配置的DNS是有问题的.
    分析以前启动的正常节点,发现它们同样有这个报错,并不影响结果.尝试手工加hosts文件,也无济于事.
    PS:这个日志的S3路径可以在EMR集群的Summary页面的Log URL中看到.
    顺着这个思路,以应用失败为入口去排查. 这个集群之前创建的时候,是勾选了Hbase的,但是由于某次集群故障,把Hbase废弃,并迁移到其他集群,因此一直没有用到Hbase功能,但是由于配置时有这个组件,EMR扩容时应该会检查这个功能,所以需要排查下Hbase问题.
    检查Hbase Hmaster的http页面,发现该节点处于初始化状态,检查datanode节点,发现没有结果.考虑到Hbase集群已经废弃,因此干脆把Hbase做个重置.
    停止Hbase master和slave各个节点上的各个Hbase服务.登录到zkCli, rmr /hbase,同时删除HDFS上的对应数据, hdfs dfs -rm -r /user/hbase
    重启服务, 发现HMaster日志一直在打印等待Region节点. Region上的日志显示

    1. client.ZooKeeperRegistry: ClusterId read in ZooKeeper is null

    检查zk服务是正常的.
    查看zk数据目录发现有个/hbase20000000008这个目录,检查Hmaster和HRegion的配置,发现两边不一样.Hmaster多了

    1. < <property>
    2. < <name>zookeeper.znode.parent</name>
    3. < <value>/hbase20000000008</value>
    4. < </property>

    应该是前面排错时,有人按某些教程改的配置.把这个配置去除,重启各个服务,发现Hbase服务恢复.
    但是新扩节点在25分钟后依然被删除.
    EMR集群默认还会启动yarn集群,检查发现Master节点上yarn manager异常,重启这个服务,通过yarn管理web页面查看到新扩节点已经上线.
    这次扩容的节点就没有再次被自动删除.

    排查过程中还发现 EMR的EC2节点对于节点关机操作会触发terminate, 普通EC2节点关机触发的是stop, 后续有用到时可以做参考.
    扩容过程中,由于节点不断生成销毁,产生太多垃圾数据,因此想停止这个扩容进程,有两个方式可以实现,都在task instance group页面上执行,一个是将实例数改回之前的值,一个是点stop.
    有个老节点处于Decommissioned状态,第一次通过调整实例数方式停止扩容时,节点还是保持正常,但是第二次通过stop方式停止扩容时,这个节点被销毁了,STOP时EMR可能不会考虑节点复制的状态和节点是否完成pipeline,只是随机选择一个alive节点干掉.
    如果不做干预,EMR在尝试一定次数后,会自动进入suspend状态,停止扩容.

    扩容相关的CLI:

    1. https://docs.aws.amazon.com/emr/latest/ManagementGuide/managed-scaling-cli.html
    2. https://docs.aws.amazon.com/cli/latest/reference/emr/
    3. https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceGroups.html