Hadoop分布式文件系统HDFS

HDFS概述:

1、分布式

2、commodity hardware 廉价或者通用的机器上

3、fault-tolerant 容错

4、high throughput 高吞吐

5、large date sets 适用于大的数据集

 

 

HDFS设计目标:

Hardware Failure 硬件错误

概述:

硬件故障是常态而不是例外。HDFS实例可以由数百或数千台服务器组成,每台服务器存储文件系统的一部分数据。事实上,有大量的组件,每个组件都有不小的故障概率,这意味着HDFS的某些组件总是不起作用的。因此,故障检测和快速、自动地从中恢复是HDFS的核心架构目标。

总结:

每台机器只存储文件的部分数据,blocksize=128M

block存放在不同的机器上的,由于容错HDFS默认采用3副本机制

Streaming Data Access 流式数据访问

概述:

在HDFS上运行的应用程序需要对其数据集进行流式访问。它们不是通常在通用文件系统上运行的通用应用程序。HDFS的设计更多的是用于批处理,而不是用户交互使用。重点是数据访问的高吞吐量,而不是数据访问的低延迟。POSIX强加了许多针对HDF的应用程序不需要的硬需求。POSIX语义在一些关键领域被用来提高数据吞吐量。

总结:

The emphasis is on high throughput of data access 高吞吐量

rather than low latency of data access 而不是数据访问的低延迟

Large Data Sets 大规模数据集

概述:

在HDFS上运行的应用程序具有大型数据集。在HDFS中,一个典型的文件大小是千兆到兆字节。因此,HDFS被调整为支持大文件。它应该提供高聚合数据带宽,并可扩展到单个集群中的数百个节点。它应该在一个实例中支持数千万个文件。

 

Moving Computation is Cheaper than Moving Ddata 移动计算比移动数据跟划算

概述:

如果一个应用程序请求的计算是在它所操作的数据附近执行的,那么它的效率要高得多。当数据集的大小很大时尤其如此。这将最小化网络拥塞并增加系统的总吞吐量。假设通常最好将计算迁移到数据所在的位置,而不是将数据移动到应用程序运行的位置。HDFS为应用程序提供接口,使它们能够更靠近数据所在的位置。

 

HDFS架构:

1、NameNode(master) and DataNodes(slave)

2、master意思小组领导/slave意思小组干活成员的框架

3、NN:

the file system namespace 文件系统命名空间

/home/hadoop/software

/app

regulates access to files by clients 管理客户端对文件的访问

 

4、DN:storage 存储

5、HDFS exposes a file system namespace and allows user data to be stored in files. 

HDFS公开一个文件系统命名空间,并允许用户数据存储在文件中。

6、a file is split into one or more blocks

blocksize:size

150M拆成2个block

7、blocks are stored in a set of DateNodes 块存储在一组日期节点中

为什么? 容错

 

8、NameNode executes file system namespace operations NameNode执行文件系统命名空间操 作 CRUD 增 删 改 查

 

9、determines the mapping of blocks to DataNodes 确定块到数据节点的映射

a.txt 150M blocksize=128M

a.txt 被拆分成2block 一个是block1:128M 另一个是block2:22M

block1存放在那个DN? block2存放在那个DN?

 

a.txt

block1:128M 192.168.1.1

block2:22M 192.168.1.2

 

get. a.txt DataNode 这个过程对用户来说是不透明的

 

10、通常情况下一个Node部署一个组件就行了,当然他也说了一个Node也可以部署多个组件

 

以上概述:

NameNode and DataNodes

HDFS has a master/slave architecture. An HDFS cluster consists of a single NameNode, a master server that manages the file system namespace and regulates access to files by clients. In addition, there are a number of DataNodes, usually one per node in the cluster, which manage storage attached to the nodes that they run on. HDFS exposes a file system namespace and allows user data to be stored in files. Internally, a file is split into one or more blocks and these blocks are stored in a set of DataNodes. The NameNode executes file system namespace operations like opening, closing, and renaming files and directories. It also determines the mapping of blocks to DataNodes. The DataNodes are responsible for serving read and write requests from the file system’s clients. The DataNodes also perform block creation, deletion, and replication upon instruction from the NameNode.

 

翻译:

NameNode和DataNodes

 

