首先来看看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 分块下载文件
本文首发于知乎专栏:「数据池塘」
网友评论