第7讲:Hive数据仓库ppt课件.ppt

上传人:牧羊曲112 文档编号:1428931 上传时间:2022-11-23 格式:PPT 页数:49 大小:2.79MB
返回 下载 相关 举报
第7讲:Hive数据仓库ppt课件.ppt_第1页
第1页 / 共49页
第7讲:Hive数据仓库ppt课件.ppt_第2页
第2页 / 共49页
第7讲:Hive数据仓库ppt课件.ppt_第3页
第3页 / 共49页
第7讲:Hive数据仓库ppt课件.ppt_第4页
第4页 / 共49页
第7讲:Hive数据仓库ppt课件.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《第7讲:Hive数据仓库ppt课件.ppt》由会员分享,可在线阅读,更多相关《第7讲:Hive数据仓库ppt课件.ppt(49页珍藏版)》请在三一办公上搜索。

1、第7讲 Hive数据仓库,数据分析者面临的问题,数据日趋庞大,无论是入库和查询,都出现性能瓶颈 用户的应用和分析结果呈整合趋势,对实时性和响应时间要求越来越高 使用的模型越来越复杂,计算量指数级上升,数据分析者期待的解决方案,完美解决性能瓶颈,在可见未来不容易出现新瓶颈 过去所拥有的技能可以平稳过渡。比如SQL、R 转移平台的成本有多高?平台软硬件成本,再开发成本,技能再培养成本,维护成本,Hive简介,起源自facebook由Jeff Hammerbacher领导的团队 构建在Hadoop上的数据仓库框架 设计目的是让SQL技能良好,但Java技能较弱的分析师可 以查询海量数据 2008年f

2、acebook把hive项目贡献给Apache,Hive,数据仓库工具。可以把Hadoop下的原始结构化数据变成Hive中的表 支持一种与SQL几乎完全相同的语言HiveQL。除了不支持更新、索引和事务,几乎SQL的其它特征都能支持 可以看成是从SQL到Map-Reduce的映射器 提供shell、JDBC/ODBC、Thrift、Web等接口 Hive不适合用于联机事务处理,也不提供实时查询功能。最适合应用在基于大量不可变数据的批处理作业。,Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在

3、 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的mapper 和 reducer 无法完成的复杂的分析工作。,Hive现状,Hadoop生态圈中的重要项目 企业级数据仓库的主流架构之一 解决“即席查询”的问题 注意Cloudera的Impala项目,号称比Hive要快3-30倍 兼容SQL是目前大数据产品的风向标,体系结构图,1、用户接口主要有三个:命令行(CLI),客户端(Client) 和WEB

4、界面( WUI)。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 服务。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏览器访问 Hive。2、元数据存储。Hive 将元数据存储在数据库中,如 mysql、derby嵌入式数据库。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。3、执行。解释器、编译器、优化器完成 HiveQL 查询语句从词法分析、语法分析

5、、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。4、 HDFS 存储。Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 任务)。Hive 元数据存储Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库: Single User Mode: 此模式连接到一个 In-memory 的数据库 Derby,一般用于 Unit Test。,Hive安装,内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会

6、话连接 本地独立模式:在本地安装Mysql,把元数据放到Mysql内 远程模式:元数据放置在远程的Mysql数据库,内嵌模式安装,下载并解压Hive,设置环境变量 (修改profile文件),配置文件,hive-env.sh,cp hive-env.sh.template hive-env.sh,hive-site.xml,cp hive-default.xml.template hive-site.xml,启动hive,Hive命令行启动方式:直接输入/hive/bin/hive命令,或者输入hive-service cli命令。Hive web界面启动方式:输入hive-service h

7、wi命令。Hive采用远程服务启动方式:远程服务的端口号为10000,采用hive-service hiveserver命令。Hive采用远程后台启动方式:关闭Hive终端,但是Hive服务不退出,采用nohup hive-service hiveserver命令。,简单建删表测试,一个常见错误,解决方法,修改hadoop-env.sh,Hive安装:独立模式,可参考网络资源: http:/ http:/,Hive的服务,Hive不仅仅是一个shell,通过配置,还可以提供Thrift服务器、Web接口、元数据和JDBC/ODBC服务,具有强大的功能和良好的可扩展性。1、Hive shell

8、执行HiveQL(大约相当于SQL 92标准) 查看或临时设置Hive参数,只对当前会话有效 创建函数 导入jar包,HiveQL 查询语言,HiveQL是一种类似SQL的语言,HiveQL 查询语言,1.查询语言。由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。 2.数据存储位置。Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。 3.数据格式。Hive 中没有定义专门的数据

