Hive架构
hive架构图
- hive组件
- 用户接口
CLI、JDBC/ODBC和WebGUI。其中,CLI为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。 - 元数据存储
Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 - 解释器、编译器、优化器、执行器
解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含的查询,比如select from tbl不会生成MapRedcue任务)。
- Hive与Hadoop的关系
Hive利用HDFS存储数据,利用MapReduce查询数据
Hive与Hadoop关系图 - Hive的数据存储
1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
- db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
- table:在hdfs中表现所属db目录下一个文件夹
- external table:与table类似,不过其数据存放位置可以在任意指定路径
- partition:在hdfs中表现为table目录下的子目录
- bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件
- Hive操作符Operator
• 编译器将一个Hive QL转换操作符
• 操作符是Hive的最小的处理单元
• 每个操作符代表HDFS的一个操作或者一道MapReduce作业Operator
• Operator都是hive定义的一个处理过程
• Operator都定义有:
• protected List <Operator<? extends Serializable >> childOperators;
• protected List <Operator<? extends Serializable >> parentOperators;
• protected boolean done; // 初始化值为false
• 所有的操作构成了 Operator图,hive正是基于这些图关系来处理诸如limit, group by, join等操作
HiveSql执行流程
1、 提交sql ,交给驱动
2、驱动编译,解析相关的字段表信息
3、去metastore查询相关的信息,返回字段表信息
4、编译返回信息 发给驱动
5、驱动发送一个执行计划,交给执行引擎
6.0、DDLs 对数据库表的操作的 直接和metastore交互
create table tab(name string);6.1、把job交给job tracker 让task tracker执行 返回执行信息
6.2、完成job返回数据信息,找namenode查数据
6.3、namenode交互
select count(1) from tab;6.1、dfs ops 直接和直接去数据
select * from tab;7、返回结果信息集