1.hive的内部架构有四部分组成
a.用户接口:shell/CLI(Command Line Interfaces),jdbc,webUI
b.跨语言服务:Thrift server(可以使用多种不同的语言来做)
c.底层的驱动:驱动器(Driver)
编译器(Compiler)
优化器(Optimizer)
执行器(Executor)
d.元数据存储系统:Mysql
2.hive 的数据组织
a.库:
b.表:
*在创建表的时候,必须指定列分隔符: (Ctrl+A,\x01)
行分割符: (默认\n)
Ⅰ.内部表/内建表
hive的数据存储在HDFS上,有一个统一的目录,这个目录可以改变(默认/user/hive/warehouse)
Ⅱ.外部表
存储在非统一目录下的数据。
内部表和外部表区别:
删除内部表时,删除了表的定义,也删除了表的数据
删除外部表时,删除了表的定义,但不删除表的数据
*如果数据已经存在,且数据不再默认目录,创建表时要创建外部表。
Ⅲ.分区表
表示把数据进行分割开来进行存储
Ⅳ.分桶表
跟MapReduce中的HashParititoner一模一样
作用:提高连接查询的效率
提高采样的效率
Hive中的数据存储在HDFS中的某个目录中。
分区(可选):
hive的分区,就等于是细化管理一张表的所有数据。
自己手动控制区分
数据文件/分桶的数据文件:
分桶由程序控制,可能出现hash为同一值
c.视图
create view view _name as select_statment
创建视图的时候,select_statment语句没有执行
仅仅是表示创建一个SQL语句的快捷方式/别名,没有物化视图
d.数据文件
/usr/hive/warhouse/mydb.db/student/beijing.txt
表示在mydb这个数据库中创建了一张表叫做student
表中插入了一份数据叫做student.txt
表的数据其实就是HDFS上对应的表数据存储目录下的所有数据。
![](https://i-blog.csdnimg.cn/blog_migrate/713179c64edcf594aa0762cd2681b34e.png)