细细品味 Hadoop
——Hadoop 集群(第 13 期)
精
华
集
锦
csAxp
虾皮工作室
http://www.cnblogs.com/xia520pi/
2012 年 7 月 3 日
创建时间:2012/3/22 修改时间:2012/3/24 修改次数:0
Hadoop 集群(第 13 期)
——Hive 简介及安装
1、Hive简介
Hive 是一个构建在 Hadoop 上的数据仓库平台,其设计目标是使 Hadoop 上的数据操
作与传统 SQL 结合,让熟悉 SQL 编程的开发人员能够轻松向 Hadoop 平台转移。Hive 是
Facebook 的信息平台的重要组成部分,Facebook 在 2008 年将其贡献给 Apache,现已成为
Apache 旗下的一个独立子项目。
Hive 是基于 Hadoop 文件系统上的数据仓库架构。它为数据仓库的管理提供了许多功
能:数据 ETL(抽取,转换和加载)工具,数据存储管理和大型数据集的查询与分析能力。
同时 Hive 还定义了类 SQL 的语言——HiveQL,HiveQL 允许用户进行和 SQL 相似的操作。
HiveQL 还允许开发人员方便地使用 mapper 和 reducer 操作,这样对 MapReduce 框架是一个
强有力的支持。
由于 Hadoop 是批量处理系统,任务是高延迟性的,所以在任务提交和处理过程中会消
耗一些时间成本。同样,即使 Hive 处理的数据集非常小(比如几百 MB),
在执行时也会出
现延迟现象。这样,Hive 的性能就不可能很好地和传统的 Oracle 数据库进行比较了。Hive
不能提供数据排序和查询 cache 功能,也 不提供在线事务处理,不提供实时的查询功能和记
录级的更新,但 Hive 能更好地处理不变的大规模数据集(例如网络日志)上的批量任务。
所以,Hive 最大的价值是可扩展性(基于 Hadoop 平台,可以自动适应机器数目和数据量的
动态变化)、可延展性(结合 MapReduce 和用户定义的函数库),并且拥有良好的容错性和
低约束的数据输入格式。
2、Hive体系结构
Hive 本身建立在 Hadoop 的体系架构上,提供了一个 SQL 解析过程,并从外部接口中
获取命令,以对用户指令进行解析。Hive 可将外部命令解析成一个 MapReduce 可执行计划,
并按照该计划生产 MapReduce 任务后交给 Hadoop 集群处理,Hive 的体系结构如图 2-1、图
2-2、图 2-3 以及图 2-4 所示。
图 2-1 Hive 的体系结构(1)
河北工业大学——软件工程与理论实验室 编辑:虾皮
1
创建时间:2012/3/22 修改时间:2012/3/24 修改次数:0
图 2-2 Hive 的体系结构(2)
图 2-3 Hive 的体系结构(3)
河北工业大学——软件工程与理论实验室 编辑:虾皮
2
创建时间:2012/3/22 修改时间:2012/3/24 修改次数:0
图 2-4 Hive 的体系结构(4)
主要分为以下几个部分:
用户接口
UI 用户提交查询和其他的操作。包含类似命令行接口 CLI(Command Line Interface),
Web UI 以及 JDBC/ODBC 驱动。其中最常用的是 CLI,CLI 启动的时候,会同时启动一
个 Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的
时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏
览器访问 Hive。
备注:命令行接口 CLI 又称为 Hive Shell。
Thrift 服务器
当 Hive 以服务器模式运行时,可以作为 Thrift 服务器,供客户连接。
元数据存储(Metastore)
元数据存储此组件存储数据仓库里所有的各种表与分区的结构化信息,包括列与列类型
信息,序列化器与反序列化器,从而能够读写 hdfs 中的数据,通常是存储在关系数据库如
MySQL,Derby 中。
解析器
解释器、
编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及
查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
Hadoop
Hive 的数据存储在 HDFS 中,利用 MapReduce 进行计算。
河北工业大学——软件工程与理论实验室 编辑:虾皮
3
创建时间:2012/3/22 修改时间:2012/3/24 修改次数:0
2.1 Hive的存储结构
基于 MapReduce 的 Hive 数据仓库在超大规模数据分析中扮演了重要角色,对于典型
的 Web 服务供应商,这些分析有助于它们快速理解动态的用户行为及变化的用户需求。数
据存储结构是影响数据仓库性能的关键因素之一。Hadoop 系统中常用的文件存储格式有支
持文本的 TextFile 和支持二进制的 SequenceFile 等,它们都属于行存储方式。Facebook 工
程师发表的 RCFile: A Fast and Spaceefficient Data Placement Structure in MapReducebased
Warehouse Systems 一文,介绍了一种高效的数据存储结构——RCFile(Record Columnar
File),并将其应用于 Facebook 的数据仓库 Hive 中。与传统数据库的数据存储结构相比,
RCFile 更有效地满足了基于 MapReduce 的数据仓库的四个关键需求,即 Fast data loading、
Fast query processing、Highly efficient storage space utilization 和 Strong adaptivity to highly
dynamic workload patterns。
1)数据仓库的需求
基于 Facebook 系统特征和用户数据的分析,在 MapReduce 计算环境下,数据仓库对于
数据存储结构有四个关键需求。
Fast data loading
对于 Facebook 的产品数据仓库而言,快速加载数据(写数据)是非常关键的。每天大
约有超过 20TB 的数据上传到 Facebook 的数据仓库
,由于数据加载期间网络和磁盘流量会
干扰正常的查询执行,因此缩短数据加载时间是非常必要的。
Fast query processing
为了满足实时性的网站请求和支持高并发用户提交查询的大量读负载,查询响应时间是
非常关键的,这要求底层存储结构能够随着查询数量的增加而保持高速的查询处理。
Highly efficient storage space utilization
高速增长的用户活动总是需要可扩展的存储容量和计算能力,有限的磁盘空间需要合理
管理海量数据的存储。实际上,该问题的解决方案就是最大化磁盘空间利用率。
Strong adaptivity to highly dynamic workload patterns
同一份数据集会供给不同应用的用户,通过各种方式来分析。某些数据分析是例行过程,
按照某种固定模式周期性执行;而另一些则是从中间平台发起的查询。大多数负载不遵循任
何规则模式,这需要底层系统在存储空间有限的前提下,对数据处理中不可预知的动态数据
具备高度的适应性,而不是专注于某种特殊的负载模式。
2)MapReduce 存储策略
要想设计并实现一种基于 MapReduce 数据仓库的高效数据存储结构,关键挑战是在
MapReduce 计算环境中满足上述四个需求。在传统数据库系统中,三种数据存储结构被广
泛研究,分别是行存储结构、列存储结构和 PAX 混合存储结构。上面这三种结构都有其自
身特点,不过简单移植这些数据库导向的存储结构到基于 MapReduce 的数据仓库系统并不
能很好地满足所有需求。
行存储
如图 2.1-1 所示,基于 Hadoop 系统行存储结构的优点在于快速数据加载和动态负载的
高适应能力,这是因为行存储保证了相同记录的所有域都在同一个集群节点,即同一个
HDFS 块。不过,行存储的缺点也是显而易见的,例如它不能支持快速查询处理,因为当查
询仅仅针对多列表中的少数几列时,它不能跳过不必要的列读取;此外,由于混合着不同数
据值的列,行存储不易获得一个极高的压缩比,即空间利用率不易大幅提高。尽管通过熵编
码和利用列相关性能够获得一个较好的压缩比,但是复杂数据存储实现会导致解压开销增
河北工业大学——软件工程与理论实验室 编辑:虾皮
4