Hive:元数据的三种部署方式

这篇具有很好参考价值的文章主要介绍了Hive:元数据的三种部署方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hive元数据的三种部署方式

元数据库之Derby

1.内嵌模式示意图:
hive初始化元数据库命令,hive,硬件架构,hadoop

2.Derby数据库:
Derby数据库是Java编写的内存数据库,在内嵌模式中与应用程序共享一个JVM,应用程序负责启动和停止。

  1. 初始化Derby数据库
    1)在hive根目录下,使用/bin目录中的schematool命令初始化hive自带的Derby元数据库
    [atguigu@hadoop102 hive]$ bin/schematool -dbType derby -initSchema

2)执行上述初始化元数据库时,会发现存在jar包冲突问题,现象如下:
(hadoop和hive下都有这个jar包,以底层的hadoop为主,改了hive的)
SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]

3)解决jar冲突问题,只需要将hive的/lib目录下的log4j-slf4j-impl-2.10.0.jar重命名即可
[atguigu@hadoop102 hive]$ mv lib/log4j-slf4j-impl-2.10.0.jar lib/log4j-slf4j-impl-2.10.0.back

4.启动Hive
1)执行/bin目录下的hive命令,就可以启动hive,并通过cli方式连接到hive
[atguigu@hadoop102 hive]$ bin/hive

2)使用Hive

hive> show databases;                                      // 查看当前所有的数据库
OK
default
Time taken: 0.472 seconds, Fetched: 1 row(s)
hive> show tables;                                         // 查看当前所有的表
OK
Time taken: 0.044 seconds
hive> create table test_derby(id int);            // 创建表test_derby,表中只有一个字段,字段类型是int
OK
Time taken: 0.474 seconds
hive> insert into test_derby values(1001);                 // 向test_derby表中插入数据
Query ID = atguigu_20211018153727_586935da-100d-4d7e-8a94-063d373cc5dd
Total jobs = 3
……
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
……
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.19 sec   HDFS Read: 12769 HDFS Write: 208 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 190 msec
OK
Time taken: 31.901 second
hive> select * from test_derby;                                // 查看test_derby表中所有数据
OK
1001
Time taken: 0.085 seconds, Fetched: 1 row(s)
hive> exit;
  1. 内嵌模式只有一个JVM进程
    在内嵌模式下,命令行执行jps –ml命令,只能看到一个CliDriver进程。
    [atguigu@hadoop102 hive]$ jps –ml
    7170 sun.tools.jps.Jps -ml
    6127 org.apache.hadoop.util.RunJar /opt/module/hive/lib/hive-cli-3.1.2.jar org.apache.hadoop.hive.cli.CliDriver

6.Hive自带的元数据库的问题
演示采用Derby作为元数据库的问题:
开启另一个会话窗口运行Hive,同时监控/tmp/atguigu目录中的hive.log文件,会观察到如下错误信息。
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/module/hive/metastore_db.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)

Hive默认使用的元数据库为derby并且部署方式是内嵌式,在开启Hive之后就会独占元数据库,且不与其他客户端共享数据,如果想多窗口操作就会报错,操作比较局限。为此Hive支持采用MySQL作为元数据库,就可以支持多窗口操作。

元数据库之Mysql

  1. 直连模式示意图:
    hive初始化元数据库命令,hive,硬件架构,hadoop

2.MySQL安装部署
1)检查当前系统是否安装过Mysql,如果存在就是用下列命令移除,如果不存在则忽略。(一定要做这一步)
[atguigu@hadoop102 hive]$ rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64 //如果存在通过如下命令卸载
[atguigu@hadoop102 hive]$ sudo rpm -e --nodeps mariadb-libs //用此命令卸载mariadb

2)将MySQL安装包上传到/opt/software目录下
[atguigu@hadoop102 software]$ ll
总用量 528384
-rw-r–r–. 1 root root 609556480 3月 21 15:41 mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

3)解压MySQL安装包资源到/opt/software 下新创建的mysql_jars目录
[atguigu@hadoop102 software]$ mkdir /opt/software/mysql_jars
[atguigu@hadoop102 software]$ tar -xf /opt/software/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C /opt/software/mysql_jars

4)查看mysql_jars目录下解压后的文件如下:
[atguigu@hadoop102 software]$ cd /opt/software/mysql_jars
[atguigu@hadoop102 mysql_jars]$ ll
总用量 595272
-rw-r–r–. 1 atguigu atguigu 45109364 9月 30 2019 mysql-community-client-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 318768 9月 30 2019 mysql-community-common-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 7037096 9月 30 2019 mysql-community-devel-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 49329100 9月 30 2019 mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 23354908 9月 30 2019 mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 136837816 9月 30 2019 mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 4374364 9月 30 2019 mysql-community-libs-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 1353312 9月 30 2019 mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 208694824 9月 30 2019 mysql-community-server-5.7.28-1.el7.x86_64.rpm
-rw-r–r–. 1 atguigu atguigu 133129992 9月 30 2019 mysql-community-test-5.7.28-1.el7.x86_64.rpm

