Hadoop 的核心 —— HDFS(1)

首先来看看Hadoop 是什么?

Hadoop 是一个开源的大数据框架

Hadoop是一个分布式计算的解决方案

Hadoop = HDFS(分布式文件系统)+ MapReduce(分布式计算)

Hadoop 的两个核心:

HDFS 分布式文件系统:存储是大数据技术的基础

MapReduce 编程模型:分布式计算是大数据应用的解决方案

先来介绍第一个核心 —— HDFS,它有三个特点:

普通的成百上千的机器构成

按TB甚至PB为单位的大量的数据

简单便捷的文件获取

HDFS 的基本概念:

数据块-数据块是抽象块而非整个文件作为存储单元,在 Hadoop1.x 中默认大小是64M,Hadoop2.x 中默认大小是128M,默认每个块备份3份。

由于HDFS是分布式的,也就是主从模式,NameNode 就是主,DataNode 就是从。所以 HDFS 是由一个 NameNode 和多个 DataNode 组成的。

NameNode:

管理文件系统的命名空间,存放文件元数据

维护着文件系统的所有文件和目录,文件与数据块的映射

记录每个文件中各个块所在数据节点的信息(这些信息在 DataNode 启动时会发送给 NameNode)

P.S. 如果 NameNode挂掉了怎么办?(分布式系统存在的问题,后面会讨论这个问题)

DataNode(文件系统的工作节点):

存储并检索数据块;

向 NameNode 更新所存储块的列表

                                                                HDFS 结构图

HDFS 的优点:

适合大文件存储,支持 TB、PB 级的数据存储,并有副本策略

可以构建在廉价的机器上,并有一定的容错和恢复机制

支持流式数据访问,一次写入,多次读取,高效

HDFS 的缺点:

不适合大量小文件存储

不适合并发写入,不支持文件随即修改

不支持随机读等低延时的访问方式

P.S. Hadoop 本来也不是为这些场景设计的,所以到底用不用 Hadoop 要基于具体的业务场景来考虑。

NameNode 挂掉了怎么办?如何解决单点故障问题?

这是一个很严重的问题,因为我们很难把这些位于不同 DataNode 的数据块重建成文件。Hadoop2 给出了HDFS的高可用 HA 方案:HDFS通常由两个NameNode组成,一个处于 active 状态(主节点),另一个处于 standby 状态(备用节点),两者的数据是时刻保持一致的。当主节点出现问题,备用节点会自动切换,用户不会受到影响,这样就避免了 NameNode 的单点故障问题。当主节点对外提供服务,比如处理来自客户端的 RPC 请求,而备用节点则不对外提供服务,仅同步主节点的状态,以便能够在它失败时快速进行切换。

HDFS 的写流程:

客户端向 NameNode 发起写数据的请求

分块写入 DataNode 节点,DataNode 自动完成副本的备份

DataNode 向 NameNode 汇报储存完成,NameNode 通知客户端

HDFS 的读流程:

客户端向 NameNode 发起读数据的请求

NameNode 找出距离最近的 DataNode 节点信息

客户端从 DataNode 分块下载文件

本文首发于知乎专栏:「数据池塘」

你可能感兴趣的:(Hadoop 的核心 —— HDFS(1))