简介

HDFS(Hadoop Distributed File System )Hadoop 分布式文件系统。是根据 google 发 表的论文翻版的。论文为 GFS(Google File System)Google 文件系统。

HDFS 有很多特点:

① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存 3 份。

② 运行在廉价的机器上。

③ 适合大数据的处理。多大?多小?HDFS 默认会将文件分割成 block,64M 为 1 个 block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中(namenode)。 如果小文件太多,那内存的负担会很重。

如上图所示,HDFS 也是按照 Master 和 Slave 的结构。分 NameNode、 SecondaryNameNode、DataNode 这几个角色。

NameNode:是 Master 节点,是管理者。管理数据块映射;处理客户端的读写请求;配 置副本策略;管理 HDFS 的名称空间;

NameNode 保存的 metadata 包括

文件 ownership 和 permission

文件包含的 block 信息

Block 保存在那些 DataNode 节点上(这部分数据并非保存在 NameNode 磁 盘上的,它是在 DataNode 启动时上报给 NameNode 的,Name 接收到之后 将这些信息保存在内存中)

NameNode 的 metadata 信息在 NameNode 启动后加载到内存中

Metadata 存储到磁盘上的文件名称为 fsimage

Block 的位置信息不会保存在 fsimage 中

Edits 文件记录了客户端操作 fsimage 的日志,对文件的增删改等。

用户对 fsimage 的操作不会直接更新到 fsimage 中去,而是记录在 edits 中

SecondaryNameNode:分担 namenode 的工作量;是 NameNode 的冷备份;合并 fsimage 和 fsedits 然后再发给 namenode。

合并fsimage和fsedits文件,然后发送并替换NameNode的fsimage文件, 同时自己留下一个副本。这个副本可供 NameNode 毁灭之后的部分文件恢复。

  1. 可以通过配置 fs.checkpoint.period 修改合并间隔时间,默认 1 小时
  2. 也可以通过配置 edits 日志文件的大小,fs.checkpoint.size 规定 edits 文 件的最大值,来让 SecondaryNameNode 来知道什么时候该进行合并操作了。 默认是 64M

合并过程如下:

DataNode:Slave 节点,奴隶,干活的。负责存储 client 发来的数据块 block;执行数据 块的读写操作。

热备份:b 是 a 的热备份,如果 a 坏掉。那么 b 马上运行代替 a 的工作。

冷备份:b 是 a 的冷备份,如果 a 坏掉。那么 b 不能马上代替 a 工作。但是 b 上存储 a 的 一些信息,减少 a 坏掉之后的损失。

fsimage:元数据镜像文件(文件系统的目录树。)

edits:元数据的操作日志(针对文件系统做的修改操作记录)

namenode 内存中存储的是=fsimage+edits。

SecondaryNameNode 负责定时默认 1 小时,从 namenode 上,获取 fsimage 和 edits 来 进行合并,然后再发送给 namenode。减少 namenode 的工作量。

HDFS 优点

高容错性

数据自动保存多个副本

副本丢失后,自动回复

适合批处理

移动的计算和操作

数据位置暴漏给计算框架

适合大数据处理

GB、TB、PB 甚至更大

百万规模以上的文件数量

10K+节点

可构建在廉价的机器上

通过副本提高可靠性

提供了容错和恢复机制

HDFS 缺点

低延迟数据访问

毫秒级读取

低延迟与高吞吐量

小文件存取

占用 NameNode 内存空间

寻址时间超过读取时间

并发写入、文件随即修改

一个文件同时只能由一个写入者

仅支持 append

工作原理

写操作:

有一个文件 FileA,100M 大小。Client 将 FileA 写入到 HDFS 上。

HDFS 按默认配置。

HDFS 分布在三个机架上 Rack1,Rack2,Rack3。

a. Client 将 FileA 按 64M 分块。分成两块,block1 和 Block2;

b. Client 向 nameNode 发送写数据请求,如图蓝色虚线①------>。

c. NameNode 节点,记录 block 信息。并返回可用的 DataNode,如粉色虚线②------->。

Block1: host2,host1,host3

Block2: host7,host8,host4

原理:

NameNode 具有 RackAware 机架感知功能,这个可以配置。

若 client 为 DataNode 节点,那存储 block 时,规则为:副本 1,同 client 的节点上; 副本 2,不同机架节点上;副本 3,同第二个副本机架的另一个节点上;其他副本随机挑选。

若 client 不为 DataNode 节点,那存储 block 时,规则为:副本 1,随机选择一个节 点上;副本 2,不同副本 1,机架上;副本 3,同副本 2 相同的另一个节点上;其他副本随 机挑选。

d. client 向 DataNode 发送 block1;发送过程是以流式写入。

