数据仓库中Hive、Mysql、Hadoop之间的关联

1. Hive 与 HDFS 之间的联系

(1)hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。

(2)Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

2. Hive的特点

       官网介绍:The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL 。 也就是说:hive数据仓库软件使用sql读取、写入和管理驻留在分布式存储中的大型数据集。说明Hive的开发语言是SQL,而实际我们常见的分布式计算框架也就spark,MapReduce,Storm等,那么Hive如何使用SQL语言去进行分布式计算呢?

2.1 Hive可以看做是MapReduce的客户端

         因为Hive的底层运算是MapReduce计算框架,Hive只是将可读性强,容易编程的SQL语句通过Hive软件转换成MR程序在集群上执行。hive可以看做mapreduce客户端,能用mapreduce程序完成的任务基本都可以对应的替换成hql(Hive SQL)编写的hive任务。所以因为hadoop和hdfs的本身设计的特点,也限制了hive所能胜任的工作特性。Hive最大的限制特点就是不支持基于行记录的更新,删除,增加。但是用户可以通过查询生成新表,或者将查询结果导入文件中来“实现”hive基于行记录的操作。

2.2 Hive是批处理系统

    因为mapreduce是批处理系统,所以hive也是基于海量数据的批处理的。同样因为mapreduce具有高延迟(1.启动时间长2.中间结果放在本地而非内存中),造成hive执行也耗时过长。

2.3 Hive不支持事物

   所以不支持OLTP(连接事物处理),更适用与OLAP(联机分析处理),同样Hive还有不支持很多SQL的用法。

3.  Hive 与 关系型数据库 的区别

使用 hive 的命令行接口,感觉很像操作关系数据库,但是 hive 和关系数据库还是有很大的不同,下面我就比较下 hive 与关系数据库的区别,具体如下:

    Hive 和关系数据库存储文件的系统不同,Hive 使用的是 hadoop 的 HDFS(hadoop 的分布式文件系统),关系数据库则是服务器本地的文件系统;

    hive 使用的计算模型是 mapreduce,而关系数据库则是自己设计的计算模型;

    关系数据库都是为实时查询的业务进行设计的,而 Hive 则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致 Hive 的应用场景和关系数据库有很大的不同;

    Hive 很容易扩展自己的存储能力和计算能力,这个是继承 hadoop 的,而关系数据库在这个方面要比数据库差很多。

扫描二维码关注公众号,回复: 5385186 查看本文章

 4. hive和hdfs,mysql,mapreduce之间的关系

  1. 举例说明hive,mysql和hdfs之间的关系

          下面是一个完成的流程,从hive中创建表,到往表里导入数据,1-9说明了hive,mysql,hdfs之间的流程。

   2. 要点总结

  1.Hive不存储数据,Hive需要分析计算的数据,以及计算结果后的数据实际存储在分布式系统上,如HDFS上。

  2.Hive某种程度来说也不进行数据计算,只是个解释器,只是将用户需要对数据处理的逻辑,通过SQL编程提交后解释成MapReduce程序,然后将这个MR程序提交给Yarn进行调度执行。所以实际进行分布式运算的是MapReduce程序

  3.因为Hive为了能操作HDFS上的数据集,那么他需要知道数据的切分格式,如行列分隔符,存储类型,是否压缩,数据的存储地址等信息。为了方便以后操作所以他需要将这些信息通过一张表存储起来,然后将这张表(元数据)存储到mysql中。为了啥存储到mysql里(实际是远程mysql),因为hive本身就是一个解释器,所以他不存储数据。
本文来源于  Hive 与 HDFS 之间的联系、Hive 与 关系型数据库的区别

                    数据仓库中mysql,hive,hdfs,mapreduce之间的关系

猜你喜欢

转载自blog.csdn.net/qq_32572085/article/details/86160807