当前位置:首页 » 《随便一记》 » 正文

Hive和MySQL的部署、配置Hive元数据存储到MySQL、Hive服务的部署

15 人参与  2024年04月19日 13:08  分类 : 《随便一记》  评论

点击全文阅读


目录

前言

一、Hive安装配置

二、MySQL安装配置

三、Hive元数据存储到MySQL

四、Hive服务的部署


前言

Hive

定义
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务来执行。Hive 定义了一种简单的类 SQL 查询语言,称为 HQL(Hive Query Language),它允许熟悉 SQL 的用户查询数据。

特点

基于 Hadoop:Hive 充分利用了 Hadoop 的分布式计算能力,可以处理大规模的数据集。数据仓库:Hive 主要用于构建数据仓库,支持数据的 ETL(提取、转换、加载)操作。高延迟:由于 Hive 是基于 MapReduce 的,查询可能会有较高的延迟,不适合实时查询场景。数据格式灵活:Hive 支持多种文件格式,如 TextFile、SequenceFile、RCFile 等。

MySQL

定义
MySQL 是一个关系型数据库管理系统(RDBMS),使用 SQL(结构化查询语言)进行数据库管理。它是最流行的开源数据库之一,广泛应用于各种 Web 应用和系统中。

特点

关系型数据库:MySQL 遵循关系模型,提供 ACID 事务支持,保证数据的完整性和一致性。高性能:MySQL 经过多年的优化和发展,具有出色的性能和稳定性。实时查询:MySQL 支持快速、实时的数据查询和更新操作。广泛的应用:MySQL 易于安装和使用,具有广泛的应用场景,从简单的个人网站到复杂的企业级应用。

Hive 与 MySQL 的比较

用途:Hive 主要用于大数据处理和分析,构建数据仓库;而 MySQL 主要用于传统的关系型数据存储和查询。性能:Hive 的查询性能通常低于 MySQL,因为它基于 MapReduce,处理大规模数据时可能会有较高的延迟;而 MySQL 在处理小规模数据时通常具有更快的查询速度。扩展性:Hive 可以利用 Hadoop 的分布式计算能力,轻松扩展以处理更大的数据集;MySQL 的扩展性相对有限,但在许多场景下也足够使用。语言:Hive 使用 HQL(类似于 SQL),而 MySQL 使用标准的 SQL 语言。

一、Hive安装配置

解压

 tar -zxvf /opt/module/apache-hive-3.1.2-bin.tar.gz -C /opt/module/

配置环境

#HIVE_HOMEexport HIVE_HOME=/opt/module/hive-3.1.2export PATH=$PATH:$HIVE_HOME/bin

source 刷新环境

配置guava-27.0-jre.jar

删除/hive-3.1.2/lib下面低版本的guava-19.0.jar

把/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar 复制到/hive-3.1.2/lib下

报错信息:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)

就是因为版本不同,有老有旧,所以我们只留下高版本的那个

初始化元数据库(默认是derby数据库)

bin/schematool -dbType derby -initSchema

二、MySQL安装配置

安装

上传MySQL安装包以及MySQL驱动jar包

mysql-5.7.28-1.el7.x86_64.rpm-bundle.tarmysql-connector-java-5.1.37.jar

解压

tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C /opt/module/

卸载系统自带的mariadb

sudo rpm -qa | grep mariadb | xargs sudo rpm -e --nodeps

安装MySQL依赖

rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm

安装mysql-client

rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpmrpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm

安装mysql-server

rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

启动MySQL

systemctl start mysqld #启动mysql服务器systemctl status mysqld#查看服务器状态systemctl enable mysqld#设置虚拟机开机mysql服务自动启动

查看MySQL状态

systemctl status mysqld.service

如果,状态显示没有启动成功

查看安装MySQL时默认指定的存放文件的数据目录,删除里面的文件 就可以了

查看MySQL密码

sudo cat /var/log/mysqld.log | grep password

用刚刚查到的密码进入MySQL

mysql -uroot -p'临时密码'

注意:

