HDFS架构图(Hadoop distribute File System)

image.png

NameNode 介绍

Namenode 是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问

文件操作,NameNode 负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈。

副本存放在哪些DataNode上由 NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带块消耗和读取时延

Namenode 全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表

查看HDFS块文件

/opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-1921057509-192.168.57.129-1517160177567/current/finalized

说明:BP:表示块池子

image.png

可以使用more命令查看块文件中的数据。
meta结尾的数据表示元数据文件,这就是hdfs真正的存储结构

DataNode

一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳

DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。

集群运行中可以安全加入和退出一些机器(对现有集群没有影响)

HDFS文件

文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)

NameNode 是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等

DataNode 在本地文件系统存储文件块数据,以及块数据的校验和

可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容

Data Replication 文件复制

image.png

说明:
part-0 :一个文件
{1,3}:文件被拆分为2个块为1和3
r:2:复制两份。

解释:
For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack. This policy cuts the inter-rack write traffic which generally improves write performance. The chance of rack failure is far less than that of node failure; this policy does not impact data reliability and availability guarantees. However, it does reduce the aggregate network bandwidth used when reading data since a block is placed in only two unique racks rather than three. With this policy, the replicas of a file do not evenly distribute across the racks. One third of replicas are on one node, two thirds of replicas are on one rack, and the other third are evenly distributed across the remaining racks. This policy improves write performance without compromising data reliability or read performance. 搜索网络
对于一般情况,当复制因子为3时,HDFS的放置策略是在本地机架的一个节点上放置一个副本,在本地机架中的另一个节点上放置另一个副本,在不同的网络上放置一个副本。此策略不会影响数据的可靠性和可用性。但是,它确实减少了读取数据时使用的聚合网络带宽,因为一个块只放在两个唯一的机架上,而不是三个。使用此策略,文件的副本不会均匀分布在各个机架上。三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,另三分之一的副本位于一个机架上。此策略在不影响数据可靠性或读取性能的情况下提高写入性能。

机架:简单理解是一个交换机连接的所有服务器叫做一个机架

数据损坏的处理

步骤1

DataNode读取block的时候,它会计算checksum

步骤2

如果计算后的checksum,与block创建时值不一样,说明该block已经损坏

步骤3

Client读取其它DateNode上的block

步骤4

NameNode标记该块已经损坏,然后复制block达到预期设置的文件备份数

步骤5

DataNode 在其文件创建后三周验证其checksum

HDFS存储架构剖析相关推荐

  1. 微信、QQ都在用的腾讯云EB级对象存储架构剖析

    背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海内外业内学术专家.行业大咖及技术大牛等在现场共议云计算与数字 ...

  2. 基于Rook+Ceph的云原生存储架构剖析

     [摘要]Rook 是一款云原生存储编排服务工具,Ceph 是一种广泛使用的开源分布式存储方案,通过 Rook 可以大大简化 Ceph 在 Kubernetes 集群中的部署和维护工作.本文重点介绍 ...

  3. 搞透Kafka的存储架构,看这篇就够了

    阅读本文大约需要30分钟.这篇文章干货很多,希望你可以耐心读完. 从这篇文章开始,我将对 Kafka 专项知识进行深度剖析, 今天我就来聊聊 kafka 的存储系统架构设计, 说到存储系统,大家可能对 ...

  4. 深入解读 MySQL 架构设计原理,剖析存储架构选型核心

    孙玄,江湖人称"玄姐",前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何升级的,以及他们是如何玩转 My ...

  5. BigData之Hadoop:Hadoop框架(分布式系统基础架构)的简介(两大核心【HDFS存储和MapReduce计算】)、深入理解、下载、案例应用之详细攻略

    BigData之Hadoop:Hadoop框架(分布式系统基础架构)的简介(两大核心[HDFS存储和MapReduce计算]).深入理解.下载.案例应用之详细攻略 目录 Hadoop的简介(分布式系统 ...

  6. 云原生钻石课程 | 第5课:Kubernetes存储架构原理深度剖析(下)

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...

  7. 第十二期:常用的几种大数据架构剖析

    常用的几种大数据架构剖析 随着大数据技术的发展,数据挖掘.数据探索等专有名词曝光度越来越高,但是在类似于Hadoop系列的大数据分析系统大行其道之前,数据分析工作已经经历了长足的发展,尤其是以BI系统 ...

  8. 深入浅出大数据存储架构,如何设计才能满足需求?

    "与数据同行"开通了微信群,现已汇聚了4000位小伙伴了,加我为微信好友(微信号:fuyipingmnb)申请入群,让我们共建一个数据社区,<与数据同行>致力于为您提供 ...

  9. 大数据智慧出行开发第一周:智慧出行底层数据架构剖析纵览全局

    第一周:智慧出行底层数据架构剖析纵览全局 0.大数据环境前置准备 一.文档说明 为了统一我们的操作系统与软件环境,我们统一课前基本软件环境,实现全程学习当中的软件版本都是一致的 二.VmWare与li ...

最新文章

  1. 在java读字符串入文件_如何在java中将文件读入字符串?
  2. 【Jekyll搭建GITHUB个人博客】安装Ruby 环境、包管理器 RubyGems、Jekyll与错误解决...
  3. java set 空_Java面试总结(Map和Set)
  4. 编写有效的事条指导原则
  5. Invalid config event received: {version=0, server
  6. 求整数的位数及各位数字之和(C语言)
  7. java易错_java易错基础知识点
  8. jquery $.get和$.post设置请求超时error处理
  9. oracle中 initcpa,oracle  11g rman备份
  10. 大众奥迪车 UDS协议ECU的诊断
  11. Packet Tracer 思科模拟器入门教程 实验报告1
  12. 【LeetCode/力扣】1723. 完成所有工作的最短时间
  13. 机器视觉开源处理库汇总
  14. Python 爬取妹子图02
  15. matlab颜色图 热力图 等高线图 色卡 色阶 颜色映像 colormap
  16. Java数据结构与算法 一
  17. c#创建画布_C#GDI+编程基础(一:Graphics画布类)
  18. JSP爱心宠物诊所系统设计与实现
  19. 通信原理包络是什么意思_什么是PFC稳压开关电源?
  20. 手机鸿蒙系统的碎片管理,鸿蒙系统的超级终端、卡片管理、不杀后台功能,已甩安卓一条街...

热门文章

  1. el 能否定义作用域变量_python命名空间和作用域
  2. zblog php 安装,zblog教程:Z-BlogPHP如何安装
  3. python的json dump_python中json.dump和json.dumps的区别
  4. a1在c语言里代指什么意思,A1考试宝典
  5. iphone屏幕录制_iphone投屏到电脑详细教程
  6. php 的超全局数组,PHP超全局数组(Superglobals)介绍
  7. 控制使用期限_学校厨房设备延长其使用寿命的方法有哪些呢?
  8. count和distinct如何一起使用_轻松玩转乐高积木:教你如何使用颗粒分离器
  9. PCL学习笔记01:在Ubuntu上安装PCL
  10. 【BZOJ3566】概率充电器,树形概率DP