流式写入过程,

  1. 将 64M 的 block1 按 64k 的 package 划分;
  2. 然后将第一个 package 发送给 host2;
  3. host2 接收完后,将第一个 package 发送给 host1,同时 client 想 host2 发送第 二个 package;
  4. host1 接收完第一个 package 后,发送给 host3,同时接收 host2 发来的第二个 package。
  5. 以此类推,如图红线实线所示,直到将 block1 发送完毕。
  6. host2,host1,host3向NameNode,host2向Client发送通知,说“消息发送完了”。 如图粉红颜色实线所示。
  7. client 收到 host2 发来的消息后,向 namenode 发送消息,说我写完了。这样就 真完成了。如图黄色粗实线
  8. 发送完 block1 后,再向 host7,host8,host4 发送 block2,如图蓝色实线所示。
  9. 发送完 block2 后,host7,host8,host4 向 NameNode,host7 向 Client 发送通 知,如图浅绿色实线所示。
  10. client 向 NameNode 发送消息,说我写完了,如图黄色粗实线。。。这样就完 毕了。

分析,通过写过程,我们可以了解到:

①写 1T 文件,我们需要 3T 的存储,3T 的网络流量带宽。

②在执行读或写的过程中,NameNode 和 DataNode 通过 HeartBeat 进行保存通信, 确定 DataNode 活着。如果发现 DataNode 死掉了,就将死掉的 DataNode 上的数据,放 到其他节点去。读取时,要读其他节点去。

③挂掉一个节点,没关系,还有其他节点可以备份;甚至,挂掉某一个机架,也没关系; 其他机架上,也有备份。

读操作:

读操作就简单一些了,如图所示,client 要从 datanode 上,读取 FileA。而 FileA 由 block1 和 block2 组成。

那么,读操作流程为:

a. client 向 namenode 发送读请求。

b. namenode 查看 Metadata 信息,返回 fileA 的 block 的位置。

block1:host2,host1,host3

block2:host7,host8,host4

c. block 的位置是有先后顺序的,先读 block1,再读 block2。而且 block1 去 host2 上读取; 然后 block2,去 host7 上读取;

上面例子中,client 位于机架外,那么如果 client 位于机架内某个 DataNode 上,例如,client 是 host6。那么读取的时候,遵循的规律是:

优选读取本机架上的数据。

HDFS 文件权限

与 Linux 文件权限类似

r:read;w:write;x:execute

如果 Linux 系统用用户 xxx 使用 hadoop 命令创建一个文件,那么,在 hdfs 中这个文件的 owner 就是 xxx

HDFS 的权限目的是将控制权交出去,本身只判断用户和权限,至于用户是不是真的,不管。

HDFS 安全模式

NameNode 启动的时候,首先讲 fsimage 载入内存,然后按照 fsedits 中的各项操作修改 内存中的 fsimage。

当元数据文件在内存中创建完成之后,在 NameNode 上创建一个新的 fsimage 替换原 fsimage,同时创建一个空的 fsedits 文件(无需 SecodaryNameNode 参与) 这时,NameNode 是运行在安全模式的。即对外(客户端)只读,所以此段时间内对 hdfs 的写入、删除、重命名都会失败。

然后 NameNode 收集各个 DataNode 的报告,当 block 达到最小副本数以上时,会被认为 “安全”的了,在一定比例的数据块被确定为“安全”后,再过若干事件后,安全模式结束。 当检测到副本数不足的数据块时,该块会被复制,直到达到最小副本数。

Hdfs 中数据块的位置并不是由 namenode 维护的,而是以块列表的形式存储在 datanode 中的。

HDFS 中常用到的命令

1. hdfs fs

hdfs fs -ls /

hdfs fs -lsr

hdfs fs -mkdir /user/hadoop

hdfs fs -put a.txt /user/hadoop/

hdfs fs -get /user/hadoop/a.txt /

hdfs fs -cp src dst

hdfs fs -mv src dst

hdfs fs -cat /user/hadoop/a.txt

hdfs fs -rm /user/hadoop/a.txt

hdfs fs -rmr /user/hadoop/a.txt

hdfs fs -text /user/hadoop/a.txt

hdfs fs -copyFromLocal localsrc dst 与 hadoop fs -put 功能类似。

hdfs fs -moveFromLocal localsrc dst 将本地文件上传到 hdfs,同时删除本地文件。

2.hdfs fsadmin

hdfs dfsadmin -report

hdfs dfsadmin -safemode enter | leave | get | wait

hdfs dfsadmin -setBalancerBandwidth 1000

3. hdfs fsck

4. start-balancer.sh

负载均衡,可以使 DataNode 节点上选择策略重新平衡 DataNode 上的数据块的分布

