Hive基础知识学习

Hive基础知识学习

[日期:2012-09-25] 来源:Linux社区  作者:zuochanxiaoheshang [字体: ]

转自: http://www.linuxidc.com/Linux/2012-09/71216.htm
1.Hive是什么

按照我的理解,Hive是一个中间工具。它的主要作用是将HQLHive Query Language)转换为一系列的MapReduce Job,利用Hadoop框架对数据进行类SQL处理。他的主要功能是在Hadoop框架上提供一个类SQL中间层,简化在Hadoop框架上实现SQL功能程序的编写。

请思考一下,为了实现这个功能,Hive应该具备什么功能?

1) 首先,Hive需要提供一种功能,将待处理的数据加载到HDFS当中。之所以要提供这种功能,是因为,Hadoop想要充分发挥其分布式特性,就需要底层分布式文件系统HDFS的支持。因此,只有将数据保存在HDFS当中才能充分发挥Hadoop的优势。

2) 其次,Hive将数据加载到HDFS之后,需要提供对数据进行组织管理的功能。如果不提供数据的组织管理功能,那么其跟HDFS存储文件没有区别。

3) 第三,Hive提供将HQLHive Query Lanuage)转化成MapReduce Job的功能。

2.Hive数据加载

HiveRDBMS一样,将数据组织成表的模式,至于怎么组织,下面进行详细介绍。现在只要在脑海中有表的概念就可以了。

对于功能一,实现比较简单。对于加载数据到HDFSHive采用的是“读时模式”。跟“读时模式”相对应的是“写时模式”。RDBMS一般采用“写时模式”。RDBMS在往数据库写入数据时,其会检查一条记录是否合法,比如,列属性是否一致、是否超过长度或者范围等等。而“读时模式”在加载数据的时候并不进行这些检查,直接将数据加载到HDFS当中(说直白点这跟往HDFS存放一个文件并没有区别)。当Hive读数据的时候,会按照格式进行数据的检查。Hive为什么会采用这种模式,我认为可能是有以下几个原因:首先,采用“读时模式”可以加快数据加载的速度。其次,采用“读时模式”可以方便的进行数据处理。因为数据的模式是在读取数据的时候确定的,因此可以根据应用需求的不同定义不同的模式,方便分析型应用使用数据。

3.Hive数据组织

3.1 元数据

Hive在逻辑上将数据组织为表的形式(因为,Hive在数据加载并不进行数据检验,这就要求用户写入的数据确实符合用户想要的表结构)。既然是表结构,那么就需要定义的表的模式(即Schema)。Hive同样需要Schema,但是与数据文件不同的是,HiveSchema存储在metastore当中,metastore为关系型数据库(RDBMS)。之所以采用RDBMS作为schema的存储,主要是为了加快schema的存取速度,减少延迟。

3.2 数据文件

说完元数据,我们再说一下数据文件的存储。最简单的方法,数据直接以文件的格式存放在Hadoop的文件系统当中,包括(HDFSamazon’s s3local file system等)。但是为了加快数据存取速度,Hive采用了一些技巧加强对数据组织、存放的管理。

分区

Hive可以对数据按照某列或者某些列进行分区管理,所谓分区我们可以拿下面的例子进行解释。

当前互联网应用每天都要存储大量的日志文件,几G、几十G甚至更大都是有可能。存储日志,其中必然有个属性是日志产生的日期。在产生分区时,就可以按照日志产生的日期列进行划分。把每一天的日志当作一个分区。

将数据组织成分区,主要可以提高数据的查询速度。至于用户存储的每一条记录到底放到哪个分区,由用户决定。即用户在加载数据的时候必须显示的指定该部分数据放到哪个分区。

对于每一个表(table)或者分区,Hive可以进一步组织成桶。Hive也是针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。采用桶能够带来一些好处,比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/683736

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。