首页 > 解决方案 > 当 HDFS 已经提供数据存储时,为什么要使用 Hive?

问题描述

我已经开始学习Hadoop。我知道HDFS提供分布式存储系统,而Mapreduce是用于数据处理的。现在我正在阅读Hadoop生态系统。从 Hive 的定义来看,它是一个建立在 hadoop 之上的数据仓库,用于提供类似 SQL 的接口。

我的问题是,当 hadoop 提供容错的 HDFS 时,为什么是分布式的?Hive 会取代 HDFS 吗?

hive 是否也只提供 sql 接口或存储?

标签: hadoophivehdfs

解决方案


Hive 不会取代 HDFS。Hive 为存储在 HDFS 中的数据提供 sql 类型接口。它主要用于查询和分析存储的数据。Hive 在某种意义上实际上消除了很多样板代码,如果您使用 mapreduce,您将不得不编写这些代码。例如,想想你将如何在 mapreduce 中创建不同类型的连接(左、右、分桶)或 group by 子句或任何其他 sql 子句,你就会得到答案(你的代码行很容易扩展到 100 行) . Hive 为它们提供了开箱即用的功能。您不需要在 mapreduce 中编写那些冗长的程序。Hive 已经为您做到了。

需要注意的一点是,Hive 本身在幕后使用 Mapreduce。因此,任何 group by、count、join 都只转换为 mapreduce 作业。您可以将其更改为 Tez/Spark。

对于您的第二个问题,hive 不提供任何存储,它仅使用数据库(默认为 derby,如果您想使用不同的数据库,MySQL 将是一个不错的选择)作为元存储,仅用于存储与表相关的元数据,分区、视图、存储桶等。(元数据类似于表的位置、存储在表中的数据类型、表的分区信息、创建日期、修改日期等。)您使用 hive 创建。


推荐阅读