转载来自:

https://blog.csdn.net/qq_40990732/article/details/80914873

https://blog.csdn.net/tp15868352616/article/details/80891057

相关概念

1.Metadata概念:

元数据包含用Hive创建的database、table等的元信息。元数据存储在关系型数据库中。如Derby、MySQL等。

2.Metastore作用:

客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

bin/hin --访问--> metaStore server --访问-->MySQL
    beeline --访问-->hiveServer2 --访问--> metaStore server --访问--> MySQL

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)

  • hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中.内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。
  • 这个是默认的,配置简单,但是一次只能一个客户端连接(这句话说实在有点坑,其实就是你启动一个hive服务会内嵌一个metastore服务,然后在启动一个又会内嵌一个metastore服务,并不是说你的客户端只能启动一个hive,是能启动多个,但是每个都有metastore,浪费资源),适用于用来实验,不适用于生产环境。

2、本地模式(Local):本地安装mysql 替代derby存储元数据

    • 不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以同一台机器,也可以在远程机器上。(我之前有种方式是:只在接口机配置hive,并配置mysql数据库,用户和密码等;但是集群不配置hive,不起hive任何服务,就属于这种情况)

    • 这种方式是一个多用户的模式,运行多个用户client连接到一个数据库中。这种方式一般作为公司内部同时使用Hive。每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者需要知道MySQL的用户名和密码才行。

    • 服务端配置如下: 

<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property> <property>
<name>hive.metastore.local</name>
<value>true</value>
</property> <property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>
</property>
或者 jdbc:mysql://ip:3306/hive?characterEncoding=UTF-8(推荐这个。不会web,不然两个参数都给加上。。。。) <property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property> <property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property> <property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
</configuration>

3、远程模式(Remote): 远程安装mysql 替代derby存储元数据

  • Hive服务和metastore在不同的进程内,可能是不同的机器(集群实例来说metastore有3个,启动在三台机器,但是都是指向的一台主机的mysql,当然mysql也能配置成主备集群的模式),该模式需要将hive.metastore.local设置为false(但是在0.10 ,0.11或者之后的HIVE版本 hive.metastore.local 属性不再使用。),将hive.metastore.uris设置为metastore服务器URL,

  • 远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。将metadata作为一个单独的服务进行启动。各种客户端通过beeline来连接,连接之前无需知道数据库的密码。

  • 仅连接远程的mysql并不能称之为“远程模式”,是否远程指的是metastore和hive服务是否在同一进程内.

  • 服务端配置如下:

<configuration>

<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property> <property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.214:3306/hive_remote?createDatabaseIfNotExist=true</value>
</property> <property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property> <property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property> <property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property> <property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
但是在0. ,.11或者之后的HIVE版本 hive.metastore.local 属性不再使用。 <property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.1.188:9083</value>
</property> </configuration>

附:远程模式下,hive客户端配置:

(1)hive-site.xml

<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive服务端ip:9083</value>
</property>
</configuration>

