一、数据仓库概述
1. 概念
数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合
目的:支持商业分析和管理决策
2. 典型结构
包括四个层次:数据源 -> 数据存储和管理 -> 分析和挖掘引擎 -> 应用
3. 特点
(1) 基本不会修改已保存的数据(即相对稳定)
(2) 保留所有历史数据(即可以反映历史变化)
二、Hive概述
1. 本质
Hive本身并不支持数据的存储和处理——它只相当一个面向用户的编程接口,提供了一种类SQL编程语言(HiveQL),而具体的数据存储和处理还是依靠HDFS和MapReduce。
Hive被发明出来的目的是简化使用以及方便传统SQL的移植。
2. 与其他组件的关系
(1) Hive依赖HDFS存储数据
(2) Hive依赖MapReduce处理数据
(3) Hive的ETL环节(数据抽取、转换和加载)常常借助Pig来做
——Pig是类似于Hive的工具,但是比Hive更轻量化,适合做实时交互分析(而非Hive的海量数据批处理)。Pig在ETL环节有优势,所以虽然Hive本身也可以做ETL但通常还是会借助Pig。
(4) Hive高延迟,如果需要实时查询应放弃Hive而使用HBase
在具体应用中,Hive和Pig常用于生成报表,因为报表不需要即时性,可以容忍高延迟。而在线业务等实时性任务应使用HBase等组件。Mahaut集成了许多机器学习算法,常用于数据处理,如商务智能(BI, Business Intellegence)应用的大规模数据挖掘和分析。
3. 与传统数据库对比
对比项目 | Hive | 传统数据库 |
---|---|---|
数据插入 | 支持批量导入 | 支持单条和批量导入 |
数据更新 | 不支持 | 支持 |
索引 | 支持 | 支持 |
分区 | 支持 | 支持 |
执行延迟 | 高 | 低 |
扩展性 | 好 | 有限 |
三、Hive架构
Hive的三大核心模块:用户接口模块,驱动模块Driver和元数据存储模块Metastore
1. 对外访问接口
Hive提供多种工具来实现访问
(1) CLI
一种命令行工具,可直接输入命令访问Hive
(2) HWI
Hive Web Interface,是Hive的web接口,可通过浏览器访问数据
(3) JDBC和ODBC
是标准化的开放数据库连接接口,支持很多应用的开发
(4) Thrift Server
基于Thrift架构开发的接口,外界可通过此接口实现对Hive仓库的RPC调用(Remote Procedure Call,远程过程调用,允许一台计算机程序远程调用另一台的子程序而不用关系底层网络通讯)
2. 驱动模块Driver
Hive的驱动模块目的就是把HiveQL语句转换成一系列的MapReduce作业。
Driver包含编译器、优化器和执行器。
3. 元数据存储模块Metastore
Metastore专门用于存储数据仓库的元数据。它是一个独立的关系型数据库,具体实现它的产品可以是Hive自带的Derby,也可以是其他的产品如MySQL(注意一定是关系型数据库产品)。
4. 其他访问Hive的产品
其他访问Hive的产品有Karmasphere,Hue,Qubole等。
Qubole提供了数据仓库即服务的功能。它可以把数据仓库部署在亚马逊AWS云计算平台上,而不需要本地部署了。数据仓库的集群管理都有亚马逊的服务器完成。
四、Hive HA
Hive HA即Hive High Availability,高可用性Hive解决方案。它用于解决Hive在实际应用中不稳定的问题。比如端口调用没有响应、进程丢失等。
Hive HA方案的基本思路是:
(0) Hive底层事先会存储大量的多个实例,形成资源池以供访问。
(1) 设置了统一的访问接口HA Proxy——外部并不直接访问底层实例,而是访问HA Proxy,通过它来转发请求。
(2) HA Proxy接到访问请求后,会对底层的实例进行可用性询问,即执行逻辑可用性测试。如果通过测试则把外部请求转发到这个Hive实例上去;如果没通过就把它加入黑名单(因为它不可用),然后测试下一个Hive实例,直到找到可用的实例才转发外部请求。
(3) 每隔一定周期,HA Proxy会统一处理黑名单中的实例。如果重启成功了可用了,就把它放回资源池中。