【Hive】使用MySQL存储元数据

本文介绍了在Hive中遇到的交互式命令行问题,因默认使用Derby数据库仅支持单个会话导致。为解决此问题,文章详细讲解了如何配置Hive使用MySQL作为元数据存储,以支持多个会话,包括创建配置文件、修改配置和添加驱动的步骤,并通过测试验证了解决方案的有效性。

交互式命令问题

现象:

bin/hive这个交互性命令行不能同时开多个,开第二个就报错了

原因

hive中无论是创建的 数据库还是表 ,这些元数据metaStore需要存储
默认情况下存储在Derby数据库里面的,属于嵌入式数据,每次仅仅支持一个会话,

解决:

使用支持多个会话的数据,推荐MySQL存储元素(官方推荐)
在这里插入图片描述

配置使用MYSQL存储元素

文档:
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration
(1)创建配置文件
touch hive-site.xml
(2)修改配置
在这里插入图片描述
(3)添加驱动
在这里插入图片描述
10.3测试
(1)将metastore_db和derby.log删除
(2)启动bin/hive
(3)效果:
a):可以启动多个bin/hive交互性命令行
b):mysql 数据库中可以看到 那个 数据库

<think> 我们参考用户提供的引用内容,特别是引用[1]和引用[2]中提到了通过beeline连接Hive以及使用MySQL作为元数据存储的配置。用户需要的是以beeline形式连接Hive,并且使用MySQL存储元数据时的Hive安装方法。 根据引用[1]和引用[2],我们可以总结出以下步骤: 1. 安装Hive,并配置其使用MySQL作为元数据存储(即配置metastore)。 2. 启动Hive的metastore服务(通常通过`hive --service metastore`启动)。 3. 启动Hivehiveserver2服务(通过`hiveserver2`命令),以便beeline连接。 4. 使用beeline客户端连接hiveserver2。 同时,引用[2]中提到了连接时可能出现的权限问题(User: root is not allowed to impersonate root),这需要在Hadoop中配置代理用户。 因此,安装和配置步骤如下: ### 步骤1: 安装Hive并配置MySQL作为元数据存储 1. 下载并解压Hive安装包。 2. 配置环境变量(例如将Hive的bin目录加入PATH)。 3. 配置Hive的配置文件`hive-site.xml`,设置连接MySQL的JDBC驱动、连接URL、用户名和密码等。 ### 步骤2: 配置Hadoop代理用户权限 在Hadoop的配置文件`core-site.xml`中添加以下属性,以允许HiveServer2模拟用户(例如root用户): ```xml <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> ``` 然后重启Hadoop集群。 ### 步骤3: 启动Hive服务 1. 启动Hadoop集群。 2. 启动Hive的metastore服务:`nohup hive --service metastore &`。 3. 启动Hivehiveserver2服务:`nohup hiveserver2 &`。 ### 步骤4: 使用beeline连接 在命令行输入`beeline`,然后输入连接命令: ``` !connect jdbc:hive2://localhost:10000 ``` 按提示输入用户名和密码(如果HiveServer2配置了安全认证,否则可能只需输入任意用户名且密码为空)。 ### 详细配置说明 #### 1. 配置`hive-site.xml`(关键部分) 以下是一个使用MySQL作为元数据存储的配置示例: ```xml <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://mysql_host:3306/hive_metastore?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveuser</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> <description>password to use against metastore database</description> </property> </configuration> ``` 注意:需要将`mysql_host`替换为MySQL服务器的主机名或IP地址,`hive_metastore`是元数据库名,`hiveuser`和`password`是连接MySQL的用户名和密码。 #### 2. 将MySQL JDBC驱动包放入Hive的lib目录 下载MySQL的JDBC驱动(如mysql-connector-java-5.1.47.jar)并放入Hive的lib目录下。 #### 3. 初始化元数据库 在第一次使用前,需要初始化元数据库(只需一次): ``` schematool -initSchema -dbType mysql ``` ### 注意事项 - 确保MySQL服务已启动,并且Hive所在的机器可以访问MySQL服务器。 - 确保Hadoop集群正常运行。 - 如果遇到连接问题,检查Hive日志(通常在/tmp/<用户名>/hive.log)和hiveserver2的日志(在启动时指定的日志文件)。 ### 总结 通过以上步骤,我们可以完成使用MySQL存储元数据Hive安装,并通过beeline连接HiveServer2进行交互。 §§相关问题§§ 1. 如何解决beeline连接时出现的“User: root is not allowed to impersonate root”错误? 2. 如何配置Hive使用其他数据库(如PostgreSQL)作为元数据存储? 3. Hive的metastore服务的作用是什么? </think>### 使用Beeline连接HiveMySQL存储元数据的安装方法 #### 1. **前置条件** - 已安装Hadoop集群并正常运行(NameNode和DataNode已启动) - 已安装MySQL服务器(用于存储Hive元数据) - 已下载Hive安装包(以3.1.3为例) --- #### 2. **关键配置步骤** ##### (1) 配置MySQL元数据库 ```sql -- 创建元数据库和用户 CREATE DATABASE hive_metastore; CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON hive_metastore.* TO 'hiveuser'@'%'; FLUSH PRIVILEGES; ``` ##### (2) 配置`hive-site.xml` ```xml <configuration> <!-- MySQL连接配置 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://mysql_host:3306/hive_metastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveuser</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>your_password</value> </property> <!-- HiveServer2配置 --> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <property> <name>hive.server2.authentication</name> <value>NONE</value> <!-- 生产环境建议改为KERBEROS --> </property> </configuration> ``` ##### (3) 将MySQL驱动包放入Hive的lib目录 ```bash cp mysql-connector-java-8.0.28.jar $HIVE_HOME/lib/ ``` --- #### 3. **初始化元数据库** ```bash $HIVE_HOME/bin/schematool -initSchema -dbType mysql ``` 成功输出:`Initialization script completed schemaTool completed` --- #### 4. **启动服务** ```bash # 启动元数据服务(后台运行) nohup hive --service metastore & # 启动HiveServer2(后台运行) nohup hiveserver2 1>hiveserver2.log 2>hiveserver2.err & ``` --- #### 5. **Beeline连接验证** ```bash # 启动Beeline客户端 beeline # 连接HiveServer2 !connect jdbc:hive2://localhost:10000 用户名: root # 根据hive.server2.authentication配置输入 密码: [直接回车] # 无密码时留空 # 执行测试命令 0: jdbc:hive2://localhost:10000> show databases; +----------------+ | database_name | +----------------+ | default | +----------------+ ``` --- #### 6. **常见问题解决** **问题1:用户模拟错误** 报错:`User: root is not allowed to impersonate root` 修复方法:在`core-site.xml`中添加: ```xml <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> ``` 重启Hadoop集群生效[^2]。 **问题2:驱动类找不到** 报错:`JDBC Driver not found` 解决方案:确认MySQL驱动版本与MySQL服务版本匹配,并放置在`$HIVE_HOME/lib/`目录。 --- ### 技术原理图 ``` Beeline客户端 → JDBC协议 → HiveServer2服务 → Hadoop集群 ↓ MySQL元数据库 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值