(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同时存在在该进程中,资源占用率下降,查询速度更快。

Hive为什么要启用Metastore?的更多相关文章

  1. hive安装--设置mysql为远端metastore

    作业任务:安装Hive,有条件的同学可考虑用mysql作为元数据库安装(有一定难度,可以获得老师极度赞赏),安装完成后做简单SQL操作测试.将安装过程和最后测试成功的界面抓图提交 . 已有的当前虚拟机 ...

  2. Hive Metastore 代码简析

    1.  hive metastore 内部结构 1.1 包结构 从package结构来看,主要的5个package,让我们来看看这几个package的内容 (1) metastorepackage是m ...

  3. hive0.13.1安装-mysql server作为hive的metastore

    hive0.13.1在hadoop2.4.1伪分布式部署上安装过程 环境:redhat enterprice 6.5 +hadoop2.4.1+hive0.13.1+mysql单节点伪分布式部署 相关 ...

  4. Hive MetaStore Upgrade

    # cd $HIVE_HOME/scripts/metastore/upgrade/mysql [Dev root @ sd-9c1f-2eac /usr/local/src/apache-hive- ...

  5. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  6. Hive介绍、安装(转)

    1.Hive介绍 1.1 Hive介绍 Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据.它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语 ...

  7. Hadoop第9周练习—Hive部署测试(含MySql部署)

    1.1 2 :搭建Hive环境 内容 2.2 3  运行环境说明 1.1  硬软件环境 线程,主频2.2G,6G内存 l  虚拟软件:VMware® Workstation 9.0.0 build-8 ...

  8. Hive[2] 基础介绍

    2.3 Hive 内部介绍: P44 $HIVE_HOME/lib 下的 jar 文件是具体的功能部分:(CLI模块) 其它组件,Thrift 服务,可以远程访问其他进程功能:也有使用 JDBC 和 ...

  9. Centos搭建mysql/Hadoop/Hive/Hbase/Sqoop/Pig

    目录: 准备工作 Centos安装 mysql Centos安装Hadoop Centos安装hive JDBC远程连接Hive Hbase和hive整合 Centos安装Hbase 准备工作: 配置 ...

随机推荐

  1. centos 7 下的 service部署

    在centos 7下部署service一般涉及到jar包部署, service脚本. 数据存贮路径, log存贮路径 jar包部署 /usr/local/app/app1/app1.jar servi ...

  2. 10个最好的免费PS图象处理软件方案

    说到照片和图像编辑/操纵,真的没有更好的应用,Adobe PS图象处理软件. 摄影师和创意工作室会同意这是总理的照片编辑应用期. 不幸的是,PS图象处理软件还配备了一个陡峭的学习曲线和价格标签,我们必 ...

  3. idea 使用正则表达式 进行匹配替换

    关于正则表达式 可以参考相应的笔记 另外 如果要提取正则表达式中匹配到的内容,使用$1 - $... 按顺序取(第一个表达式 到 第N个表达式匹配到的数据),  这点和linux正则获取的方式是一样的

  4. C语言 · 猜算式 · 乘法竖式

    题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273 x   15 ------ 1365 273 ------ 4095 请你观察如下的乘法算式 *** x   *** ------- ...

  5. 24小时学通Linux内核之调度和内核同步

    心情大好,昨晚我们实验室老大和我们聊了好久,作为已经在实验室待了快两年的大三工科男来说,老师让我们不要成为那种技术狗,代码工,说多了都是泪啊,,不过我们的激情依旧不变,老师帮我们组好了队伍,着手参加明 ...

  6. 如何用AJax提交name[]数组?

    https://www.cnblogs.com/junzilan/p/5424120.html

  7. C++学习 —— 重新认识C++

    我大概是从读研究生入学那天开始,想要学好C++的,学习C++几乎也成了我每个学期的计划之一.为什么会每个学期都想要学好C++呢?因为每次学习都失败了啊... 本月,我开始再Coursera上学习Het ...

  8. iOS - 记住用户登录状态保存用户名密码

    我们在使用APP时常用的一个功能:用户第一次进入APP时自动进入登录注册页,提示用户注册登录,用户登录成功后才进入主页,再次进入APP时,不用再次登录就直接进到主页了,就算杀掉该APP进程再次进入,依 ...

  9. linux基础操作1

    date #查看日期cal #查看当月日历cal 2017 #查看某年全年的日历whoami #查看当前登录的用户 #修改网卡,可以上网的步骤vi /etc/sysconfig/network-scr ...

  10. OOD之问题空间到解空间—附FP的建模

    通常会被问到,什么事OOD,然后大部分人期待的答案比较死板,继承.封装.多态!懂这个的人多的去了,有什么好问?回答出来的人是否拿着Java又去做一些面向过程的勾当? 计算机革命起源于机器,因此编程语言 ...