Hadoop HDFS 副本机制

2023-05-16

 

Data Replication

HDFS is designed to reliably store very large files across machines in a large cluster. It stores each file as a sequence of blocks. The blocks of a file are replicated for fault tolerance. The block size and replication factor are configurable per file.

All blocks in a file except the last block are the same size, while users can start a new block without filling out the last block to the configured block size after the support for variable length block was added to append and hsync.

An application can specify the number of replicas of a file. The replication factor can be specified at file creation time and can be changed later. Files in HDFS are write-once (except for appends and truncates) and have strictly one writer at any time.

The NameNode makes all decisions regarding replication of blocks. It periodically receives a Heartbeat and a Blockreport from each of the DataNodes in the cluster. Receipt of a Heartbeat implies that the DataNode is functioning properly. A Blockreport contains a list of all blocks on a DataNode.

HDFS设计用于在大型集群中跨机器可靠地存储非常大的文件。它将每个文件存储为一系列块。复制文件块以实现容错。每个文件的块大小和复制因子都是可配置的。

文件中除最后一个块外的所有块的大小都相同,而在将对可变长度块的支持添加到append和hsync后,用户可以启动新块,而无需将最后一个块填充到配置的块大小。

应用程序可以指定文件副本的数量。复制系数可以在文件创建时指定,以后可以更改。HDFS中的文件只写一次(除了附加和截断),并且在任何时候都有一个写入程序。

NameNode做出有关块复制的所有决策。它定期从集群中的每个数据节点接收心跳信号和块报告。接收到心跳信号意味着DataNode功能正常。Blockreport包含DataNode上所有块的列表。

HDFS DataNodes

The placement of replicas is critical to HDFS reliability and performance. Optimizing replica placement distinguishes HDFS from most other distributed file systems. This is a feature that needs lots of tuning and experience. The purpose of a rack-aware replica placement policy is to improve data reliability, availability, and network bandwidth utilization. The current implementation for the replica placement policy is a first effort in this direction. The short-term goals of implementing this policy are to validate it on production systems, learn more about its behavior, and build a foundation to test and research more sophisticated policies.

Large HDFS instances run on a cluster of computers that commonly spread across many racks. Communication between two nodes in different racks has to go through switches. In most cases, network bandwidth between machines in the same rack is greater than network bandwidth between machines in different racks.

The NameNode determines the rack id each DataNode belongs to via the process outlined in Hadoop Rack Awareness. A simple but non-optimal policy is to place replicas on unique racks. This prevents losing data when an entire rack fails and allows use of bandwidth from multiple racks when reading data. This policy evenly distributes replicas in the cluster which makes it easy to balance load on component failure. However, this policy increases the cost of writes because a write needs to transfer blocks to multiple racks.

For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on the local machine if the writer is on a datanode, otherwise on a random datanode in the same rack as that of the writer, another replica on a node in a different (remote) rack, and the last on a different node in the same remote 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 not 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 block do not evenly distribute across the racks. Two replicas are on different nodes of one rack and the remaining replica is on a node of one of the other racks. This policy improves write performance without compromising data reliability or read performance.

If the replication factor is greater than 3, the placement of the 4th and following replicas are determined randomly while keeping the number of replicas per rack below the upper limit (which is basically (replicas - 1) / racks + 2).

Because the NameNode does not allow DataNodes to have multiple replicas of the same block, maximum number of replicas created is the total number of DataNodes at that time.

After the support for Storage Types and Storage Policies was added to HDFS, the NameNode takes the policy into account for replica placement in addition to the rack awareness described above. The NameNode chooses nodes based on rack awareness at first, then checks that the candidate node have storage required by the policy associated with the file. If the candidate node does not have the storage type, the NameNode looks for another node. If enough nodes to place replicas can not be found in the first path, the NameNode looks for nodes having fallback storage types in the second path.

The current, default replica placement policy described here is a work in progress.

副本的放置对于HDFS的可靠性和性能至关重要。优化副本放置使HDFS区别于大多数其他分布式文件系统。这是一个需要大量调整和经验的功能。机架感知副本放置策略的目的是提高数据可靠性、可用性和网络带宽利用率。副本放置策略的当前实现是这方面的第一项工作。实施这一政策的短期目标是在生产系统上验证它,了解它的行为,并为测试和研究更复杂的政策打下基础。

大型HDFS实例运行在通常分布在多个机架上的计算机集群上。不同机架中的两个节点之间的通信必须通过交换机进行。在大多数情况下,同一机架中机器之间的网络带宽大于不同机架中机器之间的网络带宽。