HDFS原理(超详解)相关推荐

  1. 图解 生成对抗网络GAN 原理 超详解

    生成对抗网络 一.背景 一般而言,深度学习模型可以分为判别式模型与生成式模型.由于反向传播(Back propagation, BP).Dropout等算法的发明,判别式模型得到了迅速发展.然而,由于 ...

  2. 《深度学习》之 循环神经网络 原理 超详解

    循环神经网络 一.研究背景 1933年,西班牙神经生物学家Rafael Lorente de Nó发现大脑皮层(cerebral cortex)的解剖结构允许刺激在神经回路中循环传递,并由此提出反响回 ...

  3. 图解强化学习 原理 超详解 (一)

    强化学习 一.背景 机器学习是人工智能的一个分支,在近30多年已发展为一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.计算复杂性理论等的学科.强化学习(RL)作为机器学习的一个子领域,其灵感来 ...

  4. 抖音推荐算法原理全文详解

    阅读目录 一.系统概览 二.内容分析 三.用户标签 四.评估分析 五.内容安全 抖音推荐算法原理全文详解 本次分享将主要介绍今日头条推荐系统概览以及内容分析.用户标签.评估分析,内容安全等原理. 回到 ...

  5. 线性规划之单纯形法【超详解+图解】-转载

    线性规划之单纯形法[超详解+图解] 目录 1.作用 2.线性规划的一般形式 5.1几何意义 5.2如何判断最优 5.3如何选择新的基变量 5.4如何选择被替换的基变量 5.5终止条件 标准型: 转化为 ...

  6. 计算机网络原理超详解说

    计算机网络原理超详解说 前言 大家好,我是泰斗贤若如,一个专注于用大白话讲解技术的号主,这次给大家分享计算机网络原理的相关知识,我自认为文章内容已经很通俗易懂了,祝您阅读愉快! 一.计算机网络概述 时 ...

  7. Android vector标签 PathData 画图超详解

    此文章来源于https://www.cnblogs.com/yuhanghzsd/p/5466846.html点击打开链接 Android vector标签 PathData 画图超详解 SVG是一种 ...

  8. [crypto]-02-非对称加解密RSA原理概念详解

    说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...

  9. [crypto]-01-对称加解密AES原理概念详解

    1.对称加解密 术语:P是明文,C是密文,K是密钥,E是加密算法,D是解密算 (1).常用的对称加解密有哪些? (2).加解密的模式 [ecb]这种模式是将整个明文分成若干段相同的小段,然后对每一小段 ...

  10. 4个mos管驱动的全桥电路原理_最经典MOS管电路工作原理及详解没有之一

    欢迎加入技术交流QQ群(2000人):电力电子技术与新能源 1105621549 高可靠新能源行业顶尖自媒体 在这里有电力电子.新能源干货.行业发展趋势分析.最新产品介绍.众多技术达人与您分享经验,欢 ...

最新文章

  1. 敏捷开发:如何通过回顾保持学习状态
  2. javaweb学习总结(二十九)——EL表达式
  3. ai画面怎么调大小_ai如何调整对象大小
  4. 福建物联网产业发展势头良好
  5. 我的笔记本的鼠标又乱跑了!寻求帮助!
  6. webservice studio 参数是DataSet时不支持中文 解决方法
  7. 雷林鹏分享:Ruby 发送邮件 - SMATP
  8. Word中公式编辑倒V和横线加法
  9. GD32系列外部中断
  10. Python读取scel文件
  11. Kafka Consumer 消费逻辑
  12. 西门子杯-工业信息网络化
  13. 磁盘无损简单卷转主分区
  14. 举个栗子~Tableau 技巧(209):用自定义形状实现刻度环形图
  15. 贪心算法:旅行商问题(TSP)
  16. 同轴光的发光特征及其使用时的注意事项
  17. An unusual vacation
  18. 光学图像类有哪些最新发表的毕业论文呢?
  19. (python代码)BP神经网络模型
  20. 单片机C语言实验报告总结,C语言实训心得体会

热门文章

  1. java流程控制图_Java流程控制结构
  2. 【已解决】SVN设置为中文 最全面
  3. 毕设系列之 -- 基于大数据的全国热门旅游景点数据分析与可视化
  4. 【好玩的代码雨(附源代码)】
  5. wps2019计算机里的云盘,WPS2019云文档如何使用?
  6. 西门子1200控制台达A2伺服458通讯控制博图V15.1
  7. 蓝桥杯历年真题及答案汇总整理(Java、C语言、Python)
  8. 银行核心系统概念入门简介
  9. 集成电路技术与产业发展
  10. 山东烟建借沟通CTBS实现财务数据大集中