【发布时间】:2018-07-26 07:15:15
【问题描述】:
我已经开始学习Hadoop了。我知道HDFS提供分布式存储系统,而Mapreduce是用于数据处理的。现在我正在阅读Hadoop生态系统。 从 Hive 的定义来看,它是一个基于 hadoop 构建的数据仓库,提供类似 SQL 的接口。
我的问题是,当 hadoop 提供容错的 HDFS 时,为什么是分布式的? Hive 会取代 HDFS 吗?
hive 是否也只提供 sql 接口或存储?
【问题讨论】:
我已经开始学习Hadoop了。我知道HDFS提供分布式存储系统,而Mapreduce是用于数据处理的。现在我正在阅读Hadoop生态系统。 从 Hive 的定义来看,它是一个基于 hadoop 构建的数据仓库,提供类似 SQL 的接口。
我的问题是,当 hadoop 提供容错的 HDFS 时,为什么是分布式的? Hive 会取代 HDFS 吗?
hive 是否也只提供 sql 接口或存储?
【问题讨论】:
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 创建的表、分区、视图、存储桶等(元数据类似于表的位置、存储在表中的数据类型、表的分区信息、创建日期、修改日期等)。
【讨论】:
在评论中回答您的问题...
Hive 可以处理结构化(csv、txt 等)数据和半结构化(xml、json、parquet 等)数据。它无法处理音频、视频等非结构化数据。
注意:半结构化数据可以在 DDL 中处理,也可以通过 spark 放入 Hive。
我鼓励您也了解 hive 中的外部表和托管表。
快乐学习。
【讨论】: