Hive简介
- hive的起源
许多公司需要对数据进行分析、存储。但是mapreduce程序去分析数据需要按照八股文格式去编写代码,但是当时很多公司没有很多的java程序员,并且学习mapreduce成本也高。随后facebook公司开发了hive,拥有学习成本低、入门快的特点;只需要你懂sql语句,不会mapreduce编程也能做大数据分析。 - hive的功能
- 可以将结构化的数据文件映射成一张表,并提供类SQL查询功能
- 可以对数据提取转化加载(ETL)
- hive的特性
- Hive是构建在Hadoop之上的,所有数据都是存储在HDFS中。
- 分析查询SQL语句被转化为MapReduce任务在Hadoop框架中运行。
- Hive的执行延迟高,不适合做实时的数据分析。
- 灵活性高,可以自定义用户函数(UDF)和自定义存储格式。
- 使用HQL作为查询接口。
- 易扩展,因为是基于HDFS+MapReduce,集群扩展容易。
Hive架构
- 用户接口主要有:CLI,Clinet,WUI三个组成。Cli(commmand line interface)为命令行接口。Client是Hive的客户端,用户连接至Hive Server。在启动Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。WUI是通过浏览器访问Hive,使用之前要启动hwi服务。
- Meta store是用来存储Hive的元数据,默认元数据是存储在derby关系型数据库中,但是derby是能同时只有一个实例,也就是说不能多个命令行接口同时使用,所以可以设置成mysql。元数据其中包括,数据库和表的hdfs位置、名称、列的属性等信息。为什么会把元数据的存储设置为单独的,而不是存储在HIVE里面?是为了把元数据分离出来,提高了数据的安全性和方便管理。
- Parser、Optimizer、Execution分别用来作HQL的解析器、编译优化、生成执行计划,然后由MapReduce调用执行。但是不是所有的HQL命令都会生成mapreduce任务,例如select * from table_name就不会生成。
Hive与关系型数据库的差别
- 在关系型数据库中,向表中加载数据时,因为会涉及到对列键索引和对数据进行压缩,会检查加载的数据文件格式是否与表存储数据的格式是否相同,如果不同,则会加载数据失败。但是Hive在加载数据时不会对数据格式进行检查,而是在查询时去检查。虽然这样查询效率会降低,而且数据量很大,与hive只适合离线数据存储分析相对应。
- 关系型数据库可以对表中具体的某一行进行增删改查操作、索引、事物,但是hive不支持,只能覆盖原数据和追加数据。因为hive本来是用来应对大数据分析存储,对某一行进行操作,效率会非常的差。