《Hive编程指南》一第1章 基础知识

第1章 基础知识

Hive编程指南
从早期的互联网主流大爆发开始,主要的搜索引擎公司和电子商务公司就一直在和不断增长的数据进行较量。最近,社交网站也遇到了同样的问题。如今,许多组织已经意识到他们所收集的数据是让他们了解他们的用户,提高业务在市场上的表现以及提高基础架构效率的一个宝贵的资源。

Hadoop生态系统就是为处理如此大数据集而产生的一个合乎成本效益的解决方案。Hadoop实现了一个特别的计算模型,也就是MapReduce,其可以将计算任务分割成多个处理单元然后分散到一群家用的或服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性。这个计算模型的下面是一个被称为Hadoop分布式文件系统(HDFS)的分布式文件系统。这个文件系统是“可插拔的”,而且现在已经出现了几个商用的和开源的替代方案。

不过,仍然存在一个挑战,那就是用户如何从一个现有的数据基础架构转移到Hadoop上,而这个基础架构是基于传统关系型数据库和结构化查询语句(SQL)的。对于大量的SQL用户(包括专业数据库设计师和管理员,也包括那些使用SQL从数据仓库中抽取信息的临时用户)来说,这个问题又将如何解决呢?

这就是Hive出现的原因。Hive提供了一个被称为Hive查询语言(简称HiveQL或HQL)的SQL方言,来查询存储在Hadoop集群中的数据。

SQL知识分布广泛的一个原因是:它是一个可以有效地、合理地且直观地组织和使用数据的模型。即使对于经验丰富的Java开发工程师来说,将这些常见的数据运算对应到底层的MapReduce Java API也是令人畏缩的。Hive可以帮助用户来做这些苦活,这样用户就可以集中精力关注于查询本身了。Hive可以将大多数的查询转换为MapReduce任务(job),进而在介绍一个令人熟悉的SQL抽象的同时,拓宽Hadoop的可扩展性。如果用户对此存在疑惑,请参考稍后部分的第1.3节“Java和Hive:词频统计算法”中的相关介绍。

Hive最适合于数据仓库应用程序,使用该应用程序进行相关的静态数据分析,不需要快速响应给出结果,而且数据本身不会频繁变化。

Hive不是一个完整的数据库。Hadoop以及HDFS的设计本身约束和局限性地限制了Hive所能胜任的工作。其中最大的限制就是Hive不支持记录级别的更新、插入或者删除操作。但是用户可以通过查询生成新表或者将查询结果导入到文件中。同时,因为Hadoop是一个面向批处理的系统,而MapReduce任务(job)的启动过程需要消耗较长的时间,所以Hive查询延时比较严重。传统数据库中在秒级别可以完成的查询,在Hive中,即使数据集相对较小,往往也需要执行更长的时间[1]。最后需要说明的是,Hive不支持事务。

因此,Hive不支持OLTP(联机事务处理)所需的关键功能,而更接近成为一个OLAP(联机分析技术)工具。但是我们将会看到,由于Hadoop本身的时间开销很大,并且Hadoop所被设计用来处理的数据规模非常大,因此提交查询和返回结果是可能具有非常大的延时的,所以Hive并没有满足OLAP中的“联机”部分,至少目前并没有满足。

如果用户需要对大规模数据使用OLTP功能的话,那么应该选择使用一个NoSQL数据库,例如,和Hadoop结合使用的HBase[2]及Cassandra[3]。如果用户使用的是Amazon弹性MapReduce计算系统(EMR)或者弹性计算云服务(EC2)的话,也可以使用DynamoDB[4]。用户甚至可以和这些数据库(还包括其他一些数据库)结合来使用Hive,这个我们会在第17章进行介绍。

因此,Hive是最适合数据仓库应用程序的,其可以维护海量数据,而且可以对数据进行挖掘,然后形成意见和报告等。

因为大多数的数据仓库应用程序是使用基于SQL的关系型数据库实现的,所以Hive降低了将这些应用程序移植到Hadoop上的障碍。用户如果懂得SQL,那么学习使用Hive将会很容易。如果没有Hive,那么这些用户就需要去重新学习新的语言和新的工具后才能进行生产。

同样地,相对于其他Hadoop语言和工具来说,Hive也使得开发者将基于SQL的应用程序移植到Hadoop变得更加容易。

不过,和大多数SQL方言一样,HiveQL并不符合ANSI SQL标准,其和Oracle,MySQL,SQL Server支持的常规SQL方言在很多方面存在差异(不过,HiveQL和MySQL提供的SQL方言最接近)。

因此,本书共有两个目的。其一,本书提供了一个针对所有用户的介绍。这个介绍会比较综合,并且会使用例子来进行讲解。适用的用户包括开发者、数据库管理员和架构师,以及其他(如商业分析师等)非技术类用户。

其二,本书针对开发者和Hadoop管理员等需要深入了解Hive技术细节的用户提供了更详尽的讲述,以帮助这些用户学习如何优化Hive查询性能,如何通过用户自定义函数和自定义数据格式等,来个性化使用Hive。

因为Hive缺少好的文档,所以我们经历了不少的挫折才完成了这本书。特别是对于那些非开发者以及不习惯通过查看项目BUG记录和功能数据库、源代码等途径来获取其所需信息的用户,Hive并没有提供好的文档。Hive Wiki[5]提供的信息价值很大,但是其中的解释有时太少了,而且常常没有进行及时的更新。我们希望本书可以弥补这些不足,可以提供一个对于Hive的所有基本功能以及如何高效使用这些功能的综合性的指南[6]。

