安装CDH6.3版本的时候遇到 ‘ERROR main:com.cloudera.server.cmf.Main: Server failed’的解决方案
在安装CDH大数据平台的cm-server启动的时候遇到 一个错误,该错误日志文件位置为:/var/log/cloudera-scm-server/cloudera-scm-server.log 错误日志部分截取如下:
2021-07-02 02:14:40,154 ERROR main:com.cloudera.server.cmf.Main: Server failed. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.cloudera.server.cmf.TrialState': Cannot resolve reference to bean 'entityManagerFactoryBean' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactoryBean': FactoryBean threw exception on object creation; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not prepare statement
当然了,运维工作就是这样,总是在各种意想不到的地方给你惊喜,我们所需要做到的就是冷静对待。因此,我将分析一下这个错误日志。
以这一段错误日志为例,我们可以发现三个关键的地方,第一是hibernate,第二是while,第三是 could not 。
hibernate以及后面的关联字段是:org.hibernate.exception.GenericJDBCException,表明cm-server使用的是hibernate这个数据库框架,这应该是没问题的,对吧。
while以及后面的关联字段是:while setting constructor argument,表明cm-server在设置构造函数的参数时发生了问题。
could not 以及后面的关联字段是:could not prepare statement,表明无法准备开始语句,具体说,我是在初始化数据库的时候报这么个错的。
根据以上线索,我们可以知道,错误原因在jdbc连接这,要么数据库版本不对,要么数据库驱动不对,而错误日志里有这个:entityManagerFactoryBean,工厂。那么,可以确定是MySQL的驱动不对了,仔细查看了一下 使用的MySQL版本和MySQL驱动版本,MySQL使用的是5.7.19,而驱动版本为mysql-connector-java-5.0.8-bin-g.jar,那么,很明显了,驱动版本过低,MySQL5.7.19并不支持。
处理方案:更换MySQL驱动版本,提高为mysql-connector-java-5.1.47,再次初始化数据库,可以看到数据库的表生成了,完美解决。
初始化数据库的命令是:/opt/cloudera/cm/schema/scm_prepare_database.sh -h 192.168.88.11 mysql scm scm 我的密码(我的密码不能让人看到~~~)
运行结果为:
JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/ Verifying that we can write to /etc/cloudera-scm-server Creating SCM configuration file in /etc/cloudera-scm-server Executing: /usr/java/jdk1.8.0_181-cloudera//bin/java -cp /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/java/postgresql-connector-java.jar:/opt/cloudera/cm/schema/../lib/* com.cloudera.enterprise.dbutil.DbCommandExecutor /etc/cloudera-scm-server/db.properties com.cloudera.cmf.db. Fri Jul 02 14:24:06 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. [ main] DbCommandExecutor INFO Successfully connected to database. All done, your SCM database is configured correctly!
如果是别的输出,那么准时报错了,可能密码错误?这时候,请检查密码。
可以看到生成了scm数据库的一堆表:
总结:
遇到错误不要慌,仔细查看日志,其实日志里已经提醒的很明显了,hibernate,当然是MySQL或者MySQL驱动出问题啦。while告诉我们cm是在干什么的时候报错了,could not 告诉我们,它现在想干的是什么事,这些理清楚了,问题自然迎刃而解。