NameNode通过Hadoop rack Aware中概述的过程确定每个DataNode所属的机架id。一种简单但非最佳的策略是将副本放置在唯一的机架上。这样可以防止在整个机架出现故障时丢失数据,并允许在读取数据时使用多个机架的带宽。此策略在群集中均匀分布副本,这使得在组件出现故障时可以轻松平衡负载。但是,此策略会增加写入成本,因为写入需要将块传输到多个机架。

对于常见情况,当复制系数为3时,HDFS的放置策略是,如果写入程序位于datanode上,则在本地计算机上放置一个副本,否则在与写入程序位于同一机架的随机datanode上,在不同(远程)机架的节点上放置另一个副本,在同一远程机架的不同节点上放置最后一个副本。此策略减少机架间写入通信量,这通常会提高写入性能。机架故障的概率远小于节点故障的概率;此策略不会影响数据可靠性和可用性保证。但是,它不会减少读取数据时使用的总网络带宽,因为一个块只放在两个而不是三个唯一的机架中。使用此策略,块的副本不会均匀分布在机架上。两个副本位于一个机架的不同节点上,其余副本位于另一个机架的节点上。此策略在不影响数据可靠性或读取性能的情况下提高了写入性能。

如果复制系数大于3,则随机确定第4个和后续复制副本的位置,同时保持每个机架的复制副本数量低于上限(基本上为(复制副本-1)/机架+2)。

由于NameNode不允许DataNodes具有同一块的多个副本,因此创建的最大副本数是当时DataNodes的总数。

在HDFS中添加了对存储类型和存储策略的支持之后,除了上述机架感知之外,NameNode还考虑了副本放置的策略。NameNode首先基于机架感知选择节点,然后检查候选节点是否具有与文件关联的策略所需的存储。如果候选节点没有存储类型,NameNode将查找其他节点。如果在第一条路径中找不到足够放置副本的节点,NameNode将在第二条路径中查找具有回退存储类型的节点。

