Hadoop
HDFS 存储数据
YARN 资源管理
MapReduce 处理数据
Mapreduce is hard to program
【八股文】格式编程,三大部分
No schema,lack of query languages
- 数据分析,针对DBA、SQL语句,如何对数据分析
- MapReduce编程成本高
- FaceBook实现并开源Hive
日志
日志内容,统一的规范,每一行数据就是一条数据(RDBMS)
很多列,统一的标识符,进行分割
schema
- 模式
- 约束
Hive 数据仓库
- 处理的数据存储在HDFS
- 分析数据底层的实现MapReduce
- 执行程序运行的YARN
RDBMS
- 表的概念
create table bf_log(
ip string,
user string,
date string,
....
)
分析
select * fro bf_log limit 10;
select substring(ip,0,4) ip_prex from bg_log;
SQL on Hadoop
ETL
抽取 转换 加载
什么是Hive
由FaceBook开源用于解决海量结构化日志的数据统计;
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能;
构建在Hadoop之上的数据仓库;
- 使用HQL 作为查询接口
- 使用HDFS存储
- 使用MapReduce计算
本质是:将HQL转化成MapReduce程序
灵活性和扩展性较好;支持UDF,自定义存储格式等
适合离线数据处理。
Hive架构
Hive架构图.png
- 用户接口:client
CLI(hive shell)、JDBC/ODBC(java访问hive),webui(浏览器访问Hive) - 元数据:metastore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的Derby数据库中,推荐使用MySQL存储MetaStore; - Hadoop
使用HDFS进行存储,使用MapReduce进行计算 - 驱动器:Driver
包含解析器、编译器、优化器、执行器;
- 解析器
将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否有出现); - 编译器
将AST编译生成逻辑执行计划; - 优化器
对逻辑执行计划进行优化; - 执行器
把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/TEZ/Spark;
Hive的优点
- 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
- 避免了去写MapReduce,减少开发人员的学习成本;
- 统一的元数据管理,可与impala/spark等共享元数据
- 易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数)
Hive的使用场景
- 数据的离线处理;比如:日志分析,海量结构化数据离线分析。
- Hive的执行延迟比较高,因此Hive常用语数据分析的,对实时性要求不高的场合
- Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。