Hadoop从入门到放弃(一) -- 基础概念

Hadoop 是什么

Hadoop 是一个开源的大数据框架,一个分布式计算的解决方案。

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

HDFS 分布式文件系统: 海量存储是大数据的技术的基础
MapReduce 编程模型: 分布式计算是大数据应用的解决方案

HDFS 概念

数据块

HDFS 上面的文件是按照数据块为单元来存储的,其默认大小为 64MB , 我们可以依据自己的情况进行设置,一般我们设置为 128MB, 备份数是3,也是可以修改的。
数据块的大小设置,如设置的太小,小文件也会被切割成多个数据块,访问的时候就要查找多个数据块地址,效率比较低,同时 NameNode 存储了太多的数据块信息,对内存消耗比较多,内存压力大。如果数据块设置过大,就会降低数据并行操作的效率,同时如果系统重启,数据块越大,系统重启的时间就越长
使用数据块存储的好处有:

  1. 屏蔽了文件的概念,无论 200KB 还是 200PB 的文件都是按照数据块进行存储,简化了存储系统的设计
  2. 数据块方便数据备份,提高数据容错能力

NameNode

NameNode 相当于 master - slave 体系中的 master , 他的职责有:

  1. 管理文件系统的命名空间
  2. 存放文件元数据
  3. 维护文件系统的所有文件和目录
  4. 维护文件与数据块的映射
  5. 记录每个文件的各个块所在数据节点 DataNode 的信息

DataNode

DataNode 是 HDFS 文件系统的工作节点,负责存储和检索数据块,向 NameNode 更新所存储块的列表

HDFS 优/缺点

优点:

  1. 适合大文件存储,支持 TB、PB 级别数据存储,支持副本策略
  2. HDFS 可以构建在廉价的普通机器上,具备容错和恢复机制
  3. 支持流逝数据访问,一次写入多次读取效率高
    缺点:
  4. 不适合大量小文件存储
  5. 不适合并发写入,不支持文件随机修改
  6. 不适合随机度等低延时的访问方式

HDFS 写流程


1
2
3
4
5
6
1. Client 向 NameNode 发出写请求,表明要将 data 写入到集群当中。
2. NameNode 中存储了集群中所有 DataNode 信息,收到 Client 请求后,就将可用的 DataNode 信息发送给Client
3. Client 依据收到 NameNode 的信息,先将数据进行分块,如分成两块。然后将 数据块1 和 从NameNode接收到的 DataNode所有节点信息,都发送给 DataNode-1
4. DataNode-1 接收到信息后,先将 数据块1 进行保存,在依据接收的DataNode节点集群信息,将 数据块1 备份到 DataNode-2 和 DataNode-3。 当 DataNode-1,DataNode-2,DataNode-3 完成 数据块1 存储之后,反馈给 NameNode
5. NameNode 收到 DataNode 发来的反馈信息后,更新自己的 DataNode 元数据信息列表。然后告诉 Client 数据块1 已经存储好了,可以存储后面的数据块了
6. Client 收到 NameNode 信息后,开始重复 数据块1的存储步骤,存储 数据块2,至此 HDFS 写数据流程结束

HDFS 写流程


1
2
3
1. Client 向 NameNode 发出读请求,表明要从集群中读取文件 data。
2. NameNode 收到 Client 请求后,就将存储了 data 文件数据块的DataNode 节点信息发送给 Client,如上图,DataNode-1 存储了 数据块1,DataNode-2 存储了 数据块2,DataNode-3 存储了 数据块1 和 数据块2
3. Client 依据收到 NameNode 的信息,先从 DataNode-1 读取 数据块1 ,然后再从 DataNode-2 读取 数据块2,如果 DataNode-2 宕机,Client 就会向 DataNode-3 读取 数据块2, 至此 HDFS 读数据流程结束

HDFS 常用命令

  1. 类Linux系统命令: ls, cat, mkdir, rm, chomd, chown, …
  2. HDFS文件交互命令: copyFromLocal, copyToLocal, get, put