能够替代Hadoop用作数据湖新的开源项目 - unpocodejava


数据湖 通常与面向 Hadoop 的对象存储相关联。在这种情况下,组织的数据首先上传到 Hadoop 平台,然后对驻留在 Hadoop 集群节点上的数据应用数据挖掘和分析工具。
我们发现 Hadoop 的核心是它的存储层HDFS(Hadoop 分布式文件系统),它可以跨多个服务器存储和复制数据,此外,Hadoop 生态系统还包括一些辅助工具,例如 Hive、Flume、Sqoop 和 Kafka,它们有助于包括数据摄取、准备和提取。
Hadoop 数据湖可以使用 Cloudera、Azure HDInsight 或 GCP DataProc 等企业平台在本地或云中安装。
 
Hadoop 数据湖的优势
即使在今天,由于以下原因,在 Hadoop 上安装数据湖仍然是一种流行的选择:

  • 技术团队之间更加熟悉
  • 开源解决方案,使其实施经济
  • 更便宜,因为它们是开源的
  • 许多可用于 Hadoop 集成的工具
  • 易于扩展
  • 数据局部性可实现更快的计算
  • 可以将其安装在本地或作为各种云中的服务

 
今天的 Hadoop
Hadoop 曾经是数据湖的主要选择,但在不断变化的技术世界中,还有其他更现代的方法基于 Spark 或 Presto 等工具。
让我们回顾一下,了解事情发生了怎样的变化。Hadoop出现在2000年代初,十年间开始流行,其实是因为很多公司走开源,当时早期的BigData和Data Lakes项目大部分都是基于Hadoop的。
Hadoop 提供了两个主要功能:
  • 用于持久化数据的分布式文件系统 (HDFS)。
  • 允许并行处理所有数据的处理框架。

越来越多的组织开始希望使用他们的所有数据,而不仅仅是一些数据。因此,Hadoop 因其存储和处理新数据源(包括日志记录、点击流以及机器和传感器生成的数据)的能力而广受欢迎。
在 2000 年代,Hadoop 很有意义,因为它允许您使用基本硬件构建本地集群,以低成本存储和处理这些新数据。
但开源继续发展,出现了一个新框架:Apache Spark,经过优化以处理内存中而不是磁盘上的数据。这当然意味着在 Spark 上运行的算法会更快,但数据仍然需要持久化,因此 Spark 被包含在许多 Hadoop 发行版中。那行得通,但随着云的兴起,有一种更好的数据持久化方法:对象存储。
除此之外,随着 Cloudera 购买 Hortonworks(以及 HP 购买 MapR),本质上我们可以说 Hadoop 不再有免费发行版,这意味着开源世界正在寻找替代解决方案。

MinIO 和 Presto 作为数据湖
我们提到它目前可以挂载在 Spark 和对象存储库之上。在这一点上,我们将描述一个有趣的替代方案,以替代基于 HDFS 的环境以及基于 MinIO 和 Presto 的 Hadoop 生态系统的其余部分。
 


它是实现 AWS S3 API 的分布式对象存储。MinIO 可以部署在本地和云端,并在 Kubernetes 之上工作。
MinIO 的存储基于对象,其中每个对象由 3 个概念组成:
  • 数据本身。数据可以是您想要存储的任何内容,从照片到 400,000 页的手册
  • 可扩展数量的元数据。元数据由创建对象的人定义;它们包含有关数据是什么、应该用于什么、其机密性或与数据应该如何使用相关的任何其他内容的上下文信息。
  • 全局唯一标识符。标识符是提供给对象的地址,以便它可以在分布式系统中找到。通过这种方式,无需知道其物理位置(可能存在于数据中心的不同部分或世界的不同部分)即可找到数据。

如果 MinIO 可以代替 HDFS 作为数据湖中的存储,我们就缺少一个 HIVE 风格的 SQL 查询引擎。
  • Presto 

是一个用 Java 构建的开源分布式 SQL 查询引擎,旨在针对大量数据源(通过连接器)启动交互式分析查询,支持对从千兆字节到 PB 级数据源的查询。
Presto 是一个 ANSI-SQL 查询引擎,它允许使用相同的 SQL 语句、函数和运算符在任何连接的数据源中查询和操作数据。
因此,在数据湖中,我们可以使用 Presto 查询存储在 MinIO 中的数据。 
此外,Presto 可以在 Spark 之上运行,让您可以利用 Spark 作为 Presto 查询的执行环境。
与在 Hadoop 上安装数据湖相比,这种方法具有许多优点:
  • 这种组合比典型的 Hadoop 配置更具弹性,而在 Hadoop 中,向 Hadoop 集群添加和删除节点是一个完整的过程,在这种方法中,一切都运行在 Kubernetes 之上,这使我们能够轻松扩展。
  • 单独的计算和存储:使用 Hadoop,如果您想添加更多存储,您可以通过添加更多节点(使用计算)来实现。如果您需要更多存储,无论您是否需要,您都将拥有更多计算,而使用对象存储架构,如果您需要更多计算,您可以将节点添加到 Presto 集群并保留存储,以便计算和存储不仅具有弹性,而且它们独立地具有弹性。
  • 维护:维护一个稳定可靠的 Hadoop 集群是一项复杂的任务,例如更新集群通常涉及停止集群,持续更新很复杂,...
  • 降低成本:通过这种架构,我们将降低总拥有成本:因为 MinIO 几乎不需要管理,而且对象的存储更便宜。