一张图看懂Hive

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hive的元数据存储在 RDBMS中,所有其它数 据都基于HDFS存储。 Hive没有专门的数据存储 格式,也没有为数据建立 索引。Hive默认支持多种 文件格式,也支持用户自 定义格式。基于Hive的分 析过程支持从不同数据源 装载数据。
存储灵活性 可扩展性
Hive的数据处理量是PB级 的,因此它具备非常好的 水平可扩展性,支持集群 部署,支持通过简单地增 加资源以支持更大的数据 量和负载。
Database Internal Table Partition Table
External Table Bucket Table
View
【Bucket表】 选择表的某列通过Hash算 法将表横向切分成不同的文 件存储,具备这类属性的表 称之为Bucket Table。
如果业务计算需采用Map 并行方式,推荐创建 Bucket Table。
一张图看懂Hive :
1 Hive简介
Hive由Facebook实现并开源,是建立在Hadoop之上的数据仓库解决方案,支持将结构化的
数据文件映射为一张表,提供HQL(Hive SQL)实现方便高效的数据查询,底层数据存储在
HDFS上。Hive的本质是将HQL转换为MapReduce程序去执行,使不熟悉MapReduce的用
【文件存储格式】 在建表语句中通过“STORED AS FILE_FORMAT”指定。 TEXTFILE: 默认格式,数据不做压缩,磁盘开销大,数据解析开销大,结合Gzip/Bzip2使用,采用 此种方式不支持对数据进行切分,从而无法实现数据的并行操作。 SEQUENCEFILE: Hadoop API提供的一种二进制文件,使用方便,支持数据切分与压缩。有三种 压缩方式,NONE、RECORD(压缩率低)、BLOCK(推荐使用)。 RCFILE: 一种行列存储相结合的方式。首先将数据按行分块,保证同一行记录在同一个块上;其次 将块数据进行列式存储,这样有利于数据压缩和快速的列存储。采用这种格式在数据加载时耗费的性 能较大,但是具备较好的数据压缩比和查询响应,在一次写入多次读取的场景下推荐采用。 自定义格式: 当用户的数据文件格式不能被Hive识别时,通过实现InputFormat和OutputFormatຫໍສະໝຸດ Baidu 自定义输入输出格式。
【内部表】 与传统数据中的表类似,在Hive中每一个 Table都有对应的目录存取其数据。假设表在 HDFS上的存储路径为/warehouse/test,则 表test的所有数据都会存储在该路径下。当删 除表时,其元数据和表中的数据都会被删除。 例句: create table test_inner_table (key string)
例句: create table test_bucket_table (key string) clustered by (key) into 20 buckets
【视图】 与传统数据库视图类似,只读,基于基本表创建。如果基本表改变,增加数据或增加列不会影响视图 的呈现;但如果删除列或删除数据,会影响视图的呈现。基于基本表创建视图时,如果不指定视图的 列,视图的列由select语句生成。例句:create view test_view as select * from test_inner_table。
Hive基于Hadoop HDFS和MapReduce构建,天然具备较好的容错性,基于Hive实现的数据仓库可 以部署在普通机器构建的分布式集群之上。
6 Hive Vs. HBase and Hive over HBase
Hive主要是为简化编写MapReduce程序而生,而HBase是为查询而生。通过Hive的存储接口,Hive和 HBase可以整合使用。Hive通过与HBase集成后能够实现快速的查询。同时,由于HBase不支持类SQL 语句,通过与Hive集成,Hive为HBase提供SQL语法解析的外壳。
如果创建的是外 部表,则不用装 载数据,只需要 直接指定数据的 存储位置。
使用Hive查询 和分析数据
select * from test limit 10; //此请求不会转化成MR任务。 select count( distinct ip) ipcount from test group by XXX;
Hadoop
Name Node
Resource Manager
Data Node
Node Manager
Hive的用户接口层,CLI即Shell命令行,CLI 最常用。
Hive将元数据存储在数据库中,连接到这些 数据库(mysql, derby)的模式分三种:单用户 模式、多用户模式、远程服务器模式。 元数据包括Database、表名、表的列及类型、 存储空间、分区、表数据所在目录等。
容错性
执行效率
Hive基于MapReduce, 因此Sort和Groupby等都 依赖MapReduce。 MapReduce可以理解为 固化了的执行算子。此外 Hive对Join算子的支持不 够全面。在特定应用场景 下,内存拷贝和数据预处 理同样可能影响Hive的执 行效率。
可视化
Hive的可视化界面基本属 于字符终端,对用户的技 术水平要求比较高。提供 个性化的可视化展现 (GUI),是Hive改进的 重要方向。
4 使用Hive的过程
自定义函数 (可选)
创建表 创建视图
拷贝数据文件 到指定目录
集成Hive的UDF类:import org.apache.hadoop.hive.ql.exec.UDF; 引入类Jar包:add jar /hadoop/hive-0.9.0/test/lib/testudf.jar; 创建自定义函数:create temporary function mytestfun as
Hive HQL HDFS MapReduce 大 简单索引 不支持
RDBMS SQL 本地文件系统 非MapReduce 小 复杂索引 支持
更好的可扩展性: Hive可自由扩展集群规模而无需重启服务,此外 Hive还支持用户自定义函数。
良好的容错性: 当Hive节点出现问题,SQL仍可继续无中断执行。
'com.huawei.hadoop.hive.udf.mytestfun';
create table test(id int,cont string) row format delimited fields terminated by ',' stored as
textfile;
create view test_view as select * from test where id is not null; load data (local) inpath ‘/data/test’ overwrite into table test;
户很方便地利用HQL进行数据ETL操作。
表1 Hive与传统数据库对比
更友好的接口: Hive提供类SQL语法使开发人员在使用接口时几 乎没有门槛。
更低的学习成本: Hive底层自动实现SQL到MapReduce任务的转 换,大大减少开发人员学习和应用MapReduce 成本。
查询语言 数据存储 执行 数据处理规模 索引 事务
完成HQL的查询语句的词法分析、语法分析、 编译、优化以及查询计划的生成。生成的查 询计划存储在HDFS中,并由MapReduce调 用执行。
Hive的数据存储在HDFS中,针对大部分的 HQL查询请求,Hive内部自动转换为 MapReduce任务执行。
3 Hive数据模型
Hive的存储结构包括数据库、文件、表和视图。Hive并未指定专门的数据存储格式,也没有为数据 建立索引,因此用户可以非常灵活的操作Hive中的表,只要在创建表时告诉Hive数据中的列分隔符 和行分隔符,Hive就可以解析数据。Hive的元数据存储在RDBMS中,除元数据外的其它所有数据都 基于HDFS存储。Hive中的表分为内部表、外部表、分区表和Bucket表。
注意,Hive不支持 所有非等值的连 接。
5 Hive优劣分析
Hive在扩展性和容错性方面有强大优势,但是在执行引擎高效化和多样化接口与可视化等方面,与传 统并行数据仓库还存在一定差距。此外像Tenzing、DryadLINQ、Dremel、HadoopDB 等新兴数据 仓库,都有Hive值得借鉴的地方。Hive的诞生带动了Hadoop开源栈系统的进一步发展,支持用户从 零开始快速搭建数据仓库系统,推动了整个产业链的进步。
【分区表】 在Hive中表的一个Partition对应表下的一个子目 录,所有Partition的数据都存储在对应子目录中。 假设test表包含date和lang两个partition,则对 应于date=20140428, lang=zh 的HDFS子目录 为/warehouse/test/date=20140428/lang=zh。 例句: create table test_partition_table (key string) partitioned by (dt string)
执行延迟 应用场景 可扩展性 数据加载模式 数据操作
高 海量数据查询 好 读时模式(快) 数据覆盖追加
低 实时查询 差 写时模式(慢) 行级更新删除
2 Hive系统架构
Hive
CLI
JDBC/ ODBC
Web UI
Thrift Server
Meta Store
Driver
(Compiler/Optimizer/Executor)
【外部表】 与内部表不同,外部表在创 建过程中,并不会移动数据 到数据仓库的目录中,只是 与外部数据建立一个链接。 删除外部表时,只会删除该 外部表的元数据,外部数据 不会删除。因此如果想在数 据加载时跳过导入数据过程, 推荐采用外部表。例句: create external table test_external_table (key string)
存储方式 执行延迟 数据格式 应用场景
表2 Hive与HBase对比
Hive
HBase
行存
列存


结构化的
非结构化的
面向分析,append-only批处理 面向查询,行级更新
表类型
纯逻辑表(不存数据)
物理表(存储数据)
查询效率 SQL 索引 事务 行更新 数据库类型
低 提供HQL 简单索引 不支持 不支持 关系型
高 不支持,NoSQL 简单索引 仅支持单行事务 支持 非关系型
Hive与HBase的整合实现是利用 两者对外的API接口互相进行通信 的,相互通信主要是依靠 hive_hbase-handler.jar工具类。 在将HBase和Hive集成的过程中 注意确保hbase jar包的一致性。
Hive集成HBase需要在Hive表和 HBase表之间建立映射关系,也 就是Hive表的列和列类型与 HBase表的列族及列限定词建立 关联。每一个在Hive表中的列都 存在于HBase中,但反过来在 Hive表中则不需要包含所有的 HBase中的列。
相关文档
最新文档