1. 程式人生 > >hiveMetastore元資料庫初始化失敗:java.io.IOException: Schema script failed, errorcode 2

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中的配置項。