一、问题场景
安装 Ambari + HDP 集群,修改了 MySQL的默认端口,安装的时候没有问题,启动的时候 ranger Admin 报了如下的错误:
问题描述: 在Ambari页面,安装Ranger组件时,后台使用MySQL数据库的端口修改为:非默认端口3306 在启动、重启Ranger组件时报错:
/usr/jdk64/java/bin/java -cp /usr/hdp/current/... jdbc:mysql://namenode/ranger -u 'ranger' -p '******' -noheader ......
缺少端口号:3906,实际应该为:...... jdbc:mysql://namenode:3906/ranger ......
最后的报错如下:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 按照 这个信息去解决问题 ,走了弯路没有找到问题的根本原因。
二、解决方法
问题解决历程 一
起初真的以为是 MySQL什么连接超时原因,但我还是不敢确定,因为以前用MySQL默认的端口没有什么问题啊。
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
当数据库重启或数据库空闲连接超过设置的最大timemout时间,数据库会强行断开已有的链接,最大timeout时间可以通过命令show global variables like "wait_timeout";
查询:
mysql> show global variables like "wait_timeout";
+---------------+-------+
| VARIABLE_NAME | VALUE |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
但是做了以上的 配置后没有我又改了回去,排除了这种可能,于是觉得是不是Ranger 的坑 ,于是网上一搜,果然有人碰到了。
问题解决历程 二
ambari关于ranger的一个大坑----端口默认是3306,需要手动修改
ambari安装ranger的时候需要连接数据库,使用的是mysql数据库,这个时候你需要输入数据库root用户名和密码,因为需要连接root用户去创建新用户和数据库
问题就出在这里了,由于生产环境改了MySQL的默认端口,然而 ranger 的启动脚本使用的是默认的MySQL 端口。
/usr/jdk64/java/bin/java -cp /usr/hdp/current/... jdbc:mysql://namenode/ranger -u 'ranger' -p '******' -noheader ......
缺少端口号:33066,实际为:...... jdbc:mysql://namenode:33066/ranger ......
于是我进入启动脚本:vim /usr/hdp/current/ranger-admin/db_setup.py 搜索 jisql_cmd 的位置找到 jdbc:mysql:// 的地方手动修改就可以了,Ambari的版本不同, jdbc:myql 的位置可能不同。
切记: 是第一个 %s 的后面 加 修改后的 MySQL 端口
可能的问题: vim /usr/hdp/current/ranger-admin/db_setup.py 编辑文件后无法保存,就是 readonly ,可以尝试 sudo vim ,以root权限进入该文件。