基于 Azure 的 Hadoop 集群 (HDInsight) 如何转换为经典的本地 Hadoop 集群

Posted

技术标签:

【中文标题】基于 Azure 的 Hadoop 集群 (HDInsight) 如何转换为经典的本地 Hadoop 集群【英文标题】:How does a Azure based Hadoop cluster (HDInsight) translate to classic on-premise Hadoop cluster 【发布时间】:2020-09-30 07:57:27 【问题描述】:

Apache Hadoop 旨在跨大量商品机器(节点)运行。这不是为在基于云的复杂场景中运行而设计的。但是,由于云允许通过虚拟机模拟单个节点,因此出现了基于云的 Hadoop 集群。但这对我来说是一个理解困难。当我研究 Hadoop 集群的任何标准解释时,它始终是本地架构,因为所有 Hadoop 架构都是根据逻辑和简单的本地视图来解释的。但这给理解基于云的集群如何工作带来了困难——尤其是诸如 HDFS、数据局部性等概念。在本地版本的解释中,每个节点都有自己的“本地”存储(这也意味着存储硬件是固定的一个特定的节点,它不会被洗牌)并且也不会假设该节点被删除。此外,我们将该存储视为节点本身的一部分,因此我们从不考虑终止节点并保留存储以供以后使用。

现在在基于云的 Hadoop(HDInsight) 模型中,我们可以将任何 Azure 存储帐户附加为集群的主存储。假设我们有一个包含 4 个工作节点和 2 个头节点的集群,那么单个 Azure 存储帐户充当 6 个虚拟机的 HDFS 空间?再一次,实际的业务数据甚至没有存储在上面——它存储在附加的附加存储帐户上。所以我无法理解如何将其转换为本地 Hadoop 集群? Hadoop集群的核心设计围绕着数据局部性的概念,即数据最接近处理。我知道,当我们创建 HDInsight 群集时,我们会在与附加的存储帐户相同的区域中创建它。但它更像是多个处理单元 (VM) 都共享公共存储,而不是具有自己本地存储的单个节点。可能,只要它能够足够快地访问数据中心中的数据(就像它驻留在本地一样),就应该没有关系。但不确定是不是这样。基于云的模型向我展示了以下图片:-

有人能准确解释一下 Apache Hadoop 设计是如何转化为基于 Azure 的模型的吗?混淆源于存储帐户是固定的,我们可以随时终止/旋转集群,以指向相同的存储帐户。

【问题讨论】:

【参考方案1】:

当 HDInsight 执行其任务时,它会将数据从存储节点流式传输到计算节点。但是 Hadoop 正在执行的许多映射、排序、洗牌和归约任务是在本地磁盘上完成的,这些本地磁盘与计算节点本身一起驻留。

map、reduce 和 sort 任务通常在网络负载最小的计算节点上执行,而 shuffle 任务将使用一些网络将数据从 mappers 节点移动到较少的 reduce 节点。

将数据存储回存储器的最后一步通常是小得多的数据集(例如查询数据集或报告)。最后,在初始和最终流阶段,网络的利用率更高,而大多数其他任务都在节点内执行(即最小的网络利用率)。

更详细的了解,您可以查看“Why use Blob Storage with HDInsight on Azure”和“HDInsight Architecture”。

【讨论】:

如果对你有用,可以accept it as an answer吗?它可能会帮助更多有类似问题的人。

以上是关于基于 Azure 的 Hadoop 集群 (HDInsight) 如何转换为经典的本地 Hadoop 集群的主要内容,如果未能解决你的问题,请参考以下文章

使用Azure Blob优化Hadoop集群存储成本

Hadoop集群hdfs添加磁盘操作

Spark集群安装-基于hadoop集群

Spark集群安装-基于hadoop集群

Azure Synapse 中的 Hive

基于docker搭建hadoop跨主机集群