hive核心基本概念

  1. 云栖社区>
  2. 博客>
  3. 正文

hive核心基本概念

业余草 2018-09-20 14:03:04 浏览305 评论0

摘要: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/82785696 1.

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/82785696

1.什么是hive


基于 Hadoop 的一个数据仓库工具:
hive本身不提供数据存储功能,使用HDFS做数据存储,
hive也不分布式计算框架,hive的核心工作就是把sql语句翻译成MR程序
hive也不提供资源调度系统,也是默认由Hadoop当中YARN集群来调度
可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能

2.hive和Hadoop关系

 

Hive利用HDFS存储数据,利用MapReduce查询数据

3.hive和传统数据库的区别

总结:hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析

4.hive数据的存储

1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)

2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

²  db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹

²  table:在hdfs中表现所属db目录下一个文件夹

²  external table:与table类似,不过其数据存放位置可以在任意指定路径

²  partition:在hdfs中表现为table目录下的子目录

²  bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件

5.hive架构

 

Hive架构,Driver是核心,Driver可以解析语法,最难的就是解析sql的语法,只要把SQL的语法解析知道怎么做了,它内部用MapReduce模板程序,它很容易把它组装起来,比如做一个join操作,最重要的是识别语法,认识你的语法,知道你语法有什么东西,解析出来会得到一个语法树,根据一些语法树,去找一些MapReduce模板程序,把它组装起来

例如:有二个表去join,内部有一个优化机制,有一个默认值,如果小表小于默认值,就采用map—join ,如果小表大于默认值,就采用reduce——join(其中map——join是先把小表加载到内存中),组装时候就是输入一些参数:比如:你的输入数据在哪里,你的表数据的分隔符是什么,你的文件格式是什么:然而这些东西是我们建表的时候就指定了,所以这些都知道了,程序就可以正常的跑起来

Hive有了Driver之后,还需要借助一个非常重要的东西,他就是Metastore,Metastore里边记录了hive中所建的:库,表,分区,分桶他的一些信息,描述信息都在Metastore,如果用了MySQL作为hive的Metastore:需要注意的是:你建的表不是直接建在MySQL里边了,而是把这个表的很多描述信息分在了MySQL里边记录了,什么tables表,字段表。你建的hive里边的表存在HDFS上,hive会自动把他的目录规划/usr/hive/warehouse/库文件/库目录/表目录  你的数据就在目录下,

 6.内部表和外部表

内部表:删除表的时候,会删除元数据和数据

外部表:删除表的时候,只删除元数据,不删除数据        

内部表和外部表使用场景

 7.分桶

 

         分桶操作:按照用户创建表时指定的分桶字段进行hash散列

         跟MR中的HashPartitioner的原理一模一样

         MR中:按照key的hash值去模除以reductTask的个数

         Hive中:按照分桶字段的hash值去模除以分桶的个数

         hive分桶操作的效果:

         把一个文件按照某个特定的字段和桶数 散列成多个文件

         好处:

         1、方便抽样

         2、提高join查询效率   

8.分区

Hive分区表的作用:让你做统计的时候少统计,把我们的数据放在多个文件夹里边,我们统计时候,可以指定分区,这样范围就会小一些,这样就减少了运行的时间

9 .简短理解Hive概念


Hive是由Facebook开源
Hive是基于Hadoop的一个开源数据仓库工具
能够将结构化数据映射成为一张数据库表(二维表),提供类SQL查询语言(支持绝大多数SQL标准语法)
底层依赖于HDFS存储数据,Hive的本质是HQL语句转化成MR程序,提交给Hadoop运行
Hive的适应场景:只适合做海量离线数据的统计分析

Hive核心组件
解释器:把HQL语句转换成一颗抽象语法树
编译器:把抽象语法树转换成一系列MR程序
Hive的底层有一系列的MR模板(Operation:GroupByOperation, JoinOperation)
优化器:执行这一系列MR程序的优化
执行器:组织相应的资源提交给Hadoop集群

10.Hive 的所有跟数据相关的概念


db: myhive,   table: student     元数据:hivedb

1、Hive的元数据
指的是 myhive 和 student等等的库和表的相关的各种定义信息
该元数据都是存储在mysql中的

myhive是hive中的一个数据库的概念,其实就是HDFS上的一个文件夹,跟mysql没有多大的关系
myhive是hive中的一个数据库,那么就会在元数据库hivedb当中的DBS表中存储一个记录
这一条记录就是myhive这个hive中数据的相关描述信息

其实,hive中创建一个库,就相当于是在hivedb中DBS中插入一条记录, 并且在HDFS上建立相应的目录

其实,hive中创建一个表,就相当于在hivedb中TBLS表中插入一条记录,并且在HDFS上项目的库目录下创建一个子目录

一个hive数据数据仓库就依赖于一个RDBMS中的一个数据库,一个数据库实例对应于一个Hive数据仓库

存储于该hive数据仓库中的所有数据的描述信息,都统统存储在元数据库hivedb中

myhive 和  hivedb的区别:

myhive是hive中的数据库: 用来存储真实数据
hivedb是mysql中的数据库: 用来多个类似myhive库的真实数据的描述数据

2、Hive的原数据
3、Hive的源数据

存储在hive数据仓库中的真实数据  student.txt

元数据 : 一定指跟 hivedb相关,跟mysql相关
数据: HDFS上的对应表的目录下的文件

HDFS上的数据和元数据

数据:block块
元数据:描述和管理这些block信息的数据, 由namenode管理

业余草微信公众号

感谢您的关注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

【云栖快讯】一站式开发者服务,海量学习资源免费学  详情请点击

网友评论