Hive
Hive 是一个强大的工具。它使用了 HDFS,元数据存储(默认情况下是一个 Apache Derby 数据库)、shell 命令、驱动器、编译器和执行引擎。它还支持 Java 数据库连接性 (JDBC) 连接。 由于其类似 SQL 的能力和类似数据库的功能,Hive 能够为非编程人员打开大数据 Hadoop 生态系统。它还提供了外部 BI 软件,例如,通过 JDBC 驱动器和 Web 客户端和 Cognos 连接。
您可以依靠现有的数据库开发人员,不用费时费力地寻找 Java MapReduce 编程人员。这样做的好处在于:您可以让一个数据库开发人员编写 10-15 行 SQL 代码,然后将它优化和翻译为 MapReduce 代码,而不是强迫一个非编程人员或者编程人员写 200 行代码,甚至更多的复杂 MapReduce 代码。
Hive 常被描述为构建于 Hadoop 之上的数据仓库基础架构。事实是,Hive 与数据仓库没有什么关系。如果您想构建一个真实的数据仓库,可以借助一些工具,比如 IBM Netezza。但是如果您想使用 Hadoop 构建一个数据库,但又没有掌握 Java 或者 MapReduce 方面的知识,那么 Hive 会是一个非常不错的选择(如果您了解 SQL)。Hive 允许您使用 Hadoop 和 HBase 的 HiveQL 编写类似 SQL 的查询,还允许您在 HDFS 之上构建星型模型。
Hive 与 RDBMSes
Hive 是一个读模式 系统,而 RDBMSes 是一个典型的写模式 系统。传统的 RDMBSes 在编写数据时验证模型。如果数据与结构不符,则会遭到拒绝。Hive 并不关心数据的结构,至少不会在第一时间关心数据结构,它不会在您加载数据时验证模型。更确切地说,只在您运行查询之后,它才会关心该模型。
Hive 的限制
在使用 Hive 时可能会有一些挑战。首先,它与 SQL-92 不兼容。某些标准的 SQL 函数,例如 NOT IN、NOT LIKE 和 NOT EQUAL 并不存在,或者需要某种工作区。类似地,部分数学函数有严格限制,或者不存在。时间戳或者 date 是最近添加的值,与 SQL 日期兼容性相比,更具有 Java 日期兼容性。一些简单功能,例如数据差别,不能正常工作。
此外,Hive 不是为了获得低延时的、实时或者近乎实时的查询而开发的。SQL 查询被转化成 MapReduce,这意味着与传统 RDBMS 相比,对于某种查询,性能可能较低。
另一个限制是,元数据存储默认情况下是一个 Derby 数据库,并不是为企业或者生产而准备。部分 Hadoop 用户转而使用外部数据库作为元数据存储,但是这些外部元数据存储也有其自身的难题和配置问题。这也意味着需要有人在 Hadoop 外部维护和管理 RDBMS 系统。
安装 InfoSphere BigInsights
这个棒球运动数据示例向您展示了在 Hive 中如何从平面文件构建常用的数据库。虽然这个示例比较小,但它显示了使用 Hive 构建数据库有多么轻松,您可以使用该数据运行统计数据,确保它符合预期。将来尝试组织非结构数据时就无需检查那些信息。
完成数据库构建之后,只要连接到 Hive JDBC,就可以使用任何语言构建 Web 或者 GUI 前端。(配置和设置一个 thrift 服务器,Hive JDBC 是另一个话题)。我使用 VMware Fusion 在我的 Apple Macbook 上创建了一个 InfoSphere BigInsights 虚拟机 (VM)。这是一个简单的测试,这样我的 VM 就有 1 GB 的 RAM 和 20 GB 的固态磁盘存储空间。操作系统是 CentOS 6.4 64-bit distro 的 Linux®。您还可以使用某些工具,例如 Oracle VM VirtualBox,如果您是 Windows® 用户,那么您还可以使用 VMware Player 创建 InfoSphere BigInsights VM。(在 Fusion 上设置 VM、VMware Player 或者 VirtualBox 不在本文的讨论范围之内。)
从下载 IBM InfoSphere BigInsights 基础版开始。您需要有一个 IBM ID,或者您可以注册一个 ID,然后下载 InfoSphere BigInsights 基础版。
输入和分析数据
现在,您可以在任何地方获取数据。绝大多数网站都提供了逗号分隔值 (CSV) 格式的数据:天气、能源、运动、金融和博客数据。例如,我使用来自 Sean Lahman 网站的结构化数据。使用非结构化数据会费力一些。
首先 下载 CSV 文件(参见 图 1)。