問題解決:CDH重啓報錯,啓動不了的解決步驟

問題場景

因爲園區突發斷電,導致服務器斷電。部署在服務器上面的CDH集羣都掛了。現在需要重新啓動起來,但是重啓之後,服務一直啓動不起來。本篇博文主要是針對這種情況,闡述解決問題的思路和問題解決的過程。

問題環境

軟件 版本
Centos 7
CDH 5.15.1

問題原因

接下來,就是我排查問題的思路。我一直覺得思路很重要,會讓人少走很多彎路。

確定重啓命令

systemctl restart cloudera-scm-server

嘗試連接頁面

這個要和具體的服務器ip相對應。比如我的CM服務器的域名是namdnode01,那訪問頁面的地址就是:

http://namenode01:7180

但是,登錄一直報錯,連接不上。所以,這個時候,可以確定是服務啓動失敗。

確定環境

因爲CDH集羣是需要關聯mysql數據庫的,所以需要先確定當前mysql數據庫是否啓動正常。那我們可以去查看數據庫是否正常,可以用命令:

ps -ef|grep mysqld|grep -v grep

如果沒有顯示,則mysql數據庫是沒有啓動。需要先啓動起來;否則,就說明數據庫是已經啓動的。

查看日誌

首先遇到問題,先不要盲目地百度或者谷歌。因爲類似CDH這種集成軟件,造成問題的原因可能是多種多樣的,每個人遇到的可能是不同的。而且,問題的提示可能是找不到具體原因的。這個時候就需要先查看日誌,看看日誌報錯的原因是什麼。
如果沒有自定義設置CM服務日誌存放位置的話,一般都會在以下目錄:

[root@namenode01 cloudera-scm-server]# pwd
/var/log/cloudera-scm-serve

登錄進去,我們可以查看一下當前目錄有什麼文件:
在這裏插入圖片描述
而我們需要查看的日誌文件是cloudera-scm-server.log。如果比較難找,可以先重命名當前日誌文件,然後重新執行啓動命令,然後再查看日誌。而對於博主來說,這裏的問題的展示如下:

2020-05-21 10:21:15,110 INFO main:com.cloudera.enterprise.CommonMain: Reading database properties from /etc/cloudera-scm-server/db.properties
2020-05-21 10:21:15,114 INFO main:com.cloudera.enterprise.CommonMain: Statistics not enabled, c3p0 JMX disabled
2020-05-21 10:21:15,237 INFO main:org.hibernate.annotations.common.Version: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
2020-05-21 10:21:15,241 INFO main:org.hibernate.Version: HHH000412: Hibernate Core {4.2.2.Final}
2020-05-21 10:21:15,243 INFO main:org.hibernate.cfg.Environment: HHH000206: hibernate.properties not found
2020-05-21 10:21:15,244 INFO main:org.hibernate.cfg.Environment: HHH000021: Bytecode provider name : javassist
2020-05-21 10:21:15,564 INFO main:org.hibernate.cfg.Configuration: HHH000221: Reading mappings from resource: cmf.hbm.xml
2020-05-21 10:21:15,784 INFO main:org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator: HHH000130: Instantiating explicit connection provider: org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
2020-05-21 10:21:15,785 INFO main:org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider: HHH010002: C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://namenode01:3306/cmf?useUnicode=true&characterEncoding=UTF-8
2020-05-21 10:21:15,786 INFO main:org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider: HHH000046: Connection properties: {user=cmf, password=****, autocommit=true, release_mode=auto}
2020-05-21 10:21:15,786 INFO main:org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider: HHH000006: Autocommit mode: true
2020-05-21 10:21:15,808 INFO main:com.mchange.v2.log.MLog: MLog clients using log4j logging.
2020-05-21 10:21:15,923 INFO main:com.mchange.v2.c3p0.C3P0Registry: Initializing c3p0-0.9.1.1 [built 15-March-2007 01:32:31; debug? true; trace: 10]
2020-05-21 10:21:15,964 INFO main:org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider: HHH000149: JDBC isolation level: READ_COMMITTED
2020-05-21 10:21:15,994 INFO main:com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@99e947a [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@f49b45ff [ acquireIncrement -> 3, acquireRetryAttempts -> 5, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 20000, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1bwmhq3aaepqzsw1oh1pkj|497486b3, idleConnectionTestPeriod -> 300, initialPoolSize -> 3, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 50, maxStatements -> 2500, maxStatementsPerConnection -> 0, minPoolSize -> 5, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@9c79a53f [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1bwmhq3aaepqzsw1oh1pkj|460ebd80, jdbcUrl -> jdbc:mysql://namenode01:3306/cmf?useUnicode=true&characterEncoding=UTF-8, properties -> {user=******, password=******, autocommit=true, release_mode=auto} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1bwmhq3aaepqzsw1oh1pkj|39fcbef6, numHelperThreads -> 3 ]
2020-05-21 10:21:20,284 WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2:com.mchange.v2.resourcepool.BasicResourcePool: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@5353428 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (5). Last acquisition attempt exception: 
java.sql.SQLException: Access denied for user 'cmf'@'namenode01' (using password: YES)
...
2020-05-21 10:21:24,316 ERROR main:org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Connections could not be acquired from the underlying database!
2020-05-21 10:21:24,323 INFO main:org.springframework.beans.factory.support.DefaultListableBeanFactory: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@13b6aecc: defining beans [commandLineConfigurationBean,entityManagerFactoryBean,com.cloudera.server.cmf.TrialState,com.cloudera.server.cmf.TrialManager,com.cloudera.cmf.crypto.LicenseLoader]; root of factory hierarchy
2020-05-21 10:21:24,323 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 open connection

從以上的日誌文件,我們可以得到以下幾點信息:

  1. CDH集羣讀取數據庫配置的路徑在於:Reading database properties from /etc/cloudera-scm-server/db.properties;
  2. 當前數據庫連接爲jdbc:mysql://namenode01:3306/cmf?useUnicode=true&characterEncoding=UTF-8
  3. 具體報錯原因爲:java.sql.SQLException: Access denied for user 'cmf'@'namenode01' (using password: YES)

從獲取的信息已經可以知道怎麼解決這個問題了。
在這裏插入圖片描述

解決方案

在這裏插入圖片描述
從日誌,我們獲取了配置文件所在地和具體報錯原因。那我們可以從兩個方法確定一下:

數據庫配置文件是否正常

我們查看/etc/cloudera-scm-server/db.properties文件內容,如下是博主這邊的數據庫配置信息:

# Auto-generated by scm_prepare_database.sh on 2019年 07月 01日 星期一 16:03:56 CST
#
# For information describing how to configure the Cloudera Manager Server
# to connect to databases, see the "Cloudera Manager Installation Guide."
#
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=namenode01:3306
com.cloudera.cmf.db.name=cmf
com.cloudera.cmf.db.user=cmf
com.cloudera.cmf.db.setupType=EXTERNAL
com.cloudera.cmf.db.password=test

數據庫配置沒什麼。關注點主要在type/host/name/user/password這幾方面。一般這個沒有什麼問題,就沒問題。

權限是否賦權正常

如果配置文件是正確的,那應該是被數據庫給限制了。這裏就不詳細展開說明了,如果需要查看,請點擊我的另一篇博文《mysql學習系列:總結數據庫連接不上的數種情況,問題編號:ERROR 1045 (28000)》進行查看。
按照這篇博文的操作,我順利解決了問題。其主要問題是出現了mysql.user表記錄存在匿名用戶,導致所有訪問地址和namenode01相關的操作,都匹配到了匿名用戶。而密碼不一致,導致了報錯。而我這邊的解決方案,則是將匿名用戶的記錄給刪除了,然後重新刷新了權限。之後,重新啓動CDH,正確啓動了。截圖如下:
在這裏插入圖片描述

總結

遇到問題,都思考問題出現的原因。盲目地百度或者谷歌,都只是在浪費時間。即使偶爾按照網上的步驟解決了問題,也可能是一知半解。我的文章,一直都追求可以把問題發生的原因和解決方案講述清楚,這樣既是對以往歷史的存檔,也是對自己能力的鍛鍊。 謝謝大家的閱讀!
在這裏插入圖片描述

隨緣求贊轉發關注三連

如果我的文章對大家產生了幫忙,可以在文章底部點個贊!有需要可以點擊收藏;
如果有好的討論,可以留言;
如果想繼續查看我以後的文章,可以點擊關注!
也可以掃描以下二維碼,關注我的公衆號:楓夜之求索閣,查看我最新的分享!
在這裏插入圖片描述
拜拜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章