• Hive
  • 介绍
  • Hive 就是一个数据仓库,仓库中的数据都是在 HDFS中管理的数据文件
  • Hive 支持类似 SQL 语句的功能,你可以通过这些语句来进行数据分析,Hive 会把这些语句转换成可执行的 MapReduce 代码,然后进行计算
  • 基本体系架构
  • UI(用户界面)
  • 负责与使用者的交互,我们通过 UI 向系统提交查询和其他操作
  • 驱动器(Driver)
  • 驱动器在接收 HiveQL 语句之后,创建会话来启动语句的执行,并监控执行的生命周期和进度
  • 既负责与编译器的交互,又负责与执行引擎的交互
  • 编译器(Compiler)
  • 编译器接收驱动器传来的 HiveQL,并从元数据仓中获取所需要的元数据,然后对 HiveQL 语句进行编译,将其转化为可执行的计划
  • 执行引擎(Execution Engine)
  • 执行器将执行任务。它对 Hadoop 的作业进行跟踪和交互,调度需要运行的任务。
  • 元数据仓(Metastore)
  • 元数据指的是我们构建的 Hive 表的表名、表字段、表结构、分区、类型、存储路径等等
  • 元数据通常存储在传统的关系型数据库中,比如 MySQL
  • Hive 的优点
  • 简单易上手
  • Hive 提供统一的元数据管理
  • 可扩展性好
  • 支持自定义函数(UDF)
  • Hive 的缺点
  • 速度较慢
  • Hive 的底层数据仍然是存储在 HDFS 上的,所以速度比较慢,只适合离线查询
  • 不支持单条数据操作
  • 不能任意修改 HDFS 里的数据,所以 Hive 也不行,要想修改数据只能整个文件进行替换。
  • HBase
  • 介绍
  • NoSQL 数据库
  • HBase 只是利用 Hadoop 的 HDFS 帮助其管理数据的持久化文件
  • HBase 提供实时处理数据的能力
  • HBase 的表结构
  • 行键(Row Key)
  • 行数据的唯一标识
  • 列簇(Column Family)
  • 看作是一组列,实际上一个列簇的作用也是用来管理若干个列,优化查询速度
  • 列簇的名字要尽量短,同时对于经常需要一起查询的列放在一个列簇下面
  • 列簇需要预先定义,而列不需要,如果要新增列簇就要先停用这个表
  • 单元(Cell)
  • 指的是一个确定的存储单元。通过 Row Key、列簇 、列名以及版本号来确定。
  • 时间戳(Timestamp)
  • 用来标记前面说的一份数据的不同版本。
  • 区域(Region)
  • 一个 Region 可以看作是多行数据的集合
  • HBase 的优缺点
  • 实时计算
  • 容量大性能高
  • 列存储,无须设定表结构
  • HBase 不能支持条件查询,也不能用 SQL 语句进行查询。在使用的时候,一般只能使用Row Key 来进行查询。
  • HBase 与 Hive 的使用
  • HBase 支持实时随机查询的特性,主要使用 HBase 进行大量的明细数据的随机实时查询
  • Hive 本身并不解决存储的问题,它只是把 HDFS 中的结构化数据进行了展示,而最核心的功能是实现了对这些结构化文件的查询