此处描述的当前默认副本放置策略正在执行中。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop HDFS 副本机制 的相关文章

  • 用Android 动画 演示冒泡排序

    之前面试遇到的一道机试题 当时时间不够没有调出来 有时间把它整了一下 代码 public class MainActivity extends ActionBarActivity implements OnClickListener pri
  • 教你怎么阅读外文文献

    转载自 http www douban com group topic 14551517 NO 1 中科院大博士是如何进行文献检索和阅读的 xff08 好习惯受益终生 xff09 一 如何进行文献检索 我是学自然科学的 xff0c 平时确实
  • webpack打包时提示Invalid configuration object错误

    初学者如果是通过网上教程来学习webpack xff0c 第一次用webpack打包时通常会遇到下面这样的问题 xff1a 实际上出错信息已经说明了问题原因 xff1a Invalid configuration object Webpac
  • Maven核心概念(1)--坐标

    注 xff1a 转载时请注明原作者 lreis2010 及出处 http blog csdn net lreis2010 xff01 作者初次接触Maven是希望有一种方式能够自动化地管理项目中使用的Jar包 随着对于Maven的学习 xf
  • 【UML】四种关系

    一 在学习UML中的时候含有的四种关系是 xff1a 关联Association xff1a 是一种结构化的关系 xff0c 指一种对象和另一种对象有联系 xff0c 给定关联的两个类 xff0c 可以从其中的一个类的对象访问到另一个类的相
  • vnc,在windows系统上安装vnc,操作教程

    VNC是一款可以实现远程桌面控制 方面很实用的小工具 xff0c 今天给大家分享如何在在windows系统上安装vnc的操作方法 xff1a 小编在这里用到了 xff1a IIS7服务器管理工具来操作的 具体操作的如下 xff1a 一 首先
  • 51单片机手动自动智能窗户窗帘控制系统手动自动定时

    实践制作DIY GC 00 45 智能窗户窗帘控制系统 一 功能说明 xff1a 基于 51 单片机设计 智能窗户窗帘控制系统 二 功能介绍 xff1a STC89C52 AT89C52 系列最小系统板 43 5VUSB电源 43 ULN2
  • linux下 bash-completion 离线安装(Ubuntu或centos )

    bash completion 安装 实现k8s命令自动补全 xff0c 我们需要安装bash completion 在github下载离线包 下载地址解压 tar xvJf bash completion 2 11 tar xz 命令补全
  • ROS自定义地图(CAD、手绘等)

    0x00 概述 在前面的文章中 xff0c 我们介绍如何自动导航时 xff0c 都是基于使用gmapping或者hector mapping创建的地图 当然使用其他的建图方法创建的地图也可以 xff0c 但是目前为止 xff0c 无论使用哪
  • STM32 控制蜂鸣器播放音乐的原理和实例

    STM32 控制蜂鸣器播放音乐的原理和实例 本文通过将乐谱里的每个音符的声音频率和声音时长保存在两个数组里面 1 使用通用定时器TIM4实现无中断的微秒级延时函数 xff0c 控制每个音符的发声时长 2 使用系统滴答时钟Systick实现带
  • 影响力最大化——CELF算法的简介与python实现

    CELF算法是Leskovecl等人利用IC模型的子模特性对爬山贪心算法进一步改进得到的优化算法 子模函数的定义为 任意函数f 将有限集合映射为非负实数集并且满足收益递减特性即为子模函数 设集合s T xff0c 任意元素v添加到集合S中获
  • Qos队列调度算法(SP/WRR/DWRR)

    本文重点分析sonic中支持的三种Qos队列调度算法 xff1a 1 SP xff08 Strict Priority xff0c 严格优先级 xff09 也称为PQ xff08 Priority Queuing xff09 调度 xff0
  • python的MapReduce的应用案例

    在学习这个项目中用到许多数学公式 xff0c 有的自己不太懂 xff0c 所以上传上来进行实地应用 参考资料 generate train feature map py usr bin env python encoding 61 UTF
  • 索赔649亿!GitHub Copilot惹上官司,被指控侵犯代码版权,是开源社区“寄生虫”...

    大数据文摘授权转载自AI前线 整理 xff1a 刘燕 xff0c 核子可乐 一位 20 年老开源程序员 xff1a GitHub Copilot 就是开源社区的 寄生虫 GitHub 面临集体起诉 xff0c 索赔 647 亿 GitHub
  • SDN网络技术:OpenFlow协议(1)

    本文首发于我的公众号码农之屋 xff08 id Spider1818 xff09 xff0c 专注于干货分享 xff0c 包含但不限于Java编程 网络技术 Linux内核及实操 容器技术等 欢迎大家关注 xff0c 二维码文末可以扫 导读
  • Ubuntu、debian安装图形界面,输入法,解决远程桌面卡顿问题

    安装图形界面 tasksel选择安装Ubuntu Desktopapt get install xrdp tigervnc standalone server安装远程接入systemctl start xrdpsystemctl enabl
  • JS 异步 ( 一、异步概念、Web worker 基本使用 )

    相关阅读 xff1a JS 异步 一 异步概念 Web worker 基本使用 JS 异步 二 Promise 的用法 手写模拟 Promise JS 异步 三 generator 的用法 async await 的用法 文章目录 异步异步
  • eve-ng 自定义linux镜像

    文章目录 1 创建目录2 上传镜像并改名3 创建虚拟磁盘qcow24 登录eve网页5 查找lab UUID和虚拟机编号6 将系统提交成模板7 压缩镜像 xff08 可选 xff09 1 创建目录 root 64 eve ng opt un
  • 百度地图Marker的定位和方向

    原文 xff1a http bbs lbsyun baidu com forum php mod 61 viewthread amp tid 61 83704 今天做百度地图需要在显示很多车辆的位置信息 并显示车辆的角度和行驶方向 需要用到
  • ELFhash - 优秀的字符串哈希算法

    1 字符串哈希 xff1a 我们先从字符串哈希说起 在很多的情况下 xff0c 我们有可能会获得大量的字符串 xff0c 每个字符串有可能重复也有可能不重复 C不像Python有字典类型的数据结构 xff0c 我们没有办法吧字符串当做是键值

