任务目的
- 了解 Hive 和数据仓库的概念
- 理解 Hive 的优缺点
- 熟知 Hive 与 Hadoop 的关系
任务清单
- 任务1:Hive 简介
- 任务2:Hive 特点
- 任务3:Hive 与 Hadoop 的关系
任务步骤
任务1:Hive 简介
1.1 Hive 概念
Facebook 为了解决海量结构化日志数据的分析而开发了 Hive,后来开源给了 Apache 软件基金会。
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能, Hive 底层是将 SQL 语句转换为 MapReduce 任务运行。
图1:Hive Logo
什么是数据仓库?
数据仓库,英文名称 Data Warehouse,简写为DW。数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。它为企业提供一定的BI(商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制。
数据仓库的输入方是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。
图2
既然数据源有多种多样,数据仓库是如何来集成不同的数据源呢?
ETL。
图3
什么是 ETL?
ETL 的英文全称是 Extract-Transform-Load 的缩写,用来描述将数据从来源迁移到目标的几个过程:
(1)Extract: 数据抽取,也就是把数据从数据源读出来。
(2)Transform: 数据转换,把原始数据转换成期望的格式和维度。如果用在数据仓库的场景下,Transform也包含数据清洗,清洗掉噪音数据。
(3)Load: 数据加载,把处理后的数据加载到目标处,比如数据仓库。
图4
主流的数据仓库有哪些?
图5
Hive又是何方神圣呢?为什么 Hive 这么流行呢?
图6
1.2 为什么使用 Hive?
- 直接使用 MapReduce 所面临的问题:
- 人员学习成本太高
- 项目周期要求太短
- MapReduce 实现复杂查询逻辑开发难度太大
- Hive 优势:
- 更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力
- 更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本
- 更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数
任务2:Hive 特点
2.1 优点
- 简单易上手:操作接口采用类 SQL 语法,提供快速开发的能力
- 可扩展性,横向扩展: Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务
- 横向扩展:通过分担压力的方式扩展集群的规模
- 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
- 延展性:Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
- 良好的容错性:可以保障即使有节点出现问题,SQL 语句仍可完成执行
2.2 缺点
- Hive 的 HQL 表达能力有限
(1)迭代式算法无法表达,比如 PageRank
(2)数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现
- Hive 的效率比较低
(1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
(2)Hive 调优比较困难,粒度较粗
- Hive 的查询延时很严重
(1)因为 MapReduce Job 的启动过程消耗很长时间,所以不能用在交互查询系统中
(2)对于处理小数据没有优势,优势在于处理大数据
任务3:Hive 与 Hadoop 的关系
本质是:将 HQL 转化成 MapReduce 程序。
图7
(1)Hive 处理的数据存储在 HDFS;
(2)Hive 分析数据底层的实现是 MapReduce,利用 MapReduce 查询数据;
(3)执行程序运行在 YARN 上。
图8