HDFS具有主/从架构。HDFS集群由单个NameNode组成,这是一个主服务器,它管理文件系统名称空间并控制客户端对文件的访问。此外,还有许多数据节点,通常是群集中每个节点一个,它们管理连接到它们运行的节点的存储。HDFS公开一个文件系统命名空间,并允许用户数据存储在文件中。在内部,文件被分成一个或多个块,这些块存储在一组数据节点中。NameNode执行文件系统命名空间操作,如打开、关闭和重命名文件和目录。它还确定块到数据节点的映射。数据节点负责为来自文件系统客户端的读写请求提供服务。DataNodes还根据NameNode的指令执行块创建、删除和复制。

Hadoop分布式文件系统HDFS

文件系统NameSpace详解

 

The File System Namespace

 

HDFS supports a traditional hierarchical file organization. A user or an application can create directories and store files inside these directories. The file system namespace hierarchy is similar to most other existing file systems; one can create and remove files, move a file from one directory to another, or rename a file. HDFS supports user quotas and access permissions. HDFS does not support hard links or soft links. However, the HDFS architecture does not preclude implementing these features.

While HDFS follows naming convention of the FileSystem, some paths and names (e.g. /.reserved and .snapshot ) are reserved. Features such as transparent encryption and snapshot use reserved paths.

The NameNode maintains the file system namespace. Any change to the file system namespace or its properties is recorded by the NameNode. An application can specify the number of replicas of a file that should be maintained by HDFS. The number of copies of a file is called the replication factor of that file. This information is stored by the NameNode.

 

 

概述:

 

HDFS支持传统的分层文件组织。用户或应用程序可以在这些目录中创建目录并存储文件。文件系统命名空间层次结构与大多数其他现有文件系统相似;可以创建和删除文件,将文件从一个目录移动到另一个目录,或者重命名文件。HDFS支持用户配额和访问权限。HDFS不支持硬链接或软链接。然而,HDFS体系结构并不排除实现这些特性。

 

虽然HDFS遵循文件系统的命名约定,但某些路径和名称(例如/.reserved和.snapshot)是保留的。透明加密和快照等功能使用保留路径。

 

NameNode维护文件系统名称空间。对文件系统命名空间或其属性的任何更改都由NameNode记录。应用程序可以指定HDFS应该维护的文件副本的数量。文件的副本数称为该文件的复制因子。此信息由NameNode存储。

 

 

HDFS副本机制

 

Data Replication

HDFS is designed to reliably store very large files across machines in a large cluster. It stores each file as a sequence of blocks. The blocks of a file are replicated for fault tolerance. The block size and replication factor are configurable per file.

All blocks in a file except the last block are the same size, while users can start a new block without filling out the last block to the configured block size after the support for variable length block was added to append and hsync.

An application can specify the number of replicas of a file. The replication factor can be specified at file creation time and can be changed later. Files in HDFS are write-once (except for appends and truncates) and have strictly one writer at any time.

The NameNode makes all decisions regarding replication of blocks. It periodically receives a Heartbeat and a Blockreport from each of the DataNodes in the cluster. Receipt of a Heartbeat implies that the DataNode is functioning properly. A Blockreport contains a list of all blocks on a DataNode.

 

概述:

 

数据复制

 

HDFS被设计成在一个大型集群中跨机器可靠地存储非常大的文件。它将每个文件存储为一个块序列。为了容错,文件块被复制。每个文件的块大小和复制因子都是可配置的。

 

除了最后一个块之外,文件中的所有块都是相同的大小,而用户可以在添加对可变长度块的支持以追加和hsync之后,在不将最后一个块填充到配置的块大小的情况下启动新块。

 

应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,以后可以更改。HDFS中的文件只写一次(除了追加和截断),并且在任何时候都只有一个writer。

 

NameNode做出关于块复制的所有决定。它周期性地从集群中的每个数据节点接收心跳和Blockreport。接收到心跳信号意味着数据节点工作正常。Blockreport包含数据节点上所有块的列表。

Hadoop分布式文件系统HDFS

副本放置策略

 

副本的放置对HDFS的可靠性和性能至关重要。优化副本放置使HDFS区别于大多数其他分布式文件系统。这是一个需要大量调整和经验的特性。机架感知副本放置策略的目的是提高数据可靠性、可用性和网络带宽利用率。副本放置策略的当前实现是这方面的第一项工作。实施这一政策的短期目标是在生产系统上验证它,了解它的行为,并为测试和研究更复杂的政策打下基础。

 