5)在/opt/software/mysql_jars目录下执行rpm安装,严格按照如下顺序执行
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
注意: linux采用最小化安装会存在问题。

6)如果在mysql的数据存储路径下有文件存在,需要将其全部删除,存储路径地址在/etc/my.cnf文件中datadir参数所对应的值:
·查看datadir的值:
[atguigu@hadoop102 etc]$ vim my.cnf
……
[mysqld]
datadir=/var/lib/mysql
·删除/var/lib/mysql目录下的所有内容:
[atguigu@hadoop102 hive]$ cd /var/lib/mysql
[root@hadoop102 mysql]$ sudo rm -rf ./* //千万注意执行命令的位置

7)初始化数据库(这个是mysql数据库安装后的初始化),会创建mysql内部数据库和表。
[atguigu@hadoop102 module]$ sudo mysqld --initialize --user=mysql

8)初始化完成后,查看临时生成的root用户的密码,也是首次登录msql的密码
[atguigu@hadoop102 module]$ sudo cat /var/log/mysqld.log
2021-10-18T08:50:32.172049Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-18T08:50:32.364322Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-10-18T08:50:32.397350Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-18T08:50:32.453522Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 73e2af3c-2ff0-11ec-af41-000c29830057.
2021-10-18T08:50:32.454765Z 0 [Warning] Gtid table is not ready to be used. Table ‘mysql.gtid_executed’ cannot be opened.
2021-10-18T08:50:32.978960Z 0 [Warning] CA certificate ca.pem is self signed.
2021-10-18T08:50:33.314317Z 1 [Note] A temporary password is generated for root@localhost: OU+*c.C9FZy;

9)启动MySQL服务
[atguigu@hadoop102 module]$ sudo systemctl start mysqld

10)登录MySQL数据库
[atguigu@hadoop102 module]$ mysql -uroot -p
Enter password: (你的暂时密码) //输入临时生成的密码

11)必须先修改root用户的密码,否则执行其他的操作会报错
mysql> set password = password(“新密码”);

12)修改mysql库下的user表中的root用户允许任意ip连接
mysql> update mysql.user set host=‘%’ where user=‘root’;

13)刷新,使得修改生效
mysql> flush privileges;

3.配置Hive元数据库为MySql

  1. 拷贝驱动
    Hive需要将元数据信息存储到元数据库mysql中,需要使用JDBC的方式连接到MySQL,所以,将MySQL的JDBC驱动拷贝到Hive的lib目录下,供hive调用。
    [atguigu@hadoop102 software]$ cp mysql-connector-java-5.1.37.jar /opt/module/hive/lib

2)配置Metastore到MySql
在/opt/module/hive/conf目录下新建hive-site.xml文件(新建的配置文件中的配置会覆盖默认配置)
[atguigu@hadoop102 hive]$ vim conf/hive-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- jdbc连接的URL -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property>
    <!-- jdbc连接的Driver-->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
</property>
    <!-- jdbc连接的username-->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <!-- jdbc连接的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>
   <!-- Hive元数据存储的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
</configuration>

4.Hive初始化元数据库
在mysql中创建hive存储元数据的数据库metastore,再通过hive的初始化元数据库操作创建表
1)登陆MySQL
[atguigu@hadoop102 module]$ mysql -uroot -p你的密码

2)新建Hive元数据库
mysql> create database metastore;
mysql> quit;

3)初始化Hive元数据库
[atguigu@hadoop102 hive]$ bin/schematool -initSchema -dbType mysql -verbose

5.启动Hive
1)启动Hive
[atguigu@hadoop102 hive]$ bin/hive

2)使用Hive
hive> show databases; // 查看所有的数据库
hive> show tables; // 查看所有的表,刚才创建的表test_derby是否存在?为什么?
hive> create table test_mysql (id int); // 创建test_mysql表,一个字段为id,类型为int
hive> insert into test_mysql values(1002); // 向表test_mysql中插入数据
hive> select * from test_mysql; // 查看test2表

3)开启另一个窗口测试,是否支持客户端并发访问
[atguigu@hadoop102 hvie]$ bin/hive
hive> show tables;
hive> select * from test_mysql;

5.直连模式问题:
在公司生产环境中,网络环境会非常复杂,mysql的所在环境可能存在网络隔离,无法直接访问;另外,mysql的root账户和密码在此模式下会存在泄露风险,存在数据安全隐患。
思考:在hadoop103上部署hive,元数据库使用的仍然是hadoop102的Mysql实例,如何实现?

元数据之MetaStore Server

1.元数据服务模式示意图
hive初始化元数据库命令,hive,硬件架构,hadoop

2.元数据服务模式
在服务器端启动MetaStore服务,客户端利用Thrift协议通过MetaStore服务访问元数据库。
元数据服务的访问方式更适合在生产环境中部署使用,相比内嵌式,该方式更加的灵活。(跨网络跨语言跨平台)

3.将Mysql做为元数据库,部署元数据服务
1)首先,将hive的元数据库配置为Mysql
[atguigu@hadoop102 hive]$ vim conf/hive-site.xml

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

    <!-- 指定存储元数据要连接的地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop102:9083</value>
</property>

注意:在配置了此参数后,启动hive之前必须先启动元数据服务,否则,hive启动后无法连接到元数据服务

2)启动元数据服务
[atguigu@hadoop102 hive]$ bin/hive --service metastore
2021-10-18 18:22:24: Starting Hive Metastore Server
注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作
1)启动 hive,查看表及表中数据,是否是Mysql数据库中的表。
2)在另一个窗口启动hive,测试多客户端能否同时连接操作。
思考:在hadoop103上使用元数据服务模式部署hive如何实现?文章来源地址https://www.toymoban.com/news/detail-796071.html

到了这里,关于Hive:元数据的三种部署方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 初始化Hive元数据库 bash: schematool: 未找到命令的原因

    初始化元数据库:schematool -initSchema -dbType mysql -verbose 报错如下: 解决方法: (1)是否将MySQL的JDBC驱动拷贝到Hive的lib目录下: sudo cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib (2)是否在$HIVE_HOME/conf目录下新建hive-site.xml文件,文件的内容可以百度下 (3)Hive环境变量是否配置

    2024年02月13日
    浏览(36)
  • 安装hive中初始化元数据库失败,显示Failed to get schema version

    我在搭建数据仓库的时候,安装hive包初始化元数据库失败。在网上找了几种方法都没解决成功,然后我又重新看了一下问题,问题当中还显示了:无法使用MySQL以‘root‘@‘localhost‘。 原因分析: 1、权限问题:mysql版本的驱动包不对应,一般 linux系统下的jar为后缀 2、密码问

    2024年02月05日
    浏览(44)
  • Hive初始化遇到的问题:org.apache.hadoop.hive.metastore.HiveMetaException: 失败加载驱动程序

    Hive初始化遇到的问题:org.apache.hadoop.hive.metastore.HiveMetaException: 失败加载驱动程序 在大数据领域,Hive是一个常用的数据仓库工具,它构建在Hadoop之上,提供了一种类似于SQL的查询语言,用于处理大规模的数据集。然而,有时在Hive的初始化过程中,可能会遇到一些错误。其中

    2024年02月08日
    浏览(50)
  • Hive初始化问题 Failed to get schema version.

    Hive初始化问题 Failed to get schema version. 引起Failed to get schema version.的原因有很多,我遇到的如下: 1.Public Key Retrieval is not allowed 原因分析: 如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥;可

    2024年02月11日
    浏览(47)
  • 5. Hive的三种去重方法

    Hive的三种去重方法 1. distinct 注意事项: distinct 不能单独用于指定某一列,必须放在 select 中所有字段的最前面,否则会报错 distinct 是对 select 后面所有字段的组合进行去重 ,并不是只对紧跟其后的 column1 去重。distinct 的作用范围是整个 SELECT 子句的结果集 distinct 对 NULL 是不

    2024年02月13日
    浏览(44)
  • linux centos7环境下初始化hive时报错*** schemaTool failed ***

    执行下面初始化命令时失败 [zxx@node1 bin]$ schematool -dbType mysql -initSchema  从报错信息来看,是因为拒绝访问node1 解决办法: 为node1进行授权,执行以下命令 结果如下图所示 重新初始化,发现加载驱动报错:failed to load driver 原来是忘记重新启动mysql服务了 启动服务之后重新初始

    2024年02月12日
    浏览(47)
  • 1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解

    1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解 2、hive相关概念详解–架构、读写文件机制、数据存储 3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表 4、hive的使用示例详解-事务表、视图、物化视图、DDL

    2024年02月17日
    浏览(43)
  • Hive初始化报错Exception in thread “main“ java.lang.NoSuchMethodError: com.google.common.base.

    安装好hive后执行 初始化命令 报错信息如下: 执行初始化命令时发生报错是因为: hadoop和hive的两个guava.jar版本不一致 hive中版本为:guava-19.0.jar hadoop中的版本为:guava-27.0-jre.jar 第一步 :删除hive里的 guava-19.0.jar (1)先到hive的lib目录里 (2)再用命令rm -fr 删除guava.jar 第二步

    2024年02月10日
    浏览(41)
  • Hive初始化报错Exception in thread “main“ java.lang.NoSuchMethodError: com.google.common.base.Precondition

    Hive 3.1.3 在执行初始化配置命令 bin/schematool -dbType derby -initSchema 的时候报下方错误 这是因为hadoop和hive的两个guava.jar版本不一致,解决方案: 删除低版本的那个,将高版本的复制到低版本目录下 第一步:查看hive3.1.3里的guava.jar 这个保存在hive的lib里,比如我的就在这个目录里

    2023年04月08日
    浏览(47)
  • 大数据Flink(五十八):Flink on Yarn的三种部署方式介绍

    文章目录 Flink on Yarn的三种部署方式介绍 一、​​​​​​​Session模式

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包