因为传统数仓的不足,大家希望使用上分布式存储,也就是HDFS。然而使用HDFS后发现,基于数据库的数据仓库用SQL就能做查询,现在换到HDFS上面,只能用Mapreduce任务去做分析。给分析代码极大的不便,因此需要一个框架,使用SQL来做HDFS的查询。Hive正是基于类似SQL的语言完成对hdfs数据的查询分析的框架。
什么是Hive?
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive有什么特点?
- Hive是一个构建于Hadoop顶层的数据仓库工具,可以查询和管理PB级别的分布式数据。
- 支持大规模数据存储、分析,具有良好的可扩展性
- 某种程度上可以看作是用户编程接口,本身不存储和处理数据。
- 依赖分布式文件系统HDFS存储数据。
- 依赖分布式并行计算模型MapReduce处理数据。
- 定义了简单的类似SQL 的查询语言——HiveQL。
- 用户可以通过编写的HiveQL语句运行MapReduce任务。
- 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上。
- 是一个可以提供有效、合理、直观组织和使用数据的分析工具。
Hive表和Mysql表区别
1、查询语言不同:hive是hql语言,mysql是sql语句;
2、数据存储位置不同:hive是把数据存储在hdfs上,而mysql数据是存储在自己的系统中;
3、数据格式:hive数据格式可以用户自定义,mysql有自己的系统定义格式;
4、数据更新:hive不支持数据更新,只可以读,不可以写,而sql支持数据更新;
5、索引:hive没有索引,因此查询数据的时候是通过mapreduce很暴力的把数据都查询一遍,也造成了hive查询数据速度很慢的原因,而mysql有索引;
6、延迟性:hive延迟性高,原因就是上边一点所说的,而mysql延迟性低;
7、数据规模:hive存储的数据量超级大,而mysql只是存储一些少量的业务数据;
8、底层执行原理:hive底层是用的mapreduce,而mysql是excutor执行器;
语法区别
Hive系统架构
1、用户接口CLI
CLI,即Shell命令行。
2、JDBC/ODBC
JDBC/ODBC是 Hive的Java,与使用传统数据库JDBC的方式类似。
3、Web GUI
WebGUI是通过浏览器访问 Hive
4、Thrift Server
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++,Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,Node.js, Smalltalk, and OCaml这些编程语言间无缝结合的、高效的服务。
5、Driver(complier,optimizer Excutor)
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
6、metastore
Hive将元数据存储在数据库中(metastore),目前只支持mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
7、JobTracker&TaskTracker
Hived的大部分的查询由 MapReduce完成。其中JobTracker,用来协调作业的运行。TaskTracker,用来处理作业划分后的任务。
8、DataNode&NameNode
Hive的数据存储在 HDFS中,NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。
标签:存储,hive,查询,Hive,mysql,数据 From: https://www.cnblogs.com/syq816/p/17798202.html