Hadoop学习笔记(一)分布式文件存储系统 —— HDFS

news/2024/5/20 1:12:52 标签: 大数据, 分布式, Hadoop, 入门, hdfs

概念

HDFSHadoop Distributed File System),Hadoop分布式文件系统,用来存超大文件的。

HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成:

  • NameNode : 负责执行有关 文件系统命名空间 的操作,例如打开,关闭、重命名文件和目录等。它同时还负责集群元数据的存储,记录着文件中各个数据块的位置信息。管理员,负责协调
  • DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建,删除等操作。打工人,负责存数据

使用流程

写文件

有一个文件需要存储到分布式集群上。

客户端提供两个参数:

  1. blocksize:块大小(默认128M)
  2. replication factor: 复制因子 (默认3个)

默认情况下,hdfs把文件拆分成一堆128M的块,每个块复制出3个副本,扔到不同的DataNode上存储。

如下图:

img

数据被分成了2块:part-0,part-1

part0复制因子为2,所以{1, 3}分别被扔到了2个DataNode上;

part1复制因子为3,所以{2, 4,5}分别被扔到了3个DataNode上;

DataNode选择策略

复制因子为3时:

第1份:若写入程序本身在一个DataNode上,就放在该DataNode上;若不在,就随机选一个DataNode,把数据写进去;

第2份:在另一个机架上随机找个DataNode,从上一个DataNode负责把数据复制过来;

第3份:在第2份同一机架上,再找一个DataNode,从上一个DataNode负责把数据复制过来;

img

复制因子大于3时,第4份以后的数据就随便找DataNode放了,但要满足:

  1. 每个机架上的副本数低于上限,通常为 (复制系数 - 1 ) / 机架数量 + 2。复制系数=3,机架数=2时,上限为 2/2 + 2 = 3。为了铺的平均一点,一个机架炸了也没事。
  2. 一个DataNode上只能有同一个块的一个副本。要的是雨露均沾。

写文件成功后,NameNode会返回按距离升序排好的DataNode地址

读文件

总的原则:优先读取距离读取器最近的副本。先在同一个机架上找,再去隔壁机架找,再去隔壁数据中心找…

怎么知道文件包含哪些副本?问NameNode。

怎么知道副本都存在哪些DataNode,距离又多远呢?问NameNode。

(更具体的读写流程还是看最后的漫画比较好。一图胜千言)

稳定性原理

1. 心跳机制和重新复制

每个 DataNode 定期向 NameNode 发送心跳消息,如果超过指定时间没有收到心跳消息,则将 DataNode 标记为死亡,以后有各种请求都会忽略该DataNode。

由于数据不再可用,可能会导致某些块的复制因子小于其指定值,NameNode 会跟踪这些块,并在必要的时候进行重新复制

2. 数据的完整性

当客户端创建 HDFS 文件时,它会计算文件的每个块的 校验和,存在同一 HDFS 命名空间下的单独的隐藏文件中。

当客户端检索文件内容时,它会验证从每个 DataNode 接收的数据是否与存储在关联校验和文件中的 校验和 匹配。如果匹配失败,则证明数据已经损坏,就换个DataNode拿数据。

3.元数据的磁盘故障

FsImageEditLog 是 HDFS 的核心数据,这些数据的意外丢失可能会导致整个 HDFS 服务不可用。

为了避免这个问题,可以配置 NameNode 使其支持 FsImageEditLog 多副本同步,任何改变都会引起每个副本 FsImageEditLog 的同步更新。

4.支持快照

快照支持在特定时刻存储数据副本,在数据意外损坏时,可以通过回滚操作恢复到健康的数据状态。

适用场景

适合大文件的存储,文档的大小应该是是 GB 到 TB 级别的。

支持高吞吐量的数据访问,而非低延迟的数据访问。量大,但不快。

支持将内容追加到文件末尾,但不支持数据的随机访问,不能从文件任意位置新增数据。

附:图解HDFS存储原理

1. HDFS写数据原理

image-20201112170052773

image-20201112170117532

image-20201112170136806

2. HDFS读数据原理

image-20201112170308135

3. HDFS故障类型和其检测方法

image-20201112170331383

image-20201112170343559

第二部分:读写故障的处理

image-20201112170542776

第三部分:DataNode 故障处理

image-20201112170356823

副本布局策略

image-20201112170408030

参考资料

https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hadoop-HDFS.md

翻译经典 HDFS 原理讲解漫画


http://www.niftyadmin.cn/n/905556.html

相关文章

聚类--K均值算法

聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用 1.用python实现K均值算法 K-means是一个反复迭代的过程,算法分为四个步骤:(x,k,y) import numpy as np x np.random.randint(1,50,[20,1]) y np.zeros(20) k 3# 选取数据空间中的K个…

Navicat的替代品——DBeaver通用数据库管理工具

Navicat现在是收费产品,而且for Mysql 和 for Postgres 是分开的两个软件,使用不便。 发现了一款不错的替代品——dbeaver,通用的数据库可视化管理工具,官方支持说明: Free multi-platform database tool for develop…

leecode[242]有效的字母异位词 Python3实现(collections.Counter,哈希计数)

# 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 # # 示例 1: # # 输入: s "anagram", t "nagaram" # 输出: true # # # 示例 2: # # 输入: s "rat", t "car" # 输出: false # …

python学习 (三十二) 异常处理

1 异常: def exceptionHandling():try:a 10b 0d a / bprint(d)except ZeroDivisionError as ex:print("exception 1 " str(ex) )except BaseException as ex:print("exception 2 " str(ex))exceptionHandling() 2 : else(如果没…

Centos7离线二进制安装Kafka(单节点测试)

官网下载kafka离线安装包,解压并重命名: $ tar zxvf kafka_2.11-2.0.0.tgz $ mv kafka_2.11-2.0.0/ kafka/ $ cd kafka修改配置,允许外部访问服务: $ vim config/server.properties# 添加以下配置,ip地址改为本机地址…

Python学习笔记:一手漂亮的Python函数

使用类和函数定义模型函数是抽象和封装的基本方法之一重构函数-- 命名合理-- 具有单一功能-- 包含文档注释-- 返回一个值-- 代码不超过 50 行-- 幂等函数,尽可能是纯函数PEP-8 定义了Python编程的风格指南PEP-257 定义文档注释函数太长 —— 代码重构 refactor幂等函…

centos7用miniconda搭建python flask环境

在windows环境下开发了python flask接口服务,为了方便在centos7环境下部署,尝试用linux版的miniconda搭建环境。 下载安装 Miniconda下载地址 本文下载了3.8版本: 安装: $ bash Miniconda3-latest-Linux-x86_64.sh看到如下信…

关于决策单调性优化动态规划

今天考场上突现决策单调性 原本对这个算法表示摒弃的本弱突然被打击了 于是来学习学习... 原理 我们只考虑$1D\;|\;1D$的动态规划... 同时,我们讨论这么一类$dp$:$f[i] min(f[j] w(j, i))(1 \leqslant j \leqslant i - 1)$ ($max$同理&…