【转】使用 Hive 构建数据库

原文链接 http://www.ibm.com/developerworks/cn/data/library/bd-hivelibrary/index.html

Peter J. Jamack, 大数据分析顾问, Peter J Jamack

2013 年 9 月 06 日

当您需要处理大量数据时,存储它们是一个不错的选择。令人难以置信的发现或未来预测不会来自未使用的数据。大数据是一个复杂的怪兽。用 Java™ 编程语言编写复杂的 MapReduce 程序要耗费很多时间、良好的资源和专业知识,这正是大部分企业所不具备的。这也是在 Hadoop 上使用诸如 Hive 之类的工具构建数据库会成为一个功能强大的解决方案的原因。

如果一家公司没有资源构建一个复杂的大数据分析平台,该怎么办?当业务智能 (BI)、数据仓库和分析工具无法连接到 Apache Hadoop 系统,或者它们比需求更复杂时,又该怎样办?大多数企业都有一些拥有关系数据库管理系统 (RDBMSes) 和结构化查询语言 (SQL) 经验的员工。Apache Hive 允许这些数据库开发人员或者数据分析人员使用 Hadoop,无需了解 Java 编程语言或者 MapReduce。现在,您可以设计星型模型的数据仓库,或者常态化的数据库,而不需要挑战 MapReduce 代码。忽然之间,BI 和分析工具,比如 IBM Cognos® 或者 SPSS® Statistics,就可以连接到 Hadoop 系统。

数据库

构建数据库,并且能够使用这些数据,这不是 Hadoop 或者数据库问题。多年以来,人们一直习惯将数据组织到库中。有许多由来已久的问题:如何将数据分门别类?如何将所有数据连接到集成的平台、机箱或者 库?多年来,各种方案层出不穷。

人们发明了很多方法,比如 Dewey Decimal 系统。他们将通讯录中的人名或企业名按照字母顺序排列。还有金属文件柜、带货架的仓库、地址卡文件系统,等等。雇主尝试用时间卡,打卡器以及时间表追踪员工。人们需要结构化和组织化数据,还需要反映和检查这些数据。如果您无法访问、结构化或理解这些数据,那么存储这么多的数据有什么实际意义呢?

RDBMSes 使用了过集合论和第三范式。数据仓库有 Kimball、Inmon、星型模型、Corporate Information Factory,以及专用数据集市。他们有主数据管理、企业资源规划、客户关系管理、电子医疗记录和其他许多系统,人们使用这些系统将事务组织到某种结构和主题中。现在,我们有大量来自各个行业的非机构化或半结构化数据,例如,社交媒体、邮件、通话记录、机械指令、远程信息,等等。这些新数据需要集成到存储结构化的新旧数据的非常复杂、非常庞大的系统中。如何分类才能使得销售经理能够改进报告?如何构建库才能使得执行主管能够访问图表和图形?

您需要找到一种将数据结构化到数据库的方法。否则,只是拥有大量只有数据科学家才能访问数据。有时,人们只是需要简单的报告。有时,他们只是想要拖拽或者编写 SQL 查询。

大数据、Hadoop 和 InfoSphere BigInsights

本小节将向您介绍 InfoSphere® BigInsights™,以及它与 Hadoop、大数据、Hive、数据库等有何联系。InfoSphere BigInsights 是 Hadoop 的 IBM 分区。您可能对 Apache 和 Cloudera 比较了解,但是业内许多人都曾涉足 Hadoop。它开始于开源的使用 MapReduce 的 Hadoop 和 Hadoop 分布式文件系统 (HDFS),通常还包括其他工具,比如 ZooKeeper、Oozie、Sqoop、Hive、Pig 和 HBase。这些发布版与普通 Hadoop 的区别在于它们被添加在 Hadoop 顶层。InfoSphere BigInsights 就属于这一类版本。

您可以在 Hadoop 的 Cloudera 版本之上使用 InfoSphere BigInsights。此外,InfoSphere BigInsights 提供一个快速的非结构化的分析引擎,您可以将它和 InfoSphere Streams 结合在一起使用。InfoSphere Streams 是一个实时的分析引擎,它开创了联合实时分析和面向批次的分析的可能。

