hive的三种部署模式

1、使用内置的derby数据库做元数据的存储

使用内置的derby数据库做元数据的存储,操作derby数据库做元数据的管理。使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。

这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,目录不同时元数据也无法共享,不适合生产环境只适合练习。

2、 本地模式

使用mysql做元数据的存储,操作mysql数据库做元数据的管理。

优点:可以多个hive client一起使用,并且可以共享元数据。但mysql的连接信息明文存储在客户端配置,不便于数据库连接信息保密和以后对元数据库进行更改,如果客户端太多也会对mysql造成较大的压力,因为每个客户端都自己发起连接。

hive的三种join hive的三种部署方式的区别_hive

Driver和metastore在同一台机器上,能看到mysql的连接,不安全。只需启动metastore 服务就启动了hive。多个hive服务同时访问mysql,使得mysql服务端压力增加,可以通过mysql ha 减压。

3、远程模式

使用mysql做元数据的存储,使用metastore服务做元数据的管理。

优点:便于元数据库信息的保密。因为只需要在运行metastore的机器上配置元数据库连接信息,客户端只需要配置metastore连接信息即可。

缺点:会引发单点问题。例如metastore服务挂了,其它hive终端就获取不到元数据信息了。不过,一般来说企业环境推荐使用远程模式。

远程模式,Driver和metastore不在同一台机器上,看不到mysql的连接,安全可靠。需要启动每个机器的driver和metastore。多个hive服务同时访问metastore,使得metastore服务端压力增加,可以通过横向扩展metastore 减压。

总结:

本地模式和远程模式的区别:本地模式不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。

远程模式需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。服务端指的是Metastore服务所在的机器,即安装metastore的机器。

metastore 服务端的配置,供参考。

<configuration>

<property>
  <name>javax.jdo.option.ConnectionURLname>
  <value>jdbu:mysql://snl.hadoop:3306/hive_metavalue>
  <description>mysql连接信息description>
property>

<property>
  <name>javax.jdo.option.ConnectionDriverNamename>
  <value>com.mysql.jdbc.Drivervalue>
  <description>mysql驱动description>
property>

<property>
  <name>javax.jdo.option.ConnectionUserNamename>
  <value>hivevalue>
  <description>数据库用户名description>
property>

<property>
  <name>javax.jdo.option.ConnectionPasswordname>
  <value>1234abcdvalue>
  <description>数据库密码description>
property>



<property>
  <name>hive.metastore.warehouse.dirname>
  <value>/hive/warehousevalue>
  <description>hive使用的HDFS目录description>
property>


<property>
  <name>hive.metastore.schema.verificationname>
  <value>truevalue>
property>

<property>
  <name>hive.metastore.urisname>
  <value>thrift://snl.hadoop:9083value>
property>
configuration>

安装部署完成hive以后,我们启动hive进行简单测试。启动hive的过程:配置完成之后,先启动matesotre服务,再启动hive client。

4、启动matesotre服务,命令:

nohup hive --service metastore > /dev/null 2>&1 &

注意:nohup是后台运行命令。

启动matesotre服务以后,启动hive客户端,直接hive或 ./bin/hive

5、对hive进行测试

建立一个新库,语法:

create database ;

show create database bigdata;

新建表

在bigdata数据库下创建表,首先进入数据库(use bigdata)如果没有进入数据库,那默认是default

//创建test表
create table tets(id int,name string); 

//desc查看表的结构信息
desc tets;

//查看表的元数据信息
show create table user_info;

上传测试数据

#使用hadoop fs -put 命令 上传文件到 test 表的目录下 
hadoop fs -put test.txt /hive/warehouse/bigdata.db/test

测试查询

select id,name from test;

6、hive的数据组织

hive数据库基本概念和关系型数据库类似,如:库,表,列,分区。按照数据组织粒度由大到小说明:

1)数据库 Databases 。Database起到命名空间的功能,避免表,视图等定义的混乱,同时也为权限的定义及分配提供良好的隔离。在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹。

2)表 Tables 每个表包含一个主题信息,有多个属性字段组成的二维数据集合,一个数据库可以包含多张表。在hdfs中表现为db目录下的一个文件夹。

3)分区 Partitions 每个表可以有一个或多个分区键值,是数据的存储单元,可以按分区key划分查询数据范围,有效提高查询效率。比如可以按月和按天设计表分区,查询是指定查某天则不需要扫描整月数据。在hdfs中表现为table目录下的子目录 。

4)桶 Buckets 表分区还可以按照某几列hash进行划分,是更细粒度的数据范围。桶表就是对应不同的文件。在HDFS中表现为table/分区/00000_0…0000N_0。