如果报错,给密码加单引号不要把空格给复制上,不然是登不上的

更改MySQL密码策略

set global validate_password_policy=0;set global validate_password_length=4;

设置简单好记的密码

set password=password("123456");

进入MySQL库、查询user表

use mysqlselect user, host from user;

修改user表,把Host表内容修改为%

update user set host="%" where user="root";

刷新

flush privileges;

退出

exit

三、Hive元数据存储到MySQL

配置Hive元数据存储到MySQL

新建Hive元数据库

#登录MySQLmysql -uroot -p123456#创建Hive元数据库mysql> create database metastore;mysql> quit;

将MySQL的JDBC驱动拷贝到Hive的lib目录下

cp mysql-connector-java-5.1.37.jar $HIVE_HOME/lib

在$HIVE_HOME/conf目录下新建hive-site.xml文件

vi $HIVE_HOME/conf/hive-site.xml
<configuration> <!-- jddc连接的URL -->><property>        <name>javax.jdo.option.ConnectionURL</name>        <value>jdbc:mysql://bigdata1:3306/metastore?useSSL=false</value></property><!-- jddc连接的Driver -->><property>        <name>javax.jdo.option.ConnectionDriverName</name>        <value>com.mysql.jdbc.Driver</value></property><!-- jddc连接的username -->><property>        <name>javax.jdo.option.ConnectionUserName</name>        <value>root</value></property><!-- jddc连接的password -->><property>        <name>javax.jdo.option.ConnectionPassword</name>        <value>123456</value></property><!-- Hive默认在HDFS的工作目录 --><property>        <name>hive.metastore.warehouse.dir</name>        <value>/user/hive/warehouse</value></property></configuration>    

初始化Hive元数据库(修改为采用MySQL存储元数据)

bin/schematool -dbType mysql -initSchema -verbose

验证元数据是否配置成功

启动hadoop集群和MySQL服务

start-all.shsystemctl start mysqld

启动Hive

hive

使用Hive

hive> show databases;hive> show tables;hive> create table stu(id int, name string);hive> insert into stu values(1,"ss");hive> select * from stu;

查看MySQL中的元数据

登录MySQL

mysql -uroot -p123456

查看元数据库metastore

mysql> show databases;mysql> use metastore;mysql> show tables;

四、Hive服务的部署

上面我们讲解了Hive的部署、MySQL的部署,还有把Hive元数据库部署在MySQL上面,要想Hive服务更方便,更多功能,我们还需要部署Hive的服务

hiveserver2服务

Hive的hiveserver2服务的作用是提供jdbc/odbc接口,为用户提供远程访问Hive数据的功能,例如用户期望在个人电脑中访问远程服务中的Hive数据,就需要用到Hiveserver2

用户说明
​ 在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。由于Hadoop集群中的数据具备访问权限控制,所以此时需考虑一个问题:那就是访问Hadoop集群的用户身份是谁?是Hiveserver2的启动用户?还是客户端的登录用户?

​ 答案是都有可能,具体是谁,由Hiveserver2的hive.server2.enable.doAs参数决定,该参数的含义是是否启用Hiveserver2用户模拟的功能。若启用,则Hiveserver2会模拟成客户端的登录用户去访问Hadoop集群的数据,不启用,则Hivesever2会直接使用启动用户访问Hadoop集群数据。模拟用户的功能,默认是开启的。

 具体逻辑如下:

未开启用户模拟功能:

开启用户模拟功能:

生产环境,推荐开启用户模拟功能,因为开启后才能保证各用户之间的权限隔离。

hiveserver2部署
Hadoop端配置

​ hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(代理用户功能),只有Hadoop中的代理用户才能模拟其他用户的身份访问Hadoop集群。因此,需要将hiveserver2的启动用户设置为Hadoop的代理用户,配置方式如下:

修改配置文件core-site.xml,然后记得分发三台机器:

cd $HADOOP_HOME/etc/hadoopvi core-site.xml

增加如下配置:

<!-- 配置访问hadoop的权限,能够让hive访问到 --><property>    <name>hadoop.proxyuser.root.hosts</name>    <value>*</value></property><property>    <name>hadoop.proxyuser.root.users</name>    <value>*</value></property>

Hive端配置

在hive-site.xml文件中添加如下配置信息:

<configuration>    <!-- 指定hiveserver2连接的host -->    <property>        <name>hive.server2.thrift.bind.host</name>        <value>bigdata1</value>    </property>    <!-- 指定hiveserver2连接的端口号 -->    <property>        <name>hive.server2.thrift.port</name>        <value>10000</value>    </property>     <!-- ha -->    <property>        <name>hive.server2.active.passive.ha.enable</name>        <value>true</value>    </property></configuration>

测试

启动hiveserver2

bin/hive --service hiveserver2

使用命令行客户端beeline进行远程访问

启动beeline客户端

bin/beeline -u jdbc:hive2://bigdata1:10000 -n root

配置DataGrip连接

(1)创建连接

(2)配置连接属性
所有属性配置,和Hive的beeline客户端配置一致即可。初次使用,配置过程会提示缺少JDBC驱动,按照提示下载即可。

(3)界面介绍

image-20230331233549586

(4)测试sql执行

image-20230331233648354

metastore服务

Hive的metastore服务的作用是为Hive CLI或者Hiveserver2提供元数据访问接口。

metastore运行模式
metastore有两种运行模式,分别为嵌入式模式和独立服务模式。下面分别对两种模式进行说明:

(1)嵌入式模式

(2)独立服务模式

生产环境中,不推荐使用嵌入式模式。因为其存在以下两个问题:

嵌入式模式下,每个Hive CLI都需要直接连接元数据库,当Hive CLI较多时,数据库压力会比较大。每个客户端都需要用户元数据库的读写权限,元数据库的安全得不到很好的保证。

所以metastore的部署,我们只提供独立模式部署的方式
独立服务模式部署
独立服务模式需做以下配置:

<configuration>    <property>        <name>metastore.storage.schema.reader.impl</name>        <value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</value>    </property>    <property>        <name>hive.metastore.uris</name>        <value>thrift://bigdata1:9083</value>    </property>    <property>        <name>hive.metastore.event.db.notification.api.auth</name>        <value>false</value>    </property>    <property>        <name>hive.metastore.schema.verification</name>        <value>false</value>    </property></configuration>

此时启动Hive CLI,执行show databases语句,会出现一下错误提示信息:

hive (default)> show databases;FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

metastore服务的启动命令如下:

hive --service metastore

启动后,在启动Hive CLI,执行show databases语句就可以了

总结

整体的hive-site.xml文件

<configuration>    <property>        <name>javax.jdo.option.ConnectionURL</name>        <value>jdbc:mysql://bigdata1:3306/metastore?useSSL=false</value>    </property>    <property>        <name>javax.jdo.option.ConnectionDriverName</name>        <value>com.mysql.jdbc.Driver</value>    </property>    <property>        <name>javax.jdo.option.ConnectionUserName</name>        <value>root</value>    </property>    <property>        <name>metastore.storage.schema.reader.impl</name>        <value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</value>    </property>    <property>        <name>javax.jdo.option.ConnectionPassword</name>        <value>123456</value>    </property>    <property>        <name>hive.metastore.warehouse.dir</name>        <value>/user/hive/warehouse</value>    </property>    <property>        <name>hive.server2.thrift.port</name>        <value>10000</value>    </property>    <property>        <name>hive.server2.thrift.bind.host</name>        <value>bigdata1</value>    </property>    <property>        <name>hive.metastore.uris</name>        <value>thrift://bigdata1:9083</value>    </property>    <property>        <name>hive.metastore.event.db.notification.api.auth</name>        <value>false</value>    </property>    <property>        <name>hive.metastore.schema.verification</name>        <value>false</value>    </property>    <property>        <name>hive.server2.active.passive.ha.enable</name>        <value>true</value>    </property></configuration>


点击全文阅读


本文链接:http://zhangshiyu.com/post/97544.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1