hiveMetastore元資料庫初始化失敗:java.io.IOException: Schema script failed, errorcode 2
Traceback (most recent call last): File "/var/lib/ambari-agent/cache/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py", line 259, in <module> HiveMetastore().execute() File "/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py", line 280, in execute method(env) File "/var/lib/ambari-agent/cache/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py", line 59, in start self.configure(env) File "/var/lib/ambari-agent/cache/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py", line 73, in configure hive(name = 'metastore') File "/usr/lib/python2.6/site-packages/ambari_commons/os_family_impl.py", line 89, in thunk return fn(*args, **kwargs) File "/var/lib/ambari-agent/cache/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py", line 320, in hive user = params.hive_user File "/usr/lib/python2.6/site-packages/resource_management/core/base.py", line 155, in __init__ self.env.run() File "/usr/lib/python2.6/site-packages/resource_management/core/environment.py", line 160, in run self.run_action(resource, action) File "/usr/lib/python2.6/site-packages/resource_management/core/environment.py", line 124, in run_action provider_action() File "/usr/lib/python2.6/site-packages/resource_management/core/providers/system.py", line 273, in action_run tries=self.resource.tries, try_sleep=self.resource.try_sleep) File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 71, in inner result = function(command, **kwargs) File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 93, in checked_call tries=tries, try_sleep=try_sleep) File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 141, in _call_wrapper result = _call(command, **kwargs_copy) File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 294, in _call raise Fail(err_msg) resource_management.core.exceptions.Fail: Execution of 'export HIVE_CONF_DIR=/usr/hdp/current/hive-metastore/conf/conf.server ; /usr/hdp/current/hive-metastore/bin/schematool -initSchema -dbType mysql -userName hive -passWord [PROTECTED] -verbose' returned 1. WARNING: Use "yarn jar" to launch YARN applications. Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver Metastore connection User: hive Starting metastore schema initialization to 1.2.1000 Initialization script hive-schema-1.2.1000.mysql.sql Connecting to jdbc:derby:;databaseName=metastore_db;create=true Connected to: Apache Derby (version 10.10.2.0 - (1582446)) Driver: Apache Derby Embedded JDBC Driver (version 10.10.2.0 - (1582446)) Transaction isolation: TRANSACTION_READ_COMMITTED 0: jdbc:derby:> !autocommit on Autocommit status: true 0: jdbc:derby:> /*!40101 SET @
[email protected]@CHARACTER_SET_CLIENT */ Error: Syntax error: Encountered "<EOF>" at line 1, column 64. (state=42X01,code=30000) Closing: 0: jdbc:derby:;databaseName=metastore_db;create=true org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !! org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !! at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:285) at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:258) at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:508) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136) Caused by: java.io.IOException: Schema script failed, errorcode 2 at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:391) at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:348) at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:281) ... 8 more *** schemaTool failed ***
分析錯誤可以看到,是因為執行sql指令碼 hive-schema-1.2.1000.mysql.sql中的sql報語法錯誤。開始以為是因為sql指令碼的版本跟我們所使用的mysql資料庫的版本不匹配導致,結果將 hive-schema-1.2.1000.mysql.sql中/*!40101……這種開頭的sql語句都刪除了,重啟hiveMetastore,依然報sql語法錯誤。此時便可排除mysql版本的原因。
繼續看錯誤日誌:
錯誤是執行/usr/hdp/current/hive-metastore/bin/schematool -initSchema -dbType mysql -userName hive -passWord [PROTECTED] -verbose這個指令時觸發的,看了下下面列印的日誌:
Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User: hive
發現連線元資料庫的databaseName用的居然不是我們傳入的hive,而是metastore_db;
驅動Driver也不是mysql的驅動,而是本地derby資料庫的驅動org.apache.derby.jdbc.EmbeddedDriver
說明雖然我們呼叫schematool 指令傳入的資料型別是mysql,傳入的資料庫名也是mysql的,但實際呼叫卻是derby資料庫,所以才會因為在derby資料庫上執行mysql的sql指令碼檔案而一直包sql語法錯誤。
第一想到的就是我們的配置檔案hive-site.xml有問題,檢查配置正確,關於metastore的配置均是mysql。
後來發現在/etc/haddoop/conf下還有一個hive-site.xml,果然,該配置檔案沒有任何關於matastroe的配置項,將/etc/hive/conf/hive-site.xml拷貝過來替換這個檔案,解決問題
PS:derby資料庫是預設的hiveMetaStore資料庫型別,如果我們不指定使用mysql或者oracle等其他資料庫,則預設使用derby資料庫。
所以,可以分析出,初始化hiveMetaStore資料庫時,拼接執行指令/usr/hdp/current/hive-metastore/bin/schematool -initSchema -dbType mysql -userName hive -passWord [PROTECTED] -verbose用的是/etc/hive/conf/hive-site.xml,但是提交到yarn中去執行指令的時候,會再次讀取/etc/haddoop/conf/hive-site.xml中的配置項。