InfoSphere BigInsights 还拥有内置的、基于浏览器的电子表格 BigSheets。这个电子表格允许分析人员每天以电子表格样式使用大数据和 Hadoop。其他功能包括基于角色的安全和管理的 LDAP 集成;与 InfoSphere DataStage® 的集成,用于提取、转换、加载 (ETL);常用的使用案例的加速器,比如日志和机器数据分析;包含常用目录和可重复使用工作的应用目录;Eclipse 插件;以及 BigIndex,它实际上是一个基于 Lucene 的索引工具,构建于 Hadoop 之上。

您还可以使用 Adaptive MapReduce、压缩文本文件、自适应调度增强来提高性能。此外,您还可以集成其他应用,例如,内容分析和 Cognos Consumer Insights。

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 INNOT 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. 下载示例数据库

如果您宁愿在一个更手动的环境中,那么可以从 Linux® 完成它,您需要创建一个目录,然后运行 wget

$ Sudo mkdir /user/baseball.

sudo wget http://seanlahman.com/files/database/lahman2012-csv.zip

该数据使用了 Creative Commons Attribution-ShareAlike 3.0 Unported 许可。

压缩文件在 CSV 文件中,包含了棒球和棒球运动员的统计数据。示例中包含四个主表,每个表都只有一个列(Player_ID):

  • Master table.csv— 运动员姓名、出生日期和生平信息
  • Batting.csv— 击球统计
  • Pitching.csv— 投球统计
  • Fielding.csv— 接球统计

辅表:

  • AllStarFull.csv— 全明星阵容
  • Hall of Fame.csv— 名人堂投票数据
  • Managers.csv— 管理统计
  • Teams.csv— 年度统计和排名
  • BattingPost.csv— 赛季后的击球统计
  • PitchingPost.csv— 赛季后的投球统计
  • TeamFranchises.csv— 加盟信息
  • FieldingOF.csv— 场外位置数据
  • FieldingPost.csv— 赛季后的现场数据
  • ManagersHalf.csv— 经纪人的分季数据
  • TeamsHalf.csv— 团队的分季数据
  • Salaries.csv— 球员薪资数据
  • SeriesPost.csv— 赛季后系列信息
  • AwardsManagers.csv— 经纪人奖项
  • AwardsPlayers.csv— 球员奖项
  • AwardsShareManagers.csv— 经纪人奖项投票
  • AwardsSharePlayers.csv— 球员奖项投票
  • Appearances.csv
  • Schools.csv
  • SchoolsPlayers.csv

设计数据库

设计数据库的大部分内容已经完成。Player_ID 是四个主表(Master、Batting、Pitching 和 Fielding)的主键。(为了更好地理解表格结构和依赖性,请阅读 Readme2012.txt。)

设计非常简单:主表是通过 Player_ID 连接的。Hive 并没有真的使用主键或者引用完整性的概念。Schema on Read 意味着 Hive 会摒弃您输入到表格中的所有内容。如果文件是混乱无序的,那么可能需要寻求连接它们的最佳方法 。此外,在将数据加载到 HDFS 或 Hive 之前,需要进行一些转化。根据 Schema on Rea 原理,不良数据在 Hive 中将彻底变成不良数据。这就是数据分析(无论是源级别的或者 HDFS 级别的)是一个重要步骤的原因。没有数据分析,最终获得的原始数据没有人可以使用。幸运的是,这个棒球的示例包含一些数据,这些数据在您输入 Hadoop 之前,已经被清理和组织到一起。

将数据加载到 HDFS 或者 Hive

将数据加载到 Hadoop 使用了很多不同的理论和实践。有时,您可以将原始文件直接输入到 HDFS。您可能会创建一个目录和子目录来组织文件,但是将文件从一个地方复制或移动到另一个位置是一个简单的过程。

