Hive体系结构(一)架构与基本组成
Hive体系结构(二)Hive的执行原理、与关系型数据库的比较
Hive体系结构(三)元数据库与基本操作
Hive体系结构(四)注意事项与扩展特性

1 Hive的体系结构划分

下面是Hive的架构图:

1. 用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。
2. Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
3. 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
4. Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

2 连接到数据库的模式

2.1 单用户模式

此模式连接到一个In-memory 的数据库Derby,一般用于Unit Test。

2.2 多用户模式

通过网络连接到一个数据库中,是最经常使用到的模式。

2.3 远程服务器模式

用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。

3 Hive的数据模型

对于数据存储,Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。

Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图。

Hive中包含以下数据模型:Table内部表,External Table外部表,Partition分区,Bucket桶。Hive默认可以直接加载文本文件,还支持sequence file 、RCFile。

3.1 Hive数据库

类似传统数据库的DataBase,在第三方数据库里实际是一张表。简单示例命令行 hive > create database test_database;

3.2 内部表

Hive的内部表与数据库中的Table在概念上是类似。每一个Table在Hive中都有一个相应的目录存储数据。例如一个表pvs,它在HDFS中的路径为/wh/pvs,其中wh是在hive-site.xml中由${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的Table数据(不包括External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除。

内部表简单示例:

创建数据文件:test_inner_table.txt
创建表:create table test_inner_table (key string)
加载数据:LOAD DATA LOCAL INPATH 'filepath' INTO TABLE test_inner_table
查看数据:select * from test_inner_table;  select count(*) from test_inner_table
删除表:drop table test_inner_table

3.3 外部表

外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在LOCATION后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该链接。

外部表简单示例:

创建数据文件:test_external_table.txt
创建表:create external table test_external_table (key string)
加载数据:LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table
查看数据:select * from test_external_table;
select count(*) from test_external_table
删除表:drop table test_external_table

3.4 分区

Partition对应于数据库中的Partition列的密集索引,但是Hive中Partition的组织方式和数据库中的很不相同。在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中。

例如pvs表中包含ds和city两个Partition,则对应于ds = 20090801, ctry = US 的HDFS子目录为/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的HDFS子目录为/wh/pvs/ds=20090801/ctry=CA。

分区表简单示例:

创建数据文件:test_partition_table.txt
创建表:create table test_partition_table (key string) partitioned by (dt string)
加载数据:LOAD DATA INPATH 'filepath' INTO TABLE test_partition_table partition (dt='2006')
查看数据:select * from test_partition_table;  select count(*) from test_partition_table
删除表:drop table test_partition_table

3.5 桶

Buckets是将表的列通过Hash算法进一步分解成不同的文件存储。它对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。

例如将user列分散至32个bucket,首先对user列的值计算hash,对应hash值为0的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00000;hash值为20的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00020。如果想应用很多的Map任务这样是不错的选择。

桶的简单示例:

创建数据文件:test_bucket_table.txt
创建表:create table test_bucket_table (key string) clustered by (key) into 20 buckets
加载数据:LOAD DATA INPATH 'filepath' INTO TABLE test_bucket_table
查看数据:select * from test_bucket_table;
set hive.enforce.bucketing = true;

3.6 Hive的视图

视图与传统数据库的视图类似。视图是只读的,它基于的基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。

如果不指定视图的列,会根据select语句后的生成。
示例:

create view test_view as select * from test

Hive体系结构(一)架构与基本组成相关推荐

  1. Hive体系结构(四)注意事项与扩展特性

    Hive体系结构(一)架构与基本组成 Hive体系结构(二)Hive的执行原理.与关系型数据库的比较 Hive体系结构(三)元数据库与基本操作 Hive体系结构(四)注意事项与扩展特性 1. 使用HI ...

  2. Hive体系结构(三)元数据库与基本操作

    Hive体系结构(一)架构与基本组成 Hive体系结构(二)Hive的执行原理.与关系型数据库的比较 Hive体系结构(三)元数据库与基本操作 Hive体系结构(四)注意事项与扩展特性 1. Hive ...

  3. Hive体系结构(二)Hive的执行原理、与关系型数据库的比较

    Hive体系结构(一)架构与基本组成 Hive体系结构(二)Hive的执行原理.与关系型数据库的比较 Hive体系结构(三)元数据库与基本操作 Hive体系结构(四)注意事项与扩展特性 1. Hive ...

  4. Hive体系结构介绍

    http://www.aboutyun.com/thread-6217-1-1.html   1.Hive架构与基本组成 下面是Hive的架构图. 图1.1 Hive体系结构     Hive的体系结 ...

  5. Hive总结(九)Hive体系结构

    1.Hive架构与基本组成 下面是Hive的架构图. 图1.1 Hive体系结构     Hive的体系结构可以分为以下几部分: (1)用户接口主要有三个:CLI,Client 和 WUI.其中最常用 ...

  6. 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】

    [软件体系结构]架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding 博士 - 唐雕 - 博客园

  7. 深入浅出学Hive:Hive体系结构

    第一部分:概念 概念 •用户接口:用户访问Hive的入口 •元数据:Hive的用户信息与表的MetaData •解释器:分析翻译HQL的组件 •编译器:编译HQL的组件 •优化器:优化HQL的组件 第 ...

  8. 体系、体系结构与架构

    体系,泛指部分组合而成的整体,是不同系统组成的系统. 体系强调部分与整体的关系: 系统体系结构是一个综合模型,系统体系结构是由许多结构要素及各种视图(或观点)(View)所组成的:所以,系统体系结构是 ...

  9. 一篇文章搞懂 Hive 的系统架构

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

最新文章

  1. 依赖注入框架Autofac学习笔记
  2. Nginx 反向代理工作原理简介与配置详解
  3. jni releative
  4. 导出excel——入门
  5. qt android 对话框,Qt自定义Dialog
  6. l298n电机哪一端为正_一文详解电机倒顺开关接法!
  7. Android项目笔记整理(1)
  8. 18春东师计算机应用基础,东师计算机应用基础18春在线作业31.docx
  9. 网站正在建设中提示页面设计欣赏
  10. 玩转mini2440开发板之【64位Ubuntu系统无法运行arm-linux-gcc】
  11. HAProxy介绍及配置文件详解
  12. 日语学习-多邻国-平假名3
  13. inner join,left join,right join 三者的用法
  14. PHPExcel生成或读取excel文件
  15. 网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?...
  16. python找到长度最长的单词长度,python中的正则表达式:查找长度为n或更长的单词...
  17. STM32 DAP仿真器使用 F103系列
  18. 51nod 1535 深海探险【思维+并查集】
  19. R语言学习记录:unique()函数
  20. scratch编程石头剪刀布

热门文章

  1. map()和zip()操作
  2. HDU1756(判断点在多边形内外)
  3. 任意模数NTT(MTT)
  4. ADO学习(九)如何阅读ADO文档
  5. 云原生网络代理(MOSN)的进化之路
  6. python中内置的数据结构有几种?
  7. Java 14 发布了,终于可以扔掉Lombok了?
  8. 低至4.7折起!戴尔OptiPlex商用台式机限时特惠,重磅来袭!
  9. 平均 3000-20000 块不等,有空接外包私活的入群!
  10. 你了解HTTPS工作原理吗?