大型HDFS实例运行在通常分布在许多机架上的计算机集群上。不同机架中的两个节点之间的通信必须通过交换机进行。在大多数情况下,同一机架中机器之间的网络带宽大于不同机架中机器之间的网络带宽。

 

NameNode通过Hadoop rack Awareness中概述的过程确定每个数据节点所属的机架id。一个简单但非最优的策略是将副本放在唯一的机架上。这可防止整个机架出现故障时丢失数据,并允许在读取数据时使用多个机架的带宽。此策略在群集中均匀分布副本,这使得在组件出现故障时轻松平衡负载。但是,此策略会增加写入成本,因为写入需要将块传输到多个机架。

 

对于常见情况,当复制因子为3时,HDFS的放置策略是,如果写入程序位于数据节点上,则将一个副本放在本地计算机上,否则放在与写入程序位于同一机架中的随机数据节点上,另一个副本放在不同(远程)机架中的节点上,最后一个放在同一远程机架中的不同节点上。此策略减少机架间写入通信量,这通常会提高写入性能。机架故障的几率远小于节点故障的几率;此策略不会影响数据可靠性和可用性保证。但是,它确实减少了读取数据时使用的聚合网络带宽,因为块仅放置在两个唯一的机架中,而不是三个机架中。使用此策略,文件的副本不会均匀分布在机架上。三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,另三分之一的副本均匀分布在其余机架上。此策略在不影响数据可靠性或读取性能的情况下提高写入性能。

 

如果复制因子大于3,则在将每个机架的副本数保持在上限(基本上是(副本-1)/机架+2)以下的同时,随机确定第4个和后续副本的位置。

 

因为NAMENODE不允许数据元具有同一块的多个副本,所以创建的副本的最大数量是当时的数据总数。

 

在HDFS中添加了对存储类型和存储策略的支持之后,除了上面描述的机架感知之外,NameNode还考虑了副本放置的策略。NameNode首先基于机架感知选择节点,然后检查候选节点是否具有与文件关联的策略所需的存储。如果候选节点没有存储类型,则NameNode将查找另一个节点。如果在第一个路径中找不到足够的节点来放置副本,则NameNode将在第二个路径中查找具有回退存储类型的节点。

 

此处描述的当前默认副本放置策略正在进行中。

 

副本的选择

 

Replica Selection

 

To minimize global bandwidth consumption and read latency, HDFS tries to satisfy a read request from a replica that is closest to the reader. If there exists a replica on the same rack as the reader node, then that replica is preferred to satisfy the read request. If HDFS cluster spans multiple data centers, then a replica that is resident in the local data center is preferred over any remote replica.

 

为了最小化全局带宽消耗和读取延迟,HDFS尝试满足来自最靠近读卡器的副本的读取请求。如果存在与阅读器节点相同的机架上的副本,则该副本优选地满足读取请求。如果HDFS集群跨越多个数据中心,则首选驻留在本地数据中心的副本,而不是任何远程副本。

 

副本安全模式

 

Safemode

On startup, the NameNode enters a special state called Safemode. Replication of data blocks does not occur when the NameNode is in the Safemode state. The NameNode receives Heartbeat and Blockreport messages from the DataNodes. A Blockreport contains the list of data blocks that a DataNode is hosting. Each block has a specified minimum number of replicas. A block is considered safely replicated when the minimum number of replicas of that data block has checked in with the NameNode. After a configurable percentage of safely replicated data blocks checks in with the NameNode (plus an additional 30 seconds), the NameNode exits the Safemode state. It then determines the list of data blocks (if any) that still have fewer than the specified number of replicas. The NameNode then replicates these blocks to other DataNodes.

 

 

在启动时,NameNode进入一个称为Safemode的特殊状态。当NameNode处于Safemode状态时,不会复制数据块。NameNode从DataNodes接收Heartbeat和Blockreport消息。Blockreport包含数据节点托管的数据块列表。每个块都有指定的最小副本数。当数据块的最小副本数已签入NameNode时,块被认为是安全复制的。在安全复制数据块的可配置百分比与NAMENODE一起检查(加上另外30秒)之后,NAMENODEL退出SAFMODED状态。然后,它确定仍具有少于指定副本数目的数据块(如果有)的列表。然后,NameNode将这些块复制到其他数据节点。