就这个示例来说,只需发出 put 命令,然后创建一个名为 baseball 的目录即可:

Hdfs dfs  -mkdir  /user/hadoop/baseball

hdfs dfs  -put  /LOCALFILE  /user/hadoop/baseball

使用 Hive 构建数据库

随着数据分析和设计的完成,下一步就是构建数据库了。

虽然我没有介绍所有的示例,但是,如果跟随我构建了第一个示例,那么您就能够了解如何完成剩下的步骤。我通常会构建一些 SQL 文本脚本,然后将它们输入或者粘贴到 Hive。其他人可以使用 Hue 或其他工具来构建数据库和表格。

为了简便起见,我们使用了 Hive Shell。高级步骤是:

  1. 创建棒球数据库
  2. 创建表格
  3. 加载表格
  4. 验证表格是正确的

您会看到一些选项,例如,创建外部或者内部数据库和表格,但是在这个示例中,需要遵守内部默认设置。实际上,内部的 就意味着 Hive 处理了内部存储的数据库。清单 1 说明了 Hive shell 的流程。

清单 1. 创建数据库
$ Hive

	Create Database baseball;
	Create table baseball.Master
         ( lahmanID int, playerID int, managerID int, hofID int, birthyear INT,
           birthMonth INT, birthDay INT, birthCountry STRING, birthState STRING,
           birthCity STRING, deathYear INT, deathMonth INT, deathDay INT,
           deathCountry STRING, deathState STRING, deathCity STRING,
           nameFirst STRING, nameLast STRING, nameNote STRING, nameGive STRING,
           nameNick STRING, weight decimal, height decimal, bats STRING,
           throws STRING, debut  INT, finalGame INT,
           college STRING, lahman40ID INT, lahman45ID INT, retroID INT,
           holtzID INT, hbrefID INT  )
         ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ ;

其他所有表也都遵守这个程序。为了将数据加载到 Hive 表,将会再次打开 Hive shell,然后运行以下代码:

$hive
    LOAD DATA LOCAL INPATH Master.csv OVERWRITE INTO TABLE baseball.Master;

使用 Hive 构建标准化数据库

这个棒球的数据库或多或少是标准化的:有四个主表和几个辅表。再次重申,Hive 是一个 Schema on Read,因此您必须完成数据分析和 ETL 阶段的大部分工作,因为没有传统 RDBMSes 中的索引或者引用完整性。如果您想要使用索引功能,那么下一步应该使用类似 HBase 的工具。请查看 清单 2 中的代码。

清单 2. 运行一个查询
$ HIVE
	Use baseball;
	Select * from Master;
	Select PlayerID from Master;
	Select A.PlayerID, B.teamID, B.AB, B.R, B.H, B.2B, B.3B, B.HR, B.RBI
        FROM Master A JOIN BATTING B ON A.playerID = B.playerID;

结束语

这就是 Hive 的优势以及构建数据库的好处:它为混沌的世界创建了结构。和我们喜欢讨论的非结构化或半结构化数据一样,它最终还是要了解谁可以分析数据,谁能基于它运行报告,以及您如何能够让它快速投入到工作中。大多数用户将 Hive 视为某种黑盒:他们不在意数据来自何处,也不在乎需要做什么才能以正确格式获取数据。也不会在意集成或者验证这些数据有多么困难,只要这些数据是精确的。这通常意味着您必须有组织和结构。否则,您的数据库会成为一个永久存储无限制数据的死区,没人能够或者想要使用这些数据。

结构复杂的数据仓库已经风光不再。虽然近年情况有所好转,但是概念还是一样:这是一个业务,业务用户想要结果,而不是编程逻辑。这就是在 Hive 中构建数据库会成为正确开端的原因。

下载

描述 名字 大小
样例 CSV 文件 lahman2012-csv.zip 11MB
时间: 2024-10-12 16:22:07

【转】使用 Hive 构建数据库的相关文章

Hive与数据库的异同

http://www.cnblogs.com/Richardzhu/p/3364909.html 一.Hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析. Hvie是建立在Hadoop上的数据仓库基础架构.它提供了一系列的工

