修改cloudera manager的端口号
最近想在测试机装一个hadoop测试集群debug玩玩,然后就用cloudera manager装吧
这回使用rpm安装失败了,在网上搜到Cloudera Manager 5和CDH5离线安装说需要用scm_prepare_database.sh去初始化cm的数据库
然后就索性不用rpm安装,而是直接用tar.gz解压安装
由于公司不对7180端口放开,而且测试机的iptables命令缺少某些模块导致用不了,无法做端口转发,于是我就跟踪cm-5.10.0/etc/init.d/cloudera-scm-server的shell文件,到cm-5.10.0/share/cmf/bin/cmf-server,看到调用启动了java程序com.cloudera.server.cmf.Main
。接着到cm-5.10.0/share/cmf/lib去grep server,找到server-5.10.0.jar
,下载到windows本机,修改cm-5.10.0/share/cmf/bin/cmf-server加上调试参数-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8282"
然后用idea打开远程调试,慢慢走,后来发现还需要下载其他jar包:persist-5.10.0.jar
, db-common-5.10.0.jar
, commons-dbutils-1.4.jar
, 找到打开jetty服务的地方,心想着肯定有初始化端口的地方,后来在com.cloudera.server.cmf.WebServerImpl
找到了这段代码:
int httpPort = ((Long)ScmHandler.getScmConfigValue(ScmParams.HTTP_PORT, stats)).intValue();
ScmParams.HTTP_PORT描述了取得端口号的键是http_port,如果没有这个配置就默认给7180; stats是个map,存放了各种配置,这些配置放在数据库中,用hibernate读出来,数据库、表、数据是用scm_prepare_database.sh创建出来的,其中有个CONFIGS
表,插入一条数据就行了
INSERT INTO `CONFIGS` (`CONFIG_ID`, `ATTR`, `VALUE`, `CONFIG_CONTAINER_ID`) VALUES (4, 'http_port', '8043', 2);
经过docker虚拟机映射出来8001,可以访问了: