一文秒懂Hive的两个组件Hiveserver2和Metastore server访问元数据的关系?及Cli命令行和beeline的关系

Hive不是数据库,不是数据库,不是数据库!

一、Hive架构原理

一文秒懂Hive的两个组件Hiveserver2和Metastore server访问元数据的关系?及Cli命令行和beeline的关系_第1张图片

1用户接口:Client

CLI(command-line interface)、JDBC/ODBC(jdbc访问hive)、WEBUI(浏览器访问hive)

2元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;

默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore

3Hadoop

使用HDFS进行存储,使用MapReduce进行计算。

4驱动器:Driver

(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。

(3)优化器(Query Optimizer):对逻辑执行计划进行优化。

(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

二、元数据用什么数据库存储?

1、默认是Derby数据库

Derby是一个完全用java编写的数据库,非常小巧,核心部分derby.jar只有2M,所以既可以做为单独的数据库服务器使用,也可以内嵌在应用程序中使用。其优缺点具体如下:

       1、Derby定位是小型数据库, 特别是嵌入式. 支持的数据库小于50GB, 对于小型网站, 事务不复杂的应用, 使用它的还是很不错的. 另外大型桌面应用也可以用它来保存配置和其他数据, 可以做到与文件格式无关, 因为都是访问数据库.

       2、功能: Derby支持标准SQL92, SQL1999, SQL2003, 支持临时表, 索引, 触发器, 视图, 存储过程, 外键, 约束, 并行, 事务, 加密与安全等. 只要有JDK(>=1.3), 就可以运行Derby.

       3、安全性:Derby的安全性也做得很到位, 包括用户鉴权和加密解密.

       4、性能:Derby的性能也是不错的.在插入100万条记录时, CPU的占用率一直低于40%, 平均每插一条记录耗时小于0.3毫秒. 这对于满足桌面应用程序是绰绰有余的. 但是比Oracle、MySql等专业数据库性能要低。

2、一般改用Mysql或者Oracle数据库(如何配置)

1)拷贝驱动

将MySQL的JDBC驱动拷贝到Hive的lib目录下

[user001@hadoop102 software]$ cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib

2) 配置Metastore到MySql

在$HIVE_HOME/conf目录下新建hive-site.xml文件

[atguigu@hadoop102 software]$ vim $HIVE_HOME/conf/hive-site.xml

添加如下内容

    

    

        javax.jdo.option.ConnectionURL

        jdbc:mysql://hadoop102:3306/metastore?useSSL=false

 

    

    

        javax.jdo.option.ConnectionDriverName

        com.mysql.jdbc.Driver

 

    

        javax.jdo.option.ConnectionUserName

        root

    

 

    

    

        javax.jdo.option.ConnectionPassword

        123456

    

    

    

        hive.metastore.warehouse.dir

        /user/hive/warehouse

    

    

    

    

        hive.server2.thrift.port

        10000

    

   

    

        hive.server2.thrift.bind.host

        hadoop102

 

    

    

        hive.metastore.uris

        thrift://hadoop102:9083

    

    

    

        hive.metastore.event.db.notification.api.auth

        false

    

        hive.metastore.schema.verification

        false

 

    hive.server2.active.passive.ha.enable

    true

 

三、Hiveserver2和Metastore server的关系

hiveServer2和metaStore其实都是hive本身带的组件,那么两者究竟有什么不同呢?

  • metaStore:hive的metaStore提供的是一个服务,而这个服务就是将hive的元数据暴露出去,而不是需要通过对hive元数据库mysql的访问才能拿到hive的元数据信息;metastore服务实际上就是一种thrift服务,通过它我们可以获取到hive原数据,并且通过thrift获取原数据的方式,屏蔽了数据库访问需要驱动,url,用户名,密码等等细节
  • hiveServer2: HiveServer2(HS2)是一个服务端接口,使远程客户端可以执行对Hive的查询并返回结果。目前基于Thrift RPC的实现是HiveServer的改进版本,并支持多客户端并发和身份验证, 启动hiveServer2服务后,就可以使用jdbc,odbc,或者thrift的方式连接

小结:

1.HiveServer2和MetaStore本质上都是Thrift Service,虽然可以启动在同一个进程内,但不建议这么做。建议是拆成不同的服务进程来启动。
 2.一般来讲,我们认为HiveServer2是用来提交查询的,也就是用来访问数据的。而MetaStore才是用来访问元数据的。
如果你把两者混了,起在同一个进程内,就会产生你的问题类的疑问。
 3.CliDriver是SQL本地直接编译,然后访问MetaStore,提交作业,是重客户端。
   BeeLine是把SQL提交给HiveServer2,由HiveServer2编译,然后访问MetaStore,提交作业,是轻客户端。
 4.具体写业务脚本两种都行,数据量大的话,建议用CliDriver

四、cli和beeline区别

1.cli是通过metaServer访问元数据的
2.beeline是通过hiverserver2访问元数据的

bin/hivecli命令行的方式访问元数据  --访问--> metaStore server --访问-->MySQL

  bin/beelinejdbc的方式访问元数据 --访问-->hiveServer2 --访问--> metaStore server --访问--> MySQL

一文秒懂Hive的两个组件Hiveserver2和Metastore server访问元数据的关系?及Cli命令行和beeline的关系_第2张图片

 

你可能感兴趣的:(hive,数据库,大数据,java,mysql)