我的理解是 Derby
在当前目录中创建文件。但是那里没有。
所以我试着 hive
初始化使用 Derby
:但是。。似乎已经有了一个derby数据库。
schematool --verbose -initSchema -dbType derby
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.derby.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:> CREATE FUNCTION "APP"."NUCLEUS_ASCII" (C CHAR(1)) RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA READS SQL DATA CALLED ON NULL INPUT EXTERNAL NAME 'org.datanucleus.store.rdbms.adapter.DerbySQLFunction.ascii'
Error: FUNCTION 'NUCLEUS_ASCII' already exists. (state=X0Y68,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 !!
Underlying cause: java.io.IOException : Schema script failed, errorcode 2
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:291)
at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:264)
at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:505)
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:390)
at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:347)
at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:287)
所以。。它在哪里?
更新我已重新安装配置单元从头开始使用
brew reinstall hive
同样的错误也会发生。
另一个更新给出了此错误的新方向,它现在在另一个问题中得到了回答:
对于一个非os/x的问题(但在其他方面类似)的答案可以在这里找到:
https://stackoverflow.com/a/40017753/1056563
I installed hive with HomeBrew(MacOS) at /usr/local/Cellar/hive and afer running schematool -dbType derby -initSchema I get the following error message:
Starting metastore schema initialization to 2.0.0 Initialization script hive-schema-2.0.0.derby.sql Error: FUNCTION 'NUCLEUS_ASCII' already exists. (state=X0Y68,code=30000) org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
However, I can't find either metastore_db or metastore_db.tmp folder under install path, so I tried:
find /usr/ -name hive-schema-2.0.0.derby.sql
vi /usr/local/Cellar/hive/2.0.1/libexec/scripts/metastore/upgrade/derby/hive-schema-2.0.0.derby.sql
comment the 'NUCLEUS_ASCII' function and 'NUCLEUS_MATCHES' function
rerun schematool -dbType derby -initSchema, then everything goes well!
2条答案
按热度按时间jhdbpxl91#
您可能需要查看配置单元配置文件。它应该告诉您在哪里初始化它。
kmpatx3s2#
homebrew安装未配置的配置单元(版本2.3.1)。默认设置是使用进程内derby数据库(hive已经包含了所需的lib)。
你唯一要做的事就是
brew install hive
)是初始化数据库:然后你就可以跑了
hive
,它会起作用的。但是,如果你想跑hive
在初始化数据库之前,配置单元实际上会创建一个不完整的数据库,并且将无法工作:因为数据库是半创建的,
schematool
现在也将失败:要解决此问题,必须删除数据库:
然后再次运行初始化命令。
注意到我从当前目录中删除了metastore\u db吗?这是另一个问题:配置单元被配置为在当前工作目录中创建和使用derby数据库。这是因为它具有以下“javax.jdo.option.connectionurl”的默认值:
要解决这个问题,请创建文件
/usr/local/opt/hive/libexec/conf/hive-site.xml
作为像以前一样重新创建数据库。现在数据库在
/usr/local/var/hive
,以防你再次意外跑掉hive
在初始化数据库之前,请使用以下命令将其删除: