技术开发 频道

使用Hive构建数据库 备战大数据时代

  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)。


▲图 1. 下载示例数据库

0
相关文章