9、格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”t”、”x001)、行分隔符 (”n”)以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile)。由于在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换,因此,Hive 在加载的过程中不会对数据本身进行任何修改,而只是将数据内容复制或者移动到相应的 HDFS 目录中。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。,HiveQL 查询

10、语言,4.数据更新。由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO . VALUES 添加数据,使用 UPDATE . SET 修改数据 5.索引。之前已经说过,Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些 Key 建立索引。Hive 要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce 的引入, Hive 可以

11、并行访问数据,因此即使没有索引,对于大数据量的访问,Hive 仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据 的访问延迟较高,决定了 Hive 不适合在线数据查询。 6.执行。Hive 中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的(类似 select * from tbl 的查询不需要 MapReduce)。而数据库通常有自己的执行引擎。,HiveQL 查询语言,7.执行延迟。之前提到,Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个

12、导致 Hive 执行延迟高的因素是 MapReduce 框架。由于 MapReduce 本身具有较高的延迟,因此在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。 8.可扩展性。由于 Hive 是建立在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是一致的。而数据库由于 ACID 语义的严格限制,扩展行非常有限。9.数据规模。由于 Hive 建立在集群上并可以利用 MapReduce 进行并行

13、计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。,HiveQL 查询语言,Hive安装与部署成功之后,在命令行输入hive进入shell。1、退出shell:Hivequit;2、查看已有表 Hiveshow tables ;3、查看表结构Hivedescribe tablename ;,建表,Create Table CREATE EXTERNAL TABLE IF NOT EXISTS table_name (col_name data_type COMMENT col_comment, .) COMMENT table_comment PARTITIONED BY

14、 (col_name data_type COMMENT col_comment, .) CLUSTERED BY (col_name, col_name, .) SORTED BY (col_name ASC|DESC, .) INTO num_buckets BUCKETS ROW FORMAT row_format STORED AS file_format LOCATION hdfs_path,CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。EXTERNAL 关键字可以让用户创建一个外部表,

15、在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。LIKE 允许用户复制现有的表结构,但是不复制数据。用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过

16、SerDe 确定表的具体的列的数据。如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。有分区的表可以在创建的时候使用 PARTITIONED BY 语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。而且,表和分区都可以对某个列进行 CLUSTERED BY 操作,将若干个列放入一个桶(bucket)中。也可以利用SORT BY 对数据进行排序。这样可以为特定应用提高性能。表名和列名不区分大小写,SerDe 和属性名区分大小写。表和列的注释是字符串。,创建表,创建表,列类型,Hive支持的数据类

17、型如下:原生类型:TINYINTSMALLINTINTBIGINTBOOLEANFLOATDOUBLESTRINGBINARY(Hive0.8.0以上才可用)TIMESTAMP(Hive0.8.0以上才可用)复合类型:arrays:ARRAYmaps:MAPstructs:STRUCTunion:UNIONTYPE,Hive中表的类型,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型

18、:Table,External Table,Partition,Bucket。(1)普通表普通表的创建就是一个表对应一个表名和表名对应的文件。(2)外部表建表的同时指定一个指向实际数据的路径,创建内部表时会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。删除表时,内部表的元数据和数据一起被删,而外部表只删除元数据,不删除数据。(3)分区表在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:pvs 表中包含 ds 和 city 两个 Partition,则对应于 ds

19、= 20090801, ctry = US 的 HDFS 子目录为:/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA,加载数据,Hive不支持一条一条用insert语句进行插入操作,也不支持update操作。数据以load的方式加载到建立好的表中,一旦导入,不可修改。LOAD DATA LOCAL INPATH filepath OVERWRITE INTO TABLE tablename PARTITION (partcol1=val1, partc

20、ol2=val2 .) Load 操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置。filepath 可以是: 相对路径,例如:project/data1 绝对路径,例如: /user/hive/project/data1 包含模式的完整 URI,例如:hdfs:/namenode:9000/user/hive/project/data1,加载的目标可以是一个表或者分区。如果表包含分区,必须指定每一个分区的分区名。filepath 可以引用一个文件(这种情况下,Hive 会将文件移动到表所对应的目录中)或者是一个目录(在这种情况下,Hive 会将目录中的所有文件移动至表所

21、对应的目录中)。如果指定了 LOCAL,那么: load 命令会去查找本地文件系统中的 filepath。如果发现是相对路径,则路径会被解释为相对于当前用户的当前路径。用户也可以为本地文件指定一个完整的 URI,比如:file:/user/hive/project/data1. load 命令会将 filepath 中的文件复制到目标文件系统中。目标文件系统由表的位置属性决定。被复制的数据文件移动到表的数据对应的位置。如果没有指定 LOCAL 关键字,如果 filepath 指向的是一个完整的 URI,hive 会直接使用这个 URI。否则: 如果没有指定 schema 或者 authorit

