数据分析引擎:hive
大数据的终极目标:使用SQL语句来处理大数据
1,hadoop的体系架构中:
两个数据分析引擎:(*)Hive:支持sql
(*)Pig:支持PigLatin
一,什么是hive?
1,hive是一个基于hdfs之上的数据仓库
hive hdfs
表 目录
数据 文件
分区表 目录
分桶 文件
2,hive是基于hadoop之上的一个数据分析引擎
也就是说Hive是一个翻译器(hive 2.x以前:sql语句由hive编译成mr,hive2.x以后:sql语句由hive编译成spark程序)
3,hql是sql的一个子集,不完全支持sql
二,hive的体系架构
hive是基于在hdfs之上的,数据也是存在于我们的从节点Datanode上面的。
第一种方式:我们可以通过cli命令行写sql语句,然后由Hive Driver转换成MR任务去处理数据
第二种方式:通过jdbc的方式,需要指定url确定访问地址,而且需要通过中间人(1.x Thrift server 2.x HiveServer2 端口都是10000)把sql语句提交给我们的hiveDriver驱动
第三种方式 基于网页去执行sql,用HWI(Hive Web Interface只有hive2.2版本以前才提供,2.2之后使用HUE去使用)去提交sql到HiveDriver上去运行.
注意:hive架构中元数据要单独存储在数据库中(推荐使用mysql去存储),通过读取mysql数据库中存储的hive元数据得到hive里面存储的真正的数据(数据模型),
因为hive元数据存储了hive的表名、列名、列的类型 、分区、分桶、其他信息.
三,hive的数据模型
1,内部表:类似于Mysql,Oracle里面的表
2,外部表:只定义表结构,真正的数据存储在hdfs的某个目录上。可以通过查看外部表的方式查看到这一个路径下所有的表信息
3,分区表:提升性能(按部门分区)
你可以按某个字段去分区,比如你有张员工表,表里肯定有部门号,按照部门号分区,也就是把属于同一个部门的员工放在一张表里管理,那么在查询的时候就可以只扫描这张表,从而提升效率
4,分桶表:类似hash分区,判断某个字段值的hash是否一样,一样的话分一个桶。
例如:我们还是拿员工表举例,取部门号的hash值,把所有数据的部门hash值一样的数据分在一个桶(桶是以文件形式存在的,区是以目录形式存在的)里面。
5,视图
视图的存在是为了简化复杂的查询,就是将复杂的sql结果保留成视图,下次直接查询视图就可以得到结果。比如你把查询部门号为10的员工保留成视图,下次直接查询视图就可得到结果