Hive的数据库和表

本文介绍一下Hive中的数据库(Database/Schema)和表(Table)的基础知识,由于篇幅原因,这里只是一些常用的.基础的. Hive的数据库和表 先看一张草图: Hive结构 从图上可以看出,Hive作为一个"数据库",在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成. 1.  Hive在HDFS上的默认存储路径 Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore

Hive默认数据库修改配置

此文是基于上一篇文章:Hive环境搭建及测试 一.root用户下:上传mysql安装包(mysql-5.5.32.tar.gz)到/install目录下,并解压安装; 二.hadoop用户下:上传mysql驱动包(mysql-connector-java-3.0.17-ga-bin.jar )到/software/hive-1.2.2/lib  修改Hive的配置文件: vi /software/hive-1.2.2/conf/hive-site.xml 更改数据库连接方式: 394 <prop

在hue当中设置hive当中数据库的控制权限。

这段时间在搞大数据的集群搭建工作,并且安装了hive的服务,但是没有对其中的数据库的操作权限做限制,每个人都可以对数据库进行增删改查.今天有空做了一下了对hive数据库当中的数据库做一些限制. 我们都是在hue的客户端进行操作hive当中的数据库.操作如下: (1)在hue界面创建登录用户: (2)   配置hive权限控制 <property> <name>hive.security.authorization.enabled</name> <value>

hive 初始化数据库报错

安装hive,初始化数据库的时候报错 schematool -dbType mysql -initSchema Metastore Connection Driver : com.mysql.cj.jdbc.Driver Metastore connection User: hive org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: java.sq

使用Memcached、Spring AOP构建数据库前端缓存框架

数据库访问可能是很多网站的瓶颈.动不动就连接池耗尽.内存溢出等.前面已经讲到如果我们的网站是一个分布式的大型站点,那么使用 memcached实现数据库的前端缓存是个很不错的选择:但如果网站本身足够小只有一个服务器,甚至是vps的那种,不推荐使用memcached,使 用Hibernate或者Mybatis框架自带的缓存系统就行了. 一.开启memcached服务器端服务 如果已经安装了memcached服务器端程序,请确认服务器端服务已开启. 二.引入jar 1.  alisoft-xplat

电商总结(三)构建数据库的主从架构

这段时间,一直在总结电商系统的相关基础技术和架构,写了很多东西.但是还是发现一个很重要,很基础的方面没有讲到,那就是数据库读写分离的主从架构.可能发展到大型成熟的公司之后,主从架构已经落伍了,取而代之的是更加复杂的数据库集群.但是作为一个小型电商公司,数据库的主从架构应该是最基础的.任何大型的系统架构,都是不断演进的.主从架构便是数据库架构中,最基础的架构.所以研究完主从架构,也就能看懂更加复杂的架构了. 首先为什么要读写分离? 对于一个小型网站,可能单台数据库服务器就能满足需求,但是在一些大型

hive 构建外表及分区

hive里分了create table和create external table,external table的好处就是表结构和数据是解绑的,删除表并不会删除数据,表相当于就是定义了去解析相对应的文件时的规范而已. 一个比较常见的应用场景是将网站的用户浏览数据建立一个外表,然后按天做分区加快查找效率. 创建表 create EXTERNAL table sms_detail( mobile_type int, msg_id bigint) partitioned by (data_date s

Java高级电商项目-1.构建数据库,搭建项目环境

目录 到Github获取源码请点击此处 一. 数据库还原 二. Mybatis逆向生成工具的使用 三. 搭建项目环境 四. 在linux虚拟机上部署zookeeper, 搭建Dubbo服务. linux虚拟机安装JDK 安装zookeeper 五. 搭建ashop-manager-web项目 六. 数据库表分析 到Github获取源码请点击此处 ? 一. 数据库还原 新建Mysql数据库, 你可以使用自己熟悉的Mysql图形界面操作工具快速建库. ? 在新创建的ashop数据库中执行脚本文件as