22、y,Hive 会使用在 hadoop 配置文件中定义的 schema 和authority,fs.default.name 指定了 Namenode 的 URI。如果路径不是绝对的,Hive 相对于 /user/ 进行解释。Hive 会将 filepath 中指定的文件内容移动到 table (或者 partition)所指定的路径中。如果使用了 OVERWRITE 关键字,则目标表(或者分区)中的内容(如果有)会被删除,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中。如果目标表(分区)已经有一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文

23、件所替代。,插入数据,SELECT查询,SELECT ALL | DISTINCT select_expr, select_expr, . FROM table_reference WHERE where_condition GROUP BY col_list CLUSTER BY col_list | DISTRIBUTE BY col_list SORT BY col_list LIMIT number 一个SELECT语句可以是一个union查询或一个子查询的一部分table_reference是查询的输入,可以是一个普通表、一个视图、一个join或一个子查询简单查询。例如,下面这一语句

24、从t1表中查询所有列的信息。SELECT * FROM t1 WHERE Clause WHERE Clause是一个布尔表达式,不支持where子句中的in,exit或子查询,使用ALL和DISTINCT选项区分对重复记录的处理。默认是ALL,表示查询所有记录。DISTINCT表示去掉重复的记录。hive SELECT col1, col2 FROM t1 1 3 1 3 1 4 2 5 hive SELECT DISTINCT col1, col2 FROM t1 1 3 1 4 2 5,基于Partition的查询一般 SELECT 查询会扫描整个表(除非是为了抽样查询)。但是如果一个表

25、使用 PARTITIONED BY 子句建表,查询就可以利用分区剪枝(input pruning)的特性,只扫描一个表中它关心的那一部分。Hive 当前的实现是,只有分区断言出现在离 FROM 子句最近的那个WHERE 子句中,才会启用分区剪枝。例如,如果 page_views 表使用 date 列分区,以下语句只会读取分区为2008-03-01的数据。 SELECT page_views.* FROM page_views WHERE page_views.date = 2008-03-01 AND page_views.date = 2008-03-31;,查询,连接,HiveQL的连接分

26、为内连接、左向外连接、右向外连接、全外连接和半连接5种。例如:Select userinfor.*,choice.* from userinfor join choice on (userinfor .id= choice .userid);,表连接,JDBC/ODBC接口,用户可以像连接传统关系数据库一样使用JDBC或ODBC连接Hive 目前还不成熟,JDBC的具体连接过程,1.使用jdbc的方式连接Hive,首先做的事情就是需要启动hive的Thrift Server,否则连接hive的时候会报connection refused的错误。 启动命令如下: hive -service hi

27、veserver 2.新建java项目,然后将hive/lib下的所有jar包和hadoop的核心jar包hadoop-0.20.2-core.jar添加到项目的类路径上。,样板代码,public static void main(String args) throws Exception / TODO Auto-generated method stub Class.forName(org.apache.hadoop.hive.jdbc.HiveDriver); String dropSql=drop table pokes; String createSql=create table po

28、kes (foo int,bar string); String insertSql=load data local inpath /home/zhangxin/hive/kv1.txt overwrite into table pokes; String querySql=select bar from pokes limit 5; Connection connection=DriverManager.getConnection(jdbc:hive:/localhost:10000/default, , ); Statement statement=connection.createSta

29、tement(); statement.execute(dropSql); statement.execute(createSql); statement.execute(insertSql); ResultSet rs=statement.executeQuery(querySql); while(rs.next() System.out.println(rs.getString(bar); ,Web接口,假设hive部署在10.20.151.7机器上,conf/hive-default.xml文件都是默认值,那么我们直接在浏览器中输入:http:/10.20.151.7:9999/hwi/ 就可以访问了,元数据,NUCLEUS_TABLES A DBS SEQUENCE_TABLE SERDES TBLS SDS PARTITION_KEYS COLUMNS BUCKETING_COLS SD_PARAMS SORT_COLS SERDE_PARAMS TABLE_PARAMS,Hive的数据放在哪儿?,数据在HDFS的warehouse目录下,一个表对应一个子目录 桶与reduce 本地的/tmp目录存放日志和执行计划,Hive的数据放在哪儿?,谢 谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号