問題場景
因爲園區突發斷電,導致服務器斷電。部署在服務器上面的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
從以上的日誌文件,我們可以得到以下幾點信息:
CDH
集羣讀取數據庫配置的路徑在於:Reading database properties from /etc/cloudera-scm-server/db.properties
;- 當前數據庫連接爲
jdbc:mysql://namenode01:3306/cmf?useUnicode=true&characterEncoding=UTF-8
- 具體報錯原因爲:
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
,正確啓動了。截圖如下:
總結
遇到問題,都思考問題出現的原因。盲目地百度或者谷歌,都只是在浪費時間。即使偶爾按照網上的步驟解決了問題,也可能是一知半解。我的文章,一直都追求可以把問題發生的原因和解決方案講述清楚,這樣既是對以往歷史的存檔,也是對自己能力的鍛鍊。 謝謝大家的閱讀!
隨緣求贊轉發關注三連
如果我的文章對大家產生了幫忙,可以在文章底部點個贊!有需要可以點擊收藏;
如果有好的討論,可以留言;
如果想繼續查看我以後的文章,可以點擊關注!
也可以掃描以下二維碼,關注我的公衆號:楓夜之求索閣,查看我最新的分享!