Hive
简介
- 架构在底层Hadoop架构之上
- 依赖分布式并行计算模型MapReduce
- HiveQL借鉴了SQL语言
- 特性
- 采用批处理方式处理海量数据
- 提供了一系列对数据进行提取、转换、加载等工具
- 和传统数据库的区别
API
-
CLI:一种命令行工具
-
HWI:Hive Web Interface
-
JDBC&ODBC:开放数据库连接接口很多应用开发都支持
-
Thrift Servr:实现RPC调用
-
Metastore
- 是一个独立的关系型数据库
- 通过MaySQL数据库来存储Hivec元数据
- Hive HA
- Hive High Availability
- 解决不稳定性
工作原理
SQL->MapReduce
-
join
-
group by
-
具体过程
- 输入
- 将SQL转换为抽象语法树
- Hive驱动模块中的编译器
- 抽象语法树转换成查询块
- 重写逻辑查询计划,进行优化合并多于操作
- 逻辑计划转换成物理计划
- 选择最佳的优化
- 输出
-
Hive本身是不会生成MapReduce程序的
-
需要通过一个表示"Job执行计划"的XML文件驱动执行内需、原生的Mapper和Reducer模块
-
JobTracker通信初始化MapReduce任务,不必直接部署JoTracker所在
Impala
- 针对Hive建立在Hadoop并且延迟高的情况
- 简介
- Cloudera开发的新型查询系统
- 运行需要依赖Hive的元数据
- 参照Dremel系统
- 采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS&HBase进行交互查询
- 采用相同的SQL语法ODBC驱动程序接口
架构
- Impalad:相关查询任务
- 架构
- Query Planner
- Query Coordinator
- Query Exec Engine
- 负责协调客户端提交的查询的执行
- 与HDFS的数据节点运行在同一节点
- 给其他Impalad分配任务以及手机其他Impalad的执行结构进行汇总
- 执行其他Impalad给其分配的任务对本地HDFS&HBase进行操作
- State Store
- 创建statestored进程
- 直接存储Hive中,借助Hive存储Impala的元数据
- 采用Hive相同的元数据、相同的SQL语法、相同的ODBC驱动程序和用户接口
- 在一个Hadoop平台上可以统一部署Hive和Impala等分析工具,实现在一个平台上面可以同时满足批处理和实时查询
- 架构
查询执行过程
与Hive比较
- 使用相同的存储数据池
- 使用相同的元数据
- 对SQL的解释处理比较相似都是通过词法分析生成执行计划
- 总结
- 并不是为了取代Hive
- 与hive配合使用更佳
- 使用Hive进行数据转换处理,之后在使用Impala在Hive处理之后的结果数据集上进行快速的数据分析
编程实战
- 创建
hive> create database if not exists hive;
hive> use hive;
hive> create table if not exists usr(id bigint, name string, age int)
hive> location '/~';
hive> create view little_usr as select id,age from usr;
- 查看
hive> show databases;
hive> show databases like 'h.*'; # 所有数据库
hive> use hive;
hive> show tables;
hive> show tables in hive like 'u.*'; # 所有表和视图
- 装载
hive> load data local inpath '/~' overwirte into table usr; # 覆盖数据,不想覆盖去掉overwirte
# hdfs://~ 是从分布式文件系统
hive> load data inpath 'hdfs://~'
> overwirte into table usr;