1. 数据仓库工具:Hive【重点】
  2. 数据交互工具:Hue
  3. 数据采集工具:Flume
  4. 数据迁移工具:Sqoop

HDFS => 海量数据的存储
MapReduce => 海量数据的分析和处理
YARN => 集群资源的管理和作业调度

1 、Hive产生背景

直接使用MapReduce处理大数据,将面临以下问题:

  • MapReduce 开发难度大,学习成本高(wordCount => Hello World)
  • Hdfs文件没有字段名、没有数据类型,不方便进行数据的有效管理
  • 使用MapReduce框架开发,项目周期长,成本高

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表 (类似于RDBMS中的表),并提供类SQL查询功能;Hive是由Facebook开源,用于解决海量结构化日志的数据统计。

  • Hive本质是:将 SQL 转换为 MapReduce 的任务进行运算
  • 底层由HDFS来提供数据存储
  • 可以将Hive理解为一个:将 SQL 转换为 MapReduce 任务的工具

数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,主要用于管理决策。(数据仓库之父比尔·恩门,1991年提出)。

  • 数据仓库的目的:构建面向分析的、集成的数据集合;为企业提供决策支持
  • 数据仓库本身不产生数据,数据来源于外部
  • 存储了大量数据,对这些数据的分析和处理不可避免的用到Hive

2、Hive和RDBMS对比

由于 Hive 采用了类似SQL的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive和传统的关系数据库除了拥有类似的查询语言,再无类似之处。

Hive RDBMS
查询语言相似 HQL SQL
数据规模 存储海量数据 只能处理有限的数据集
执行引擎不同 MR/Tez/Spark/Flink 自己的执行引擎
数据存储 HDFS 本地文件系统、裸设备
速度 相对慢(MR/数据量) 相对块
可扩展性 支持水平扩展 支持垂直扩展,对水平不友好
数据更新 对数据更新不友好(HDFS) 支持频繁、快速更新

3、Hive优缺点

优点

  • 学习成本低,Hive提供了类似SQL的查询语言,开发人员能快速上手
  • 处理海量数据,底层执行的是MapReduce任务
  • 系统可以水平扩展,底层基于Hadoop
  • 功能可以扩展,Hive允许用户自定义函数
  • 良好的容错性,某个节点发生故障,HQL任然可以正常完成
  • 统一的元数据管理。元数据(有哪些表、字段、类型)

缺点

  • HQL表达能力有限
  • 迭代计算无法表达
  • Hive执行效率不高(基于MR的执行引擎)
  • Hive自动生成的MapReduce作业,某些情况下不够智能
  • Hive调优困难

4、Hive架构

image.png
1. 用户接口 CLI(Common Line Interface):Hive的命令行,用于接收HQL,并返回结果;
JDBC/ODBC:是指Hive的java实现,与传统数据库JDBC类似;
WebUI:是指可通过浏览器访问Hive;
2. Thrift Server
Hive可选组件,是一个软件框架服务,允许客户端使用包括Java、C++、Ruby和其他很多种语言,通过编程的方式远程访问Hive;
3. 元数据管理(MetaStore) Hive将元数据存储在关系数据库中(如mysql、 derby)。
Hive的元数据包括:数据库名、表名及类型、字段名称及数据类型、 数据所在位置等;
4. 驱动程序(Driver)

  • 解析器 (SQLParser) :使用第三方工具(antlr)将HQL字符串转换成抽象语法树(AST);对AST进行语法分析,比如字段是否存在、SQL语义是否有误、表是否存在;
  • 编译器 (Compiler) :将抽象语法树编译生成逻辑执行计划;
  • 优化器 (Optimizer) :对逻辑执行计划进行优化,减少不必要的列、使用分区等;
  • 执行器 (Executr) :把逻辑执行计划转换成可以运行的物理计划;