任务目的

  • 了解 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.1 初识 Hive_mapreduce

图1:Hive Logo

  什么是数据仓库?

  数据仓库,英文名称 Data Warehouse,简写为DW。数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。它为企业提供一定的BI(商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制。

  数据仓库的输入方是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。

1.1 初识 Hive_数据仓库_02

图2

  既然数据源有多种多样,数据仓库是如何来集成不同的数据源呢?

ETL

1.1 初识 Hive_数据仓库_03

图3

  什么是 ETL?

  ETL 的英文全称是 Extract-Transform-Load 的缩写,用来描述将数据从来源迁移到目标的几个过程:

  (1)Extract: 数据抽取,也就是把数据从数据源读出来。

  (2)Transform: 数据转换,把原始数据转换成期望的格式和维度。如果用在数据仓库的场景下,Transform也包含数据清洗,清洗掉噪音数据。

  (3)Load: 数据加载,把处理后的数据加载到目标处,比如数据仓库。

1.1 初识 Hive_hive_04

图4

  主流的数据仓库有哪些?

1.1 初识 Hive_数据仓库_05

图5

  Hive又是何方神圣呢?为什么 Hive 这么流行呢?

1.1 初识 Hive_mapreduce_06

图6

1.2 为什么使用 Hive?

  1. 直接使用 MapReduce 所面临的问题:
  • 人员学习成本太高
  • 项目周期要求太短
  • MapReduce 实现复杂查询逻辑开发难度太大
  1. Hive 优势:
  • 更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力
  • 更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本
  • 更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

任务2:Hive 特点

2.1 优点

  1. 简单易上手:操作接口采用类 SQL 语法,提供快速开发的能力
  2. 可扩展性,横向扩展: Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务
  • 横向扩展:通过分担压力的方式扩展集群的规模
  • 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
  1. 延展性:Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
  2. 良好的容错性:可以保障即使有节点出现问题,SQL 语句仍可完成执行

2.2 缺点

  1. Hive 的 HQL 表达能力有限

  (1)迭代式算法无法表达,比如 PageRank

  (2)数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现

  1. Hive 的效率比较低

  (1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化

  (2)Hive 调优比较困难,粒度较粗

  1. Hive 的查询延时很严重

(1)因为 MapReduce Job 的启动过程消耗很长时间,所以不能用在交互查询系统中

(2)对于处理小数据没有优势,优势在于处理大数据

任务3:Hive 与 Hadoop 的关系

本质是:将 HQL 转化成 MapReduce 程序。

1.1 初识 Hive_mapreduce_07

图7

  (1)Hive 处理的数据存储在 HDFS;

  (2)Hive 分析数据底层的实现是 MapReduce,利用 MapReduce 查询数据;

  (3)执行程序运行在 YARN 上。

1.1 初识 Hive_数据仓库_08

图8