大数据不可避免地需要在计算机集群上进行分布式并行计算。因此,我们需要一个分布式数据操作系统来管理各种资源,数据和计算任务。今天,Apache Hadoop是现有的分布式数据操作系统。 Apache Hadoop是一个用于分布式存储的开源软件框架,以及商用硬件群集上的大数据的分布式处理。本质上,Hadoop由三部分组成:
•HDFS是一种分布式高吞吐量文件系统
•MapReduce用于并行数据处理的作业框架
•YARN用于作业调度和集群资源管理
HDFS将文件拆分为分布(并复制)在群集中的节点之间的大块。 为了处理数据,MapReduce通过将代码发送到具有所需数据并可以并行处理数据的节点来利用本地数据。
最初Hadoop集群资源管理是MapReduce的一部分,因为它是主要的计算范式。今天,Hadoop生态系统超越了MapReduce,并包括许多额外的并行计算框架,如Apache Spark,Apache Tez,Apache Storm等。因此,资源管理器(称为YARN)从MapReduce中分割出来,并改进以在Hadoop v2支持其他计算框架。现在MapReduce是在YARN容器中运行的一种应用程序,其他类型的应用程序也可以正常地写在YARN上运行。
HDFS
Hadoop分布式文件系统(HDFS)是一个多机器文件系统,运行在机器的本地文件系统之上,但是显示为单个命名空间,可通过hdfs:// URIs访问。它设计用于在大型廉价商品硬件群集中的机器上可靠地存储非常大的文件。 HDFS与Google文件系统(GFS)的设计相当相似。
Assumptions
HDFS实例可以由数百或数千个节点组成,这些节点由常常失效的廉价商品组件构成。这意味着一些组件在任何给定时间实际上不起作用,并且一些组件将不能从它们当前的故障中恢复。因此,持续监视,错误检测,容错和自动恢复必须是文件系统的一个组成部分。
HDFS被调整为支持一个适当数量(数千万)的大文件,通常是大小为千兆字节到太字节。最初,HDFS假设文件的一次写入多次访问模型。创建,写入和关闭的文件不需要更改。这个假设简化了数据一致性问题并实现了高吞吐量数据访问。后来添加了追加操作(仅限单个追加器)。
HDFS应用程序通常具有对其数据集的大型流式访问。HDFS主要设计用于批处理,而不是交互使用。重点在于数据访问的高吞吐量,而不是低延迟。
Architecture
HDFS具有主/从架构。 HDFS集群由单个NameNode组成,该NameNode是管理文件系统命名空间并调节客户端对文件的访问的主服务器。此外,还有一些DataNodes管理存储附加到它们运行的节点。典型的部署是具有仅运行NameNode的专用机器。集群中的每个其他计算机都运行DataNode的一个实例。
HDFS支持由目录和文件组成的传统分层文件组织。在HDFS中,每个文件存储为一个块序列(由64位唯一ID标识);文件中除最后一个之外的所有块都是相同大小(通常为64 MB)。 DataNode将每个块存储在本地文件系统上的单独文件中,并提供读/写访问。当DataNode启动时,它扫描其本地文件系统,并将托管数据块列表(称为Blockreport)发送到NameNode。
为了可靠性,每个块在多个DataNode(默认情况下为三个副本)上复制。复制品的放置对于HDFS的可靠性和性能至关重要。 HDFS采用机架感知复制放置策略来提高数据可靠性,可用性和网络带宽利用率。当复制因子为三时,HDFS将一个副本放在本地机架中的一个节点上,另一个副本位于同一机架中的不同节点上,而最后一个副本位于不同机架中的节点上。此策略减少了机架间写入通信量,这通常会提高写入性能。由于机架故障的机率远远小于节点故障的机率,所以此策略不会显着影响数据的可靠性和可用性。
--未完待续