hadoop - 当 HDFS 已经提供数据存储时,为什么要使用 Hive?
问题描述
我已经开始学习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 创建。
推荐阅读
- postgresql - 如何使用 Postgresql 设置 NAND 约束
- sql - 在 Node.JS 中使用条件变量修改 SQL 查询所需的语法
- vba - 如何使用查找和替换在 VBA 编辑器中找到带有新行的单词?
- r - 根据选中的 tabPanel 更改闪亮仪表板侧边栏的内容
- mysql - 如何按下一个父母的 ID 订购我的 SQL 查询?
- authentication - 为什么访问 here.com 时出现 403 错误?
- r - 如何为R中的每个因素计算几个间隔内的事件?
- c# - 何时在实体 (EF Core 3.1) 上初始化导航属性?
- powershell - 在 Powershell 中合并多个 CSV 文件的问题
- reactjs - React 和 MSGraph - 发送电子邮件