编辑推荐: |
本文介绍了数据仓库和Hive的概念,Hive与Hadoop生态系统中其他组件的关系,Hive的优缺点,Hive在企业中的部署和作用以及Hive功能与架构等相关内容。
本文来自csdn,由火龙果软件Luca编辑、推荐。 |
|
Hive概述
数据仓库的概念:
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time
Variant)的数据集合,用于支持管理决策。
传统数据仓库面临的挑战:
无法满足快速增长的海量数据存储需求。
无法有效处理不同类型的数据。
计算和处理能力不足。
Hive简介:
Hive是一个构建于Hadoop顶层的数据仓库工具,可以查询和管理PB级别的分布式数据。
支持大规模数据存储、分析,具有良好的可扩展性
某种程度上可以看作是用户编程接口,本身不存储和处理数据。
依赖分布式文件系统HDFS存储数据。
依赖分布式并行计算模型MapReduce处理数据。
定义了简单的类似SQL 的查询语言——HiveQL。
用户可以通过编写的HiveQL语句运行MapReduce任务。
可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上。
是一个可以提供有效、合理、直观组织和使用数据的分析工具。
Hive具有的特点非常适用于数据仓库。
(1)采用批处理方式处理海量数据
Hive需要把HiveQL语句转换成MapReduce任务进行运行。
数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化。
(2)提供适合数据仓库操作的工具
Hive本身提供了一系列对数据进行**提取、转换、加载(ETL)**的工具,可以存储、查询和分析存储在Hadoop中的大规模数据。
这些工具能够很好地满足数据仓库各种应用场景。
(3)支持MapReduce,Tez,Spark等多种计算引擎。
(4)可以直接访问HDFS文件以及HBase。
(5)易用易编程。
Hive与Hadoop生态系统中其他组件的关系:
图:Hadoop生态系统
Hive依赖于HDFS 存储数据
Hive依赖于MapReduce 处理数据
在某些场景下Pig可以作为Hive的替代工具
HBase 提供数据的实时访问
Hive的优缺点:
Hive的优点:
高可靠、高容错:HiveServer采用集群模式。双MetaStor。超时重试机制。
类SQL:类似SQL语法,内置大量函数。
可扩展:自定义存储格式,自定义函数。
多接口:Beeline,JDBC,ODBC,Python,Thrift。
Hive的缺点:
延迟较高:默认MR为执行引擎,MR延迟较高。
不支持雾化视图:Hive支持普通视图,不支持雾化视图。Hive不能再视图上更新、插入、删除数据。
不适用OLTP:暂不支持列级别的数据添加、更新、删除操作。
暂不支持存储过程:当前版本不支持存储过程,只能通过UDF来实现一些逻辑处理。
Hive与传统数据库的对比分析:
Hive在很多方面和传统的关系数据库类似,但是它的底层依赖的是HDFS和MapReduce,所以在很多方面又有别于传统数据库。
Hive在企业中的部署和作用:
Hive在企业大数据分析平台中的应用:
图:企业中一种常见的大数据分析平台部署框架
Hive在Facebook公司中的应用:
基于Oracle的数据仓库系统已经无法满足激增的业务需求
Facebook公司开发了数据仓库工具Hive,并在企业内部进行了大量部署
Hive在FusionInsight中的位置:
图:Hive在FusionInsight中的位置
Hive是一种数据仓库处理工具,使用类SQL的HiveQL语言实现数据查询功能,所有的Hive数据都存储在HDFS中。
Hive应用场景:
数据挖掘:用户行为分析;兴趣分区;区域展示;
非实时分析:日志分析;文本分析。
数据汇总:每天/每周用户点击数,流量统计。
数据仓库:数据抽取,加载,转换(ETL)。
Hive功能与架构
Hive系统架构:
图:Hive系统架构
用户接口模块包括CLI、HWI、JDBC、ODBC、Thrift Server。
驱动模块(Driver)包括编译器、优化器、执行器等,负责把HiveSQL语句转换成一系列MapReduce作业。
元数据存储模块(Metastore)是一个独立的关系型数据库(自带derby数据库,或MySQL数据库)。
FusionInsight HD中Hive的架构:
图:FusionInsight中Hive的架构
Hive分为三个角色:HiveServer、MetaStore、WebHcat。
HiveServer:将用户提交的HQL语句进行编译,解析成对应的Yarn任务,Spark任务或者HDFS操作,从而完成数据的提取,转换,分析。
MetaStroe:提供元数据服务。
WebHcat:对外提供基于Htpps洗衣的元数据访问、DDL查询等服务。
HCatalog架构:
图:HCatalog架构
HCatalog包括Hcatalog Client和Hcatalog Server:
HCatalog CLient包括命令行工具CLI和Clent jar包(用于给Pig, MR提供元数据读写支持)。
HCatalog通过Hive提供的HiveMetaStoreClent对象来间接访问MetaStore。
HCatalog对外提供Hcatloader,HCatinputFormat来读取数据;提供HCatStore,HCatOutputFormat来写入数据。
WebHCat架构:
图:WebHCat架构
WebHCat提供Rest接口,是用户能够通过安全的HTTPS协议执行以下操作:
执行Hive DDL操作。
运行Hive HQL任务。
运行MapReduce任务。
Hive数据存储模型:
图:Hive数据存储模型
分区:数据表可以按照某个字段的值划分分区。
每个分区是一个目录。
分区数量不固定。
分区下可再有分区或者桶。
桶:数据可以根据桶的方式将不同数据放入不同的桶中。
每个桶是一个文件。
建表时指定桶个数,桶内可排序。
数据按照某个字段的值Hash后放入某个桶中。
Hive可以创建托管表和外部表:
默认创建托管表,Hiva会将数据移动到数据仓库的目录。
创建外部表,这时Hiva会到仓库目录以外的位置访问数据。
如果所有处理都由Hive完成,建议使用托管表。
如果要用Hive和其他工具来处理同一个数据集,建议使用外部表。
Hive支持的函数:
Hive内置函数:
数据函数:如round(),fllor(), abs(), rand()等。
日期函数:如to_date(), month(), day().
字符串函数,如trim(), length(), substr()等。
UDF(User-Defined Funcation)用户自定义函数。
Hive工作原理:
(1)SQL语句转换成MapReduce作业的基本原理:
图:join的实现原理
图:group by实现原理
存在一个分组(Group By)操作,其功能是把表Score的不同片段按照rank和level的组合值进行合并,计算不同rank和level的组和值分别有几条记录。
(2)Hive中SQL查询转换成MapReduce作用的过程:
当用户向Hive输入一段命令或查询时,Hive需要与Hadoop交互工作来完成该操作:
驱动模块接收该命令或查询编译器
对该命令或查询进行解析编译
由优化器对该命令或查询进行优化计算
该命令或查询通过执行器进行执行
详细如果如下:
图:SQL查询转换成MapReduce作业的过程
第1步:由Hive驱动模块中的编译器对用户输入的SQL语言进行词法和语法解析,将SQL语句转化为抽象语法树的形式。
第2步:抽象语法树的结构仍很复杂,不方便直接翻译为MapReduce算法程序,因此,把抽象语法书转化为查询块。
第3步:把查询块转换成逻辑查询计划,里面包含了许多逻辑操作符。
第4步:重写逻辑查询计划,进行优化,合并多余操作,减少MapReduce任务数量。
第5步:将逻辑操作符转换成需要执行的具体MapReduce任务。
第6步:对生成的MapReduce任务进行优化,生成最终的MapReduce任务执行计划。
第7步:由Hive驱动模块中的执行器,对最终的MapReduce任务进行执行输出。
几点说明:
当启动MapReduce程序时,Hive本身是不会生成MapReduce算法程序的。
需要通过一个表示“Job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块。
Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在JobTracker所在的管理节点上执行。
通常在大型集群上,会有专门的网关机来部署Hive工具。网关机的作用主要是远程操作和管理节点上的JobTracker通信来执行任务。
数据文件通常存储在HDFS上,HDFS由名称节点管理。
#Hive增强特性
Hive增强特性-Colocation:
Colocation(同分布):将存在关联关系的数据或可能进行管理操作的数据存储在相同的存储节点上。
文件级同分布实现文件的快速访问,避免了因数据搬迁带来的大量网络开销。
Hive增强特性–Hbase记录批量删除:
在Hive on HBase功能汇总,FusionInsight HD Hive提供了对HBase表的单条数据的删除功能,通过特定的语法,Hive可以将HBase表中符合条件的一条或多条数据批量清除。
Hive增强特性–流控特性:
通过流控特性,可以实现:
当前已经建立连接数据阈值控制。
每个用户已经建立的连接数阈值控制。
单位时间内所有建立的连接数阈值控制。 |