hive架构与数据组织

  • Post author:
  • Post category:其他

目录

1.hive的产生背景

2.hive是什么?

3.hive的特点

4.数据库和数据仓库:

5.Hive架构

6.hive的数据组织

1、库

2、表

3、视图

4、数据存储


1.hive的产生背景

  • mr处理的问题大部分针对于hdfs上的结构化数据的处理,对于结构化数据最好的处理方式是sql。 很多mr程序就可以转换为简单的sql就可以解决。

  • hive就是针对hdfs上的结构化数据进行分析的数据仓库。
  • 那么问题来了—hive可不可以完全替代mr?

       不可以。hive只能替代mr中结构化数据,不过实际中也是结构化数据占多。

2.hive是什么?

hive是针对于hdfs的结构化数据进行离线分析的数据仓库。底层数据存在hdfs上,上层的计算引擎依赖于mr ,hive将sql语句转换为mr程序。(mr执行的时候需要yarn做调度)

hive实质是一款基于hdfs的mapreduce计算框架,对存储在hdfs中的数据进行分析和管理。

3.hive的特点

  • Hive 由 Facebook 实现并开源
  • 是基于 Hadoop 的一个数据仓库工具
  • 可以将结构化的数据映射为一张数据库表

hive仅仅相当于一个hdfs上的结构化数据管理的工具,将hdfs上的结构化数据映射为一张二维表

hdfs:一行数据——一条数据

字段——数据库列

  • 并提供 HQL(Hive SQL)查询功能,hql:方言版sql
  • 底层数据是存储在 HDFS 上

hive仅仅相当于hdfs上数据的管理者,二维表形式进行

元数据概念:描述表信息的数据,用于记录hive上表的信息的数据

    包括:表关联的hdfs数据路径,表的结构,表的字段等等

hive的元数据用关系型数据库存储的,默认的使用的是derby数据库,一般情况下我们都会进行修改,改为mysql数据库进行元数据存储。

  • Hive的本质是将 SQL 语句转换为 MapReduce 任务运行

hive底层会保存很多map和reduce的模板 当执行sql语句的时候 就会将sql 解析为mr

  • 使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据
  • 适用于离线的批量数据计算。

4.数据库和数据仓库:

1.概念:

数据库更倾向于管理精细化数据,分库分表,不同的业务模块的数据存储在不同的库中,有事物的概, 用于存储结果数据

数据仓库更像一个箱子,什么都可以存储,进行数据的管理

2.使用:

数据库:sql 标准sql hbase:nosql

数据仓库:hive hql(sql的方言版)

3.用途上:

数据库:oltp On-Line Transaction Processing 增删改

数据仓库:olap On-Line analysis Processing 查询操作

hive中根本不支持delete update 支持insert 但性能不高

4.模式:

数据库:写模式

数据仓库:读

5.数据量上:

mysql/oracle/sql server:集中式

hive:分布式存储

5.Hive架构

  1. 用户接口层:

1)vcli 客户端 shell

采用交互形式使用hive命令行与hive进行交互,最常用(学习,调式,生产)

2)jdbc/odbc

是hive的基于JDBC操作提供的客户端,用户(开发员,运维人员)通过这连接至Hive service服务

3)Web ui 不用

通过浏览器访问hive

    2.元数据存储

元数据:记录hive中表(数据)的描述信息

默认derby数据库 缺点:不适合多用户操作,并且数据存储目录不固定,数据跟着hive走,不方便管理。

生产中改成mysql

Hive和Mysql之间通过MetaStore服务交互

    3.核心驱动层

利用hql进行驱动。

驱动器:

    驱动整个hql的运行过程 hql-mr 对程序进行提交

编译器:

    将hql翻译成mapreduce程序,hive的底层存储了很多的map reduce模板

将hql语句翻译成map reduce模板 进行运行

优化器:

    编译器编译的时候仅仅是将hql转化为mr程序,没有从性能上考虑,不一定是最 优的方案。优化器进行优化,将重复的mr程序进行合并,最终达到一个最优的最 简单的优化方案。

