HIVE Metastore中Local/Embedded Metastore Server的配置分析

本文深入探讨了HIVE元数据存储的两种模式:Local/Embedded Metastore(使用Derby数据库)和Remote Metastore。内容包括它们的设置与工作原理,帮助理解何时选择本地或远程Metastore Server。
*初学者个人体会,主要作为笔记使用,如有错误欢迎指正。

根据现在的官方指引(modified by Shannon Ladymon on Jul 22, 2016)所述,HIVE的Metastore有四种配置,其中又分为两种形式—— 数据库(Metastore database)和服务器(Metastore Server)
  • Local/Embedded Metastore Database (Derby)
  • Remote Metastore Database
  • Local/Embedded Metastore Server 
  • Remote Metastore Server
而Local/Embedded Metastore Database (Derby)(可理解为调试模式,Metastore存储在hive执行的当前目录下),Remote Metastore Database(Metast
[root@master bin]# schematool -initSchema -dbType mysql -verbose ls: 无法访问/usr/local/spark-2.4.0-bin-hadoop2.6/lib/spark-assembly-*.jar: 没有那个文件或目录 Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver Metastore connection User: APP Starting metastore schema initialization to 1.2.0 Initialization script hive-schema-1.2.0.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 @OLD_CHARACTER_SET_CLIENT=@@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:270) at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:243) at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:473) 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:358) at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:326) at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:266) ... 8 more *** schemaTool failed *** [root@master bin]# 怎么解决
06-14
### Hive Metastore 初始化失败问题分析与解决方案 在 Hive Metastore 初始化过程中,`schemaTool` 失败通常是由数据库配置、初始化脚本冲突或权限问题引起的。以下是对该问题的详细分析和解决方法。 #### 1. 错误原因分析 - **Schema 脚本冲突**:如果之前已经执行过 `schematool -initSchema` 指令,并且使用了不同的数据库类型(例如从 Derby 切换到 MySQL),可能会导致 Schema 初始化脚本冲突[^4]。 - **函数重复定义**:错误信息中提到 `FUNCTION 'NUCLEUS_ASCII' already exists`,表明某些函数已在数据库中定义,再次初始化时会引发冲突[^1]。 - **SQL 语法错误**:如果初始化脚本中存在语法问题,例如引用[3]中的 `Syntax error: Encountered "" at line 1, colume64`,这可能是由于脚本版本与数据库不兼容所致[^3]。 - **权限问题**:确保用于初始化的用户具有足够的权限来创建表和函数。如果权限不足,也可能导致初始化失败。 #### 2. 解决方案 ##### 方法一:检查并清理之前的数据库实例 如果之前使用过 Derby 数据库进行初始化,而当前切换到 MySQL,则需要清理旧的数据库实例: ```bash cd /export/server/hive-2.1.0/scripts/metastore/upgrade/derby mv metastore_db metastore_db.tmp ``` 此操作将重命名旧的 Derby 数据库文件,避免冲突[^4]。 ##### 方法二:验证初始化脚本的正确性 确保使用的初始化脚本与 Hive 版本和数据库类型匹配。例如,对于 MySQL 数据库,可以手动检查 `hive-schema-<version>.mysql.sql` 文件是否存在语法错误。如果发现错误,可以根据数据库版本对其进行修改。 ##### 方法三:重新运行初始化命令 在确认数据库清理完毕后,重新运行初始化命令。以下是针对 MySQL 数据库的初始化示例: ```bash /usr/hdp/current/hive-metastore/bin/schematool -initSchema -dbType mysql -userName hive -passWord [PROTECTED] -verbose ``` 确保 `-userName` 和 `-passWord` 参数正确,并且用户具有足够的权限[^2]。 ##### 方法四:手动导入初始化脚本 如果自动化工具仍然失败,可以尝试手动导入初始化脚本。将 Hive 安装目录下的 SQL 文件复制到目标数据库中执行。例如: ```bash cp /usr/local/hive/scripts/metastore/upgrade/mysql/hive-schema-1.2.1000.mysql.sql /path/to/mysql/ mysql -u hive -p < hive-schema-1.2.1000.mysql.sql ``` 注意替换路径和版本号以匹配实际环境[^5]。 #### 3. 注意事项 - 确保 Hive 配置文件(如 `hive-site.xml`)中的数据库连接信息正确无误。 - 如果使用分布式数据库(如 MySQL),请确认网络连接正常。 - 在生产环境中,建议备份现有数据库后再进行初始化操作。 #### 示例代码 以下是一个完整的初始化脚本示例: ```bash #!/bin/bash # 设置变量 HIVE_HOME=/usr/local/hive SCHEMA_TOOL=$HIVE_HOME/bin/schematool DB_TYPE=mysql USER_NAME=hive PASSWORD=your_password # 清理旧的 Derby 数据库 if [ -d "$HIVE_HOME/scripts/metastore/upgrade/derby/metastore_db" ]; then mv $HIVE_HOME/scripts/metastore/upgrade/derby/metastore_db $HIVE_HOME/scripts/metastore/upgrade/derby/metastore_db.tmp fi # 初始化 Hive Metastore $SCHEMA_TOOL -initSchema -dbType $DB_TYPE -userName $USER_NAME -passWord $PASSWORD -verbose ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值