Hive

发布时间 2023-10-30 17:28:10作者: 做个读书人

  因为传统数仓的不足,大家希望使用上分布式存储,也就是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管理存储的数据。