以下是简单的总结:
在分析过程中, 发现主机上运行的 bash 版本不是RHEL7.2操作系统自带的. 默认的 bash 版本应该是version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
而主机上的 bash版本为 4.4.0(1)-rc1 (x86_64-unknown-linux-gnu), 已确认此问题是因为该版本的 bash 与 CM 的脚本不兼容引起的. 测试了使用以下方法可以解决这个问题:
修改主机上的以下 CM 脚本: /opt/cm-5.5.4/lib64/cmf/service/common/cloudera-config.sh 注释掉该脚本的399行, 代之以下命令: HBASE_JAR=`echo $(find $CDH_HBASE_HOME -regextype posix-egrep -regex "$CDH_HBASE_HOME/(hbase|hbase-client|hbase-server|hbase-protocol|hbase-common|hbase-hadoop-compat|hbase-hadoop2-compat|(lib/htrace-core.*)).jar" 2> /dev/null) | sed "s: :,:g"`
== 风险 ==
由于此问题是因为不兼容的 bash 引起的, 因此目前的修复是暂时的. 而且有以下风险,
注意:
1) Cloudera并不支持本版本的 bash, 因此建恢复使用系统自带的 bash
2) CDH和 CM 并没有在本版本的 bash 中测试过, 因此可能会有未知的问题
3) 由于目前的修复是本地修改, 之后升级 CM 后就会丢失, 这会导致此问题再次出现