(select * from stu) a join (select * from stu) b on ……

执行器:

    将最终的优化的结果进行提交

    4.Thrift Server

Thrift是Facebook开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口

6.hive的数据组织

1、库

跟Mysql中的库的概念一样,细化管理数据

2、表

内建表/内部表/管理表

外部表

分区表

分桶表

  • 内部表和外部表

    内部表和外部表是相互对立的概念,没有一个表既是内部表也是外部表

    本质区别:(笔试)(Hive中的数据包括2种:原始数据+元数据(必须有))

    内部表在进行删除表的时候,原始数据(hdfs)和元数据(mysql)一并删除

    外部表在进行删除的时候,仅仅删除元数据,原始数据不删除

    注意:外部表一般情况下有公共数据的时候使用

    内部表:MANAGED_TABLE 默认情况下建的表都是内部表

    外部表:EXTERNAL_TABLE 建外部表需要加关键字 external

  • 分区表:

不同mr中的分区的概念

作用: 便于数据查询,减小查询的扫描范围,提升查询性能

hive的分区,就等于是细化管理一张表的所有数据。

// 普通表:(全盘扫描)

/user/hive/warehouse/mydb.db/person/beijing.txt   全国数据

//分区表:(仅仅会扫描北京这一个目录)

/user/hive/warehouse/mydb.db/person/city=beijing/beijing.txt  数据存在不同的目录下

/user/hive/warehouse/mydb.db/person/city=tianjin/tianjin.txt

  • 分桶表:(对应mr中分区的概念,哈希)

结果数据存在不同的文件中

注意:分桶表是全表查询

/user/hive/warehouse/mydb.db/student/beijing.txt_1

/user/hive/warehouse/mydb.db/student/beijing.txt_2

或这样写更明白

/user/hive/warehouse/mydb.db/student/part-r-00000

/user/hive/warehouse/mydb.db/student/part-r-00001

分桶表作用:

  1. 提升抽样性能
  2. 提升join性能(连接查询的效率)

注意:(面试)

1、分区: 表示把数据分类, 分割开来进行存储

2、分桶: 跟MapReduce中的HashParititoner一模一样

3、视图

create view as select id,name from student limit 10;

  • 视图:代表的是一条查询语句,这条查询语句的快捷方式
  1. 物化视图:

将视图代表的查询语句进行执行 获取执行结果 将结果存储在视图中

     2. 逻辑视图:

仅仅存储的是sql语句 没有执行 逻辑视图的执行是在查询视图的时候进行执行 select * from my_view;

  • hive中没有物化视图,只有逻辑视图

select * from (select id,name from student limit 10);

视图的作用提高sql语句的可读性 方便读取

  • 注意:视图在性能上没有作用

4、数据存储

     1. 真实数据存储的位置

Hive中的数据,是存储在HDFS上的某个目录中的。hive的数据存储在HDFS上,有一个统一的目录,这个目录可以改变。

  • 在没有配置的情况下:

默认的hive数据仓库在HDFS上的根路径:/user/hive/warehouse

  • 可配置存储路径,可更改hive-site.xml文件:

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/user/myhive/warehouse</value>

<description>hive default warehouse, if nessecory, change it</description>

</property>

     2.元数据存储的位置—mysql

  • 更改hive-site.xml文件:

<property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://localhost:3306/myhive?createDatabaseIfNotExist=true</value>

</property>

此处配置的元数据的存储:mysql的myhive数据库

  • mysql的myhive数据库中的表介绍

DBS:描述数据库信息的

一个数据库代表一条数据

TBLS:存储的表的相关信息 表名 表所属数据库

一个表 — 一条数据

COLUMNS_V2:表字段描述信息

最后一个字段代表数据的顺序索引

元数据存储在mysql中的

元数据可以修改,但是一定不要修改,一旦修改元数据,影响底层的表结构 可能造成数据会被修改


版权声明:本文为qq_42994177原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。