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

How does a Azure based Hadoop cluster (HDInsight) translate to classic on-premise Hadoop cluster

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

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

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

当 HDInsight 执行其任务时,它会将数据从存储节点流式传输到计算节点。但是 Hadoop 正在执行的许多 map、sort、shuffle 和 reduce 任务是在计算节点本身所在的本地磁盘上完成的。

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

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

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