1 / 19

数据仓库 -Hive

Cloud Computing. 数据仓库 -Hive. 主要内容. 简介. Hive 是一个构建在 Hadoop 上的数据仓库平台,其设计目标是使 Hadoop 上的数据操作与传统 SQL 结合,让熟悉 SQL 编程的开发人员能够向 Hadoop 平台迁移。 Hive 可以在 HDFS 上构建数据仓库来存储结构化的数据,这些数据来源于 HDFS 上的原始数据, Hive 提供了类似 SQL 的查询语言 HiveQL ,可以执行查询,变换数据等操作。通过解析, HiveQL 语言在底层被转化为相应的 MapReduce 操作。. Hive 的组成.

sileas
Download Presentation

数据仓库 -Hive

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cloud Computing 数据仓库-Hive

  2. 主要内容

  3. 简介 • Hive 是一个构建在Hadoop 上的数据仓库平台,其设计目标是使Hadoop上的数据操作与传统SQL结合,让熟悉SQL编程的开发人员能够向Hadoop平台迁移。 • Hive可以在HDFS上构建数据仓库来存储结构化的数据,这些数据来源于HDFS上的原始数据, Hive提供了类似SQL的查询语言HiveQL,可以执行查询,变换数据等操作。通过解析,HiveQL语言在底层被转化为相应的MapReduce操作。

  4. Hive的组成 Hive • Hive的体系结构 CLI JDBC/ ODBC Web GUI Thrift Server Metastore Driver (Compiler, Optimizer, Executor) Hadoop H Name Node Job Tracker

  5. Hive的组成 • Hive相关组件: • 外部接口:Hive提供了例如命令行(CLI)、Web界面等用户接口, 还提供了应用程序接口(API)例如 JDBC,ODBC等。 • Thrift服务器:Hive Thrift服务器是一种跨语言服务的可伸缩软件框架。它结合律功能强大的软件堆栈的代码生成引擎,可以无缝的与C++、C#、Java、Python、PHP和Ruby结合。Thrift允许用户简单地定义文件中的数据类型和服务接口,编译器生成代码来实现RPC客户端和服务器之间的通信。 Hive内部集成了Thrift服务,支持在多种语言中运行Hive命令,使 客户端可以跨平台连接Hive。

  6. Hive的组成 • Hive相关组件: • 解析器(Driver):包括解释器,编译器,优化器,执行器,通过这一系列对HiveQL查询语句的处理,最后生成查询计划。解析器管理着HiveQL语句在编译,优化和执行时的生命周期。当接收到一个HiveQL查询语句时,解析器会创建一个相对的句柄,这个句柄被用来追踪执行时间,输出行数等数据。 • Hadoop:数据仓库和查询计划存储在HDFS上,计算过程由MapReduce执行。

  7. Hive的组成 • Hive相关组件: • 元数据库(Metastore):管理系统目录,通常存储在关系数据库如MySQL,Derby中。Hive所有其他的组件都会与它进行交互。Hive的元数据中保存了表的属性和服务信息,为查询操作提供依据,默认的元数据库是内部的Derby,这种情况下metastore和其他Hive服务运行在同一个Java虚拟机里,只能允许建立单个会话,要实现多用户多会话支持,需要配置一个独立的元数据库。

  8. Hive的数据模型 • 数据在Hive里组织成表,分区和桶的形式 • 表:Hive里的表类似于关系数据库中的表。每个表都有一个对应的 HDFS目录。表中的数据被序列化后存储在该目录的文件中。 Hive提供了内置的序列化格式。用户还可以通过自定义序列化 和反序列化的方法去支持新的数据格式。每张表的序列化格式 存储在原数据库中,并在查询编译和执行时被自动调用。Hive 同时还支持数据存储在NFS,本地目录的外部表。

  9. Hive的数据模型 • 数据在Hive里组织成表,分区和桶的形式 • 分区:分区是表的部分列的集合。一个表可以有一个或者多个分区, 这些分区确定了数据在表目录下的分布情况。假设表T的数 据是在/wh/T目录下。如果T在列ds和ctry上被分区,那么 ds值为20090101和ctry值为US的数据将会被存储到 /wh/T/ds=20090101/ctry=US的目录下。 • 桶:在每个分区中的数据可以根据列的哈希值进一步划分成桶,每 个桶在分区目录下都存在一个文件中。

  10. Hive的数据模型 • Hive支持的数据类型(基本类型)

  11. Hive的数据模型 • Hive支持的数据类型(复杂类型)

  12. Hive的查询语言 • Hive提供了类似于SQL的查询语言 HiveQL。 • HiveQL支持选择,投影,连接,聚合,合并以及From中嵌套的子查询语句。 • HiveQL允许在创建表的时候申明表的序列化格式,分区等HiveQL目前不支持行的删除和更新。 • HiveQL支持多表的插入操作。

  13. Hive的查询语言 • HiveQL的常用操作 • 创建表:创建一张名为userinfo的表,表中有两列id和name,Hive Shell中的创建命令为: create table userinfo (id int, name string) row format delimited fields terminated by ‘\t’; row format delimited fields terminated by ‘\t 是HiveQL特有的,用来指定数据的分隔方式 • 导入数据:建表后可以从本地文件系统或HDFS中导入数据文件,导入命令如下: load data local inpath ‘/home/hadoop/1’ overwrite into table userinfo

  14. Hive的查询语言 • HiveQL的常用操作 • 创建分区:创建一张名为userinfo的表,表中有两列id和name,并且对name进行分区,创建命令为: create table userinfo (id int) partitioned by (name string) row format delimited fields terminated by ‘\t’; • 创建桶:可以把表或者是分区组织成桶,桶是按行分开组织特定字段,每个桶对应一个reduce操作。在建立桶之前要设置hive.enforce.bucketing属性,命令为: set hive.enforce.bucketing; hive.enforce.bucketing=true create table userinfo (id int,name string) clusteredby (id) into 3 buckets row format delimited fields terminated by ‘\t’;

  15. Hive的查询语言 • HiveQL的常用操作 • 多表插入:在同一条语句中,把读取的同一份元数据插入到不同表中。 from userinfo insert overwrite table t1 select id,name insert overwrite table t2 select count(distinct id),name group by name • 修改表:重命名表,增加数据列 alter table userinfo rename to userinfo1 alter talbe userinfo1 add colums (grade string);

  16. Hive的查询语言 • HiveQL的常用操作 • 连接,HiveQL的连接分为内连接,左向外连接,右向外连接,全外连接和半连接。例如内链节: select userinfo.*, choice.* from userinfo join choice on (userinf.id = choice.id); • 子查询:HiveQL只能在from引导的字句中出现子查询。 select teacher, MAX(class_num) from (select teacher, count(classname) as class_num from classinfo group by teacher)subq group by teacher;

  17. Hive的查询语言 • HiveQL的扩展性 • HiveQL只有几十个内嵌的函数,但是可以通过编写UDF(User-Defined Function) 来扩展功能。 • Hive的UDF包括三种。 • UDF(User-Defined Function) 支持一个输入产生一个输出。 • UDAF(User-Defined Aggregate Function) 支持多个输入一个输出。 • UDTF(Uers-Defined Table-Generating Function) 支持一个输入多个输出。

  18. Hive的查询语言 • UDF编程示例 • UDF类必须继承自org.apache.hadoop.hive.ql.exec.UDF 类,并且实现evaluate方法。下面为对一个查询结果进行大小转化的UDF。 package com.cstore Import org.apache.hadoop.hive.ql.UDF; …. Public class lowerORupper extends UDF { public Text evalute(Text t, String up_or_lower) {…….} }

  19. Hive的查询语言 • UDAF编程示例 • UDAF类必须继承自org.apache.hadoop.hive.ql.exec.UDAF 类,并且在内部类中实现 org.apache.hadoop.hive.ql.exec.UDAFEvaluator接口, UDAFEvaluator接口有五个方法: • 1. init 方法负责对中间结果实现初始化; • 2. iterate 接收传入的参数,并进行内部的转化,其返回值类型为 boolean; • 3. terminatePartial 没有参数,负责返回iterate函数轮转后的数据; • 4. merge 接收 terminatePartial的返回结果,合并接收的中间值,返回 类型为boolean; • 5. terminate返回最终结果。

More Related