相关概念
1.Metadata概念:
元数据包含用Hive创建的database、table等的元信息。元数据存储在关系型数据库中。如Derby、MySQL等。
2.Metastore作用:
客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。
3.Metastore 有3中开启方式:
--1-->默认开启方式:
没有配置metaStore的时候,每当开启bin/hive;或者开启hiveServer2的时候,都会在内部启动一个metastore
嵌入式服务;资源比较浪费,如果开启多个窗口,就会存在多个metastore server。()
--2-->local mataStore(本地)
当metaStore和装载元数据的数据库(MySQL)存在同一机器上时配置是此模式,
开启metastore服务就只需要开启一次就好,避免资源浪费!
--3-->Remote Metastore(远程)
当metaStore和装载元数据的数据库(MySQL)不存在同一机器上时配置是此模式,
开启metastore服务就只需要开启一次就好,避免资源浪费!
Metastore三种配置方式
由于元数据不断地修改、更新,所以Hive元数据不适合存储在HDFS中,一般存在RDBMS中。
1、内嵌模式(Embedded)
2、本地模式(Local):本地安装mysql 替代derby存储元数据
hive.metastore.warehouse.dir
/user/hive_remote/warehouse
hive.metastore.local
true
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true
或者 jdbc:mysql://ip:3306/hive?characterEncoding=UTF-8(推荐这个。不会web,不然两个参数都给加上。。。。)
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hive
javax.jdo.option.ConnectionPassword
password
3、远程模式(Remote): 远程安装mysql 替代derby存储元数据
hive.metastore.warehouse.dir
/user/hive/warehouse
javax.jdo.option.ConnectionURL
jdbc:mysql://192.168.1.214:3306/hive_remote?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hive
javax.jdo.option.ConnectionPassword
password
hive.metastore.local
false
但是在0.10 ,0.11或者之后的HIVE版本 hive.metastore.local 属性不再使用。
hive.metastore.uris
thrift://192.168.1.188:9083
附:远程模式下,hive客户端配置:
(1)hive-site.xml
hive.metastore.uris
thrift://hive服务端ip:9083
(2)配置日志存放位置:配置文件为hive-log4j.properties.template
修改如下:
hive.log.dir=/opt/beh/log/hive
或者修改为:
hive.log.dir=/opt/beh/logs/hive/${user.name}
这样对于同一台机器不同的用户可以把日志动态写入各自用户目录下,前提是/opt/beh/log/hive权限足够:rwx
重点:hive-log4j.properties.template要修改为hive-log4j.properties不然无法识别。
(3)服务端metastore 启动方式:
第一种:hive --service metastore-p 9083 &
第二种:在hive-site.xml中配置hive.metastore.uris,指定端口,然后直接 hive --service metastore
(4)对比测试:(客户端主机2*6C,128Gmem)
=======我之前是本地模式,集群不配置hive,不启动hive metastore,直接在客户端配置链接数据库,使用用户名和密码,然后启动hive执行命令查看如下:
简单的showdatabase 执行时间为:3.29s ,费时
cpu损耗较大:178%
=======后来配置了远程模式,在集群配置了hive,并后台运行了metastore,然后配置客户端连接metastore后,测试如下:
简单的showdatabase 执行时间为:0.8s,明显快了很多
cpu损耗:74.8% 少了一倍
总结:为什么集群要启用metastore,因为启用后,直接bin/hive启动进程,只会有hive交互式客户端一个服务,不会再有metastore同时存在在该进程中,资源占用率下降,查询速度更快。