时间: 2024-10-28 18:51:14

《Hive编程指南》一第1章 基础知识的相关文章

《CCNP SWITCH 300-115学习指南》——第1章 基础知识回顾

第1章 基础知识回顾CCNP SWITCH 300-115学习指南在正式进入CCNP SWITCH这门针对园区网交换技术的课程之前,我们首先快速地回顾一遍CCNA中的相关知识点并简要地介绍其中部分技术,以便于本书内容的理解.由于这里提到的所有技术都是独立存在的,如生成树或虚拟LAN(VLAN),因此本章将这些基础知识汇总到一起进行复习,并且在后续章节中将不再重复类似的基础讲解. 如果读者十分了解交换术语,并对交换技术有着基本的认识,建议跳过此章,直接从第2章开始阅读. 本章涵盖如下CCNA基础交

《Hive编程指南》一导读

前 言 Hive编程指南本书是一本Hive的编程指南.Hive是Hadoop生态系统中必不可少的一个工具,它提供了一种SQL(结构化查询语言)方言,可以查询存储在Hadoop分布式文件系统(HDFS)中的数据或其他和Hadoop集成的文件系统,如MapR-FS.Amazon的S3和像HBase(Hadoop数据库)和Cassandra这样的数据库中的数据. 大多数数据仓库应用程序都是使用关系数据库进行实现的,并使用SQL作为查询语言.Hive降低了将这些应用程序转移到Hadoop系统上的难度.凡

《Hive编程指南》—— 读后总结

知识图谱 本文转自博客园xingoo的博客,原文链接:<Hive编程指南>-- 读后总结,如需转载请自行联系原博主.

《ADOBE FIREWORKS CS5标准培训教材》——第1章 基础知识和基本操作1.1 关于Adobe Fireworks CS5

第1章 基础知识和基本操作 学习要点: 认识Fireworks CS5,并了解Fireworks CS5的新功能 熟练掌握在Fireworks CS5中创建.打开和保存Fireworks文档的操作 熟练掌握在Fireworks CS5中导入.优化和导出文档的操作 熟悉Fireworks CS5的工作环境 熟练掌握"工具"面板的使用 熟练掌握在Fireworks CS5中选择和修改对象的操作 Fireworks CS5相对于CS4版本表层功能并没有太大升级,但在软件性能方面却有极大提升.

《Python算法教程》——第2章 基础知识 2.1 计算领域中一些核心理念

第2章 基础知识 Tracey:我不知道您在哪里. Zoe:隐身术就是这样--您应该听说过的. Tracey:我可不认为这属于基础知识. --选自<Firefly>第14集台词 在我们将注意力转向本书主体内容,也就是那些数学技术.算法设计原则及经典算法之前,还必须先了解一些最基本的技术与原则.因为当您阅读到后续章节时,至少应该非常清楚类似"无反向环路的加权有向图"以及"Θ(n lg n)运行时间"这些词句所表达的具体含义.同时,我们也理应要对Python

《树莓派Python编程指南》——第3章 Python基础3.1 变量、值和类型

本节书摘来自华章计算机<树莓派Python编程指南>一书中的第3章,第3.1节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问"华章计算机"公众号查看. 第3章 Python基础 在前面章节中,我们直接深入Python程序中,希望能够给你一个概念--什么是Python.但你还不清楚它具体是如何工作的.本章中,我们将回答这些问题,并详细介绍如何在Python中创建自己的程序.在后继的章节中,我们将分别介绍Python的不同特性,帮助你为树

《Hive编程指南》一1.2 Hadoop生态系统中的Hive

1.2 Hadoop生态系统中的Hive WordCount算法,和基于Hadoop实现的大多数算法一样,有那么点复杂.当用户真正使用Hadoop的API来实现这种算法时,甚至有更多的底层细节需要用户自己来控制.这是一个只适用于有经验的Java开发人员的工作,因此也就将Hadoop潜在地放在了一个非程序员用户无法触及的位置,即使这些用户了解他们想使用的算法. 事实上,许多这些底层细节实际上进行的是从一个任务(job)到下一个任务(job)的重复性工作,例如,将Mapper和Reducer一同写入

《JavaScript机器人编程指南》——第1章 开始学习JS机器人技术

第1章 开始学习JS机器人技术 JavaScript机器人编程指南 欢迎来到JavaScript机器人的世界!让我们探索一下用Arduino和Johnny-Five来编写机器人程序有多么简单吧. 在这一章中,我们会做如下事情: 探索JS机器人技术.NodeBots和Johnny-Five: 搭建开发环境: 使板载LED灯闪烁.

《iOS编程指南》——第 1 章为何选择本地化应用

第 1 章 为何选择本地化应用iOS编程指南早在2007年发布iPhone的时候,苹果并没有一同发布本地化SDK,苹果公司声称不需要本地化SDK,鼓励大家使用JavaScript,CSS和HTML开发Web应用.但接下来剧情并没有按照苹果设计的那样发展,也许是苹果的思想太超前,大多数开发者并不吃这一套,他们希望自己开发的应用和iOS系统内置的应用一样,可以直接访问硬件并和系统高度集成. 于是在iPhone发布后短短几个月,开源社区就完成了一系列苹果原本认为不可能的事情.苹果本来试图通过技术手段把