随机推荐

  • 详解TensorFlow数据读取机制(附代码)

    在学习TensorFlow的过程中 xff0c 有很多小伙伴反映读取数据这一块很难理解 确实这一块官方的教程比较简略 xff0c 网上也找不到什么合适的学习材料 今天这篇文章就以图片的形式 xff0c 用最简单的语言 xff0c 为大家详细
  • Linux下安装boa服务器遇到的问题

    最近在CentOS7机器上安装boa服务器的时候 xff0c 遇到了不少问题 xff0c 在这里记录一下 1 从官网下载最新 boa源码包 xff0c 网址 xff1a http www boa org xff1b 2 解压 xff0c 进
  • 【linux】查看Linux系统版本信息的几种方法

    一 查看Linux内核版本命令 xff08 两种方法 xff09 xff1a 1 cat proc version 2 uname a 二 查看Linux系统版本的命令 xff08 3种方法 xff09 xff1a 1 lsb releas
  • 如何使用Python为Hadoop编写一个简单的MapReduce程序

    转载自 xff1a http asfr blogbus com logs 44208067 html 在这个实例中 xff0c 我将会向大家介绍如何使用Python 为 Hadoop编写一个简单的 MapReduce 程序 尽管 Hadoo
  • Android Gradle 7.x新版本的依赖结构变化

    版本的小蜜蜂 小海豚 电鳗版本的Android Studio新建工程的依赖结构和之前的发生了变化 xff0c 主要有 xff1a 原来在工程build gradle中的buildscript和allprojects xff0c 移动至set
  • C#:如何用VS开启人生中第一个Windows窗体应用程序(Winform)?

    摘要 xff1a Windows窗体应用程序 xff08 Winform xff0c 下文以此指代 xff09 既能有效 直观地设计Windows窗体界面 xff0c 又支持内部逻辑的编写 那么 xff0c 对于C 初学者来说 xff0c
  • BootLoader & Grub详解

    BootLoader amp Grub详解 xff08 补记 xff09 2008 8 2 星期日 凉爽 补记 xff1a 2010 xff0d 04 xff0d 21 时隔两年 xff0c 会过头来重新看了一下 xff0c 发现GRUB的
  • 签名问题:EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>

    sudo apt key adv keyserver keyserver ubuntu com recv keys F42ED6FBAB17C654 代码如上 xff0c 更换签名
  • Python,gnuplot,libsvm配置详细步骤

    1 下载Python xff0c gnuplot以及libsvm 我的电脑是64位 xff0c Win7操作系统 1 1 python 2 7 6 64位 这里我用的Python是64位的Python2 7 6 下载地址 xff1a htt
  • C++中assert函数的用法介绍

    assert宏的原型定义在 lt assert h gt 中 xff0c 其作用是如果它的条件返回错误 xff0c 则终止程序执行 xff0c 原型定义 xff1a inclide lt assert h gt void assert in
  • C++中stdlib.h头文件介绍

    stdlib头文件即standard library标准库头文件 xff0c stdlib头文件里包含了C C 43 43 语言的最常用的系统函数 xff0c 该文件包含了C语言标准库函数的定义 xff0c stdlib h中定义了物种类型
  • 蛋白质性质和结构分析

    原文链接 第七章 蛋白质性质和结构分析 传统的生物学认为 xff0c 蛋白质的序列决定了它的三维结构 xff0c 也就决定了它的功能 由于用X光晶体衍射和NMR核磁共振技术测定蛋白质的三维结构 xff0c 以及用生化方法研究蛋白质的功能效率
  • Libsvm网格参数寻优教程

    原文 xff1a http endual iteye com blog 1262010 首先下载Libsvm Python和Gnuplot xff1a l libsvm的主页http www csie ntu edu tw cjlin li
  • 打井问题

    在偏远的山区 xff0c 水资源很稀缺 xff0c 因此 xff0c 我们问每个山区进行打井工程 xff0c 在不同的地方打了N口井 xff0c 现在我们要在这N口井之间修建管道 xff0c 要使得这些井都能连通 xff0c 同时所使用的管
  • C语言结构体的初始化

    C primer Plus第五版 第14章结构和其他数据形式 1 结构声明 结构声明 xff08 structure declaration xff09 是描述结构体如何组合的主要方法 xff0c 声明就像下面这样 xff1a struct
  • 【Unix编程】文件处理函数

    文件处理函数 xff1a http www iteedu com os linux linuxprgm linuxcfunctions file fcntl php 1 close xff08 关闭文件 xff09 相关函数 open xf
  • ubuntu安装vnc踩的坑

    较新版本的ubuntu 安装vnc 1 搜索setting 把里面的sharing的权限都打开 2 试一下sudo apt get install vnc4server 或者sudo apt y install vnc4server 3 如
  • ElasticSearch 7.6中遇到的一些坑

    一 限制单个index在单个节点上的总shard数 index routing allocation total shards per node 一般在冷热分离的场景种 xff0c 冷数据会设置副本 xff0c 热数据为了保证写入速度 xf
  • 大数据部门组织结构

    平台团队 运维团队 运维工程师最基本的职责都是负责服务的稳定性 xff0c 确保服务可以7 24H不间断地为用户提供服务 xff0c 负责维护并确保整个服务的高可用性 xff0c 同时不断优化系统架构提升部署效率 优化资源利用率 xff1b
  • Hadoop HDFS 副本机制

    Data Replication HDFS is designed to reliably store very large files across machines in a large cluster It stores each f