hive的安装(一)

简介: hive的安装(一)

版本选择

  • hive1:计算引擎使用的是mr(基于磁盘计算的);
  • hive2:计算引擎使用的默认是mr,但是可以更换计算引擎为spark、tez;spark是基于内存计算的,速度快,但是spark程序对内存要求比较高。

一、第一种安装方式

不要使用此安装方式,讲述这种安装方式,仅仅用于测试hive默认使用derby数据库的缺陷。你可以在下面的安装步骤中看到,我连环境变量都没有配置。

1)上传20191208103313468-1.png

2)解压

apps是我在家目录下的hadoop用户下(/home/hadoop),已经创建好的一个文件夹。我们将上传好的hive压缩包解压到apps目录下。


tar -zxvf apache-hive-2.3.6-bin.tar.gz -C apps/


3)初始化元数据库

进入到hive解压目录的bin目录下,进行元数据库的初始化,使用的命令如下:

./schematool -dbType derby -initSchema


当出现schemaTool completed,表示初始化元数据库成功。

初始化完成以后,bin目录下会多出如下两个文件:

derby.log:存储一些日志信息;

metastore_db:存储元数据信息;

执行效果如下:

image.png

4)启动

① 先在bin目录下,执行hive这个启动命令。


分析如下:

image.png

从上图中可以看出,完成元数据的初始化后,第一次是在bin目录下,执行hive的启动命令。

接着,执行了一系列的sql命令,还创建了一个新的数据库test,同时在该数据库中创建了一个test01表,最后在该表中插入了一条数据。

记住:我在这里已经创建了一个新数据库test。

往下看第②步,由于第一次是在bin目录下,执行hive的启动命令,这次我们切换到其它目录,启动hive(切换到bin目录的上一层目录,启动hive)。

看看会发生什么事情???

② 在bin目录的上一层目录apache-hive-2.3.6-bin,执行hive这个启动命令。


分析如下:

image.png

从上图可以看出:我们切换到bin目录的上一级目录下,启动hive。可以看到,当成功出现了"hive>" ,表示hive启动成功。

启动hive后,执行sql语句的时候(我执行的是"show databases"),会出现一个错误"元数据实例化错误。(unable to instantiate metadata)"

此时,删除derby.1og和metastore_db这两个文件,重新进行初始化操作,当出现“schemaTool compeleted”,证明元数据初始化成功。

然后,再次启动hive,成功启动后,再执行“show databases"命令,虽然没有问题,但是你有没有发现结果中少了一个数据库test(我们之前创建过这个test库)。

这就是derby数据库的缺陷,具体是什么缺陷,我们下面进行原因分析。

③ hive不使用derby作为默认数据库的原因是什么呢?

derby属于"单用户模式",主要体现在目录上。

在不同的目录下启动hive执行相关sql操作,需要从新进行元数据初始化的工作。上面的演示中,第一次是在bin目录下进行元数据的初始化,接着启动hive的,此时我们在hive中所做的一系列操作,均只属于这一个用户。当我们再次切换到bin目录的上一级目录下,再次启动hive,是可以启动的,但是当我们想要执行sql命令时,却发现会报一个"元数据实例化错误。"。

这就说明: derby元数据库只记录了,第一次进行元数据库初始化后,在那个bin目录下所执行的任何sql命令的元数据信息。也就是说你任何时间想要访问你之前创建的库、表信息,只要是在该bin目录下都可以访问,一但不在这个目录下,你也就无法访问到这些库、表信息了。

什么是元数据库?什么是元数据信息呢?

元数据库就是用于存放元数据信息的数据库。元数据信息就是对表的抽象,像某个表属于哪个库、某个表有哪些字段、某个表属于那种类型等这些表信息,都属于元数据信息,这些信息都是存放在元数据库中的,表中真实数据都是在hdfs上分布式存储的,并不在元数据库中。这里你可能还是不太明白,目前只需要有一个大致印象,即可。元数据库相当于是这些库、表的家庭住址,只有先访问元数据库,你才可以访问这些库和表。而单用户模式,指的是你在哪里执行初始化操作,你就必须在该目录下执行sql操作,才可以访问到元数据库,因为元数据库就是在执行初始化操作的生成的。就是由于这种原因,才导致切换目录后,只能进入hive,却不能访问元数据库,也就不能执行sql操作了。

当我们再次切换到其它目录(比如说bin目录的上一级目录)启动hive后,如果我们想要执行相关sql操作,就必须重新执行元数据的初始化,否则就会出现“元数据实例化错误(unable to instantiate metadata)”。但是一旦重新初始化后,第一次初始化后的元数据库中的元数据信息,就会被覆盖掉,也就导致我们之前创建的库、表丢失了家庭地址,访问不到了,这就是上面我们使用"show databases"的时候,发现第一次创建的test库,根本没有。

总结如下:

derby作为hive的默认数据库,也不是不可以,只是说我们在哪里执行的初始化操作,以后就必须在该目录下执行相关的sql操作。想要在任何地方启动hive,并执行sql操作,就必须重新初始化操作,也就是说你每换一个目录执行sql命令,都必须重新进行初始化。但是一旦当你重新进行初始化操作后,以前的元数据库中的元数据信息会被覆盖掉,以前创建的库、表的家庭地址也会因此丢失,那么以前创建的库、表也就访问不到了,像没创建过一样。也就是说,使用derby作为hive的默认数据库,不同用户之间元数据库不能共享,也就导致元数据信息不能共享,只能被当前用户"独享"。



相关文章
|
SQL 关系型数据库 MySQL
Mac下安装hive
Mac下安装hive
435 0
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
76 3
|
7月前
|
SQL HIVE
|
5月前
|
SQL 分布式计算 关系型数据库
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
75 2
|
6月前
|
SQL 分布式计算 关系型数据库
分布式系统详解 -- Hive1.2.1 安装
分布式系统详解 -- Hive1.2.1 安装
71 1
|
7月前
|
SQL 分布式计算 关系型数据库
Ubuntu上安装MySQL以及hive
Ubuntu上安装MySQL以及hive
|
SQL 分布式计算 Ubuntu
基于Hadoop的数据仓库Hive安装
基于Hadoop的数据仓库Hive安装
443 0
|
SQL 存储 分布式计算
Hive学习---1、Hive入门、Hive 安装(二)
Hive学习---1、Hive入门、Hive 安装(二)
|
7月前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.15 安装HIVE
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
217 1
Hadoop学习笔记(HDP)-Part.15 安装HIVE
|
7月前
|
SQL 分布式计算 关系型数据库
Hive安装
Hive安装
109 1