HDFS写数据的流程

  • HDFS shell上传文件a.txt,300M

  1. 对文件分块,默认每块128M。

  2. shell向NameNode发送上传文件请求

  3. NameNode检测文件系统目录树,看能否上传

  4. NameNode向shell发送允许上传通知

  5. shell向NameNode发送上传block1,备份为3的通知。

  6. NameNode检测DataNode信息池,查找的3台DataNode的IP,查找的IP有以下机制:

    • 网络拓扑距离最近(经历交换机最少)

    • 如果shell本身就是一个DataNode,本地会备份一份。

    • 相同机架备份一份(关于机架检测,见后文)

    • 不同机架备份一份

  7. NameNode把检测到的IP返回给shell

  8. shell检测最近的IP,比如DataNode1,建立连接请求数据传输,建立pipeline

    • pipeline是Hadoop用来传输数据的对象,类似流水线的传递。

    • DataNode1向DataNode2建立pipeline

    • DataNode2向DataNode3建立pipeline

  9. DataNode3向DataNode2返回pipeline建立成功通知,再逐级返回2-1,1-shell。

  10. shell通过OutputStream,以packet(64K)为单位,向DataNode1发送数据,并逐级下发。

    • 各级DataNode接收到后,存储数据到本地。

  11. DataNode保存数据后,会逆向逐级发送数据校验包,用于验证数据是否传输完成。

  12. 传输完成,关闭pipeline,重复5-11。

机架检测

以下内容是根据该网址内容整理:

https://blog.csdn.net/w182368851/article/details/53729790

https://www.cnblogs.com/zwgblog/p/7096875.html

机架检测的原理其实就是core-site.xml配置文件中配置一个选项:

<property>
<name>topology.script.file.name</name>
<value>/home/bigdata/apps/hadoop-talkyun/etc/hadoop/topology.sh</value>
</property>
  • 这个配置选项的value指定为一个可执行程序,通常为一个脚本.

  • 该脚本接受一个参数,输出一个值。

  • 参数通常为某台DataNode机器的ip地址,而输出的值通常为该ip地址对应的DataNode所在的Rack(机架)。

  • 流程:

    • NameNode启动时,会判断该配置选项是否为空,如果非空,则表示已经启用机架感知的配置。

    • 此时NameNode会根据配置寻找该脚本。

    • 接收到任何DataNode的心跳(heartbeat)时,将该DataNode的ip地址作为参数传给脚本,就能得到每个DataNode的Rack,保存到内存的一个map中,此使就能知道每台机器是否在同一个机架上了。

  • 配置文件简单示例:

#!/usr/bin/python
#-*-coding:UTF- -*-
import sys rack = {"NN01":"rack2",
"NN02":"rack3",
"DN01":"rack4",
"DN02":"rack4",
"DN03":"rack1",
"DN04":"rack3",
"DN05":"rack1",
"DN06":"rack4",
"DN07":"rack1",
"DN08":"rack2",
"DN09":"rack1",
"DN10":"rack2",
"172.16.145.32":"rack2",
"172.16.145.33":"rack3",
"172.16.145.34":"rack4",
"172.16.145.35":"rack4",
"172.16.145.36":"rack1",
"172.16.145.37":"rack3",
"172.16.145.38":"rack1",
"172.16.145.39":"rack4",
"172.16.145.40":"rack1",
"172.16.145.41":"rack2",
"172.16.145.42":"rack1",
"172.16.145.43":"rack2",
} if __name__=="__main__":
print "/" + rack.get(sys.argv[],"rack0")

Hadoop(三)HDFS写数据的基本流程的更多相关文章

  1. Hadoop源码分析之客户端向HDFS写数据

    转自:http://www.tuicool.com/articles/neUrmu 在上一篇博文中分析了客户端从HDFS读取数据的过程,下面来看看客户端是怎么样向HDFS写数据的,下面的代码将本地文件 ...

  2. 大数据:Hadoop(HDFS 读写数据流程及优缺点)

    一.HDFS 写数据流程 写的过程: CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block: NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode ...

  3. HDFS写数据和读数据流程

    HDFS数据存储 HDFS client上传数据到HDFS时,首先,在本地缓存数据,当数据达到一个block大小时.请求NameNode分配一个block. NameNode会把block所在的Dat ...

  4. 图解向hadoop分布式文件系统写文件的工作流程

    网上看到一张关于hadoop分布式文件系统(hdfs)的工作原理的图片,其实主要是介绍了向hdfs写一个文件的流程.图中的流程已经非常清晰,直接上图 好吧,博客园告诉我少于200字的文章不允许发布到网 ...

  5. 【Hadoop】HDFS冗余数据块的自动删除

    HDFS冗余数据块的自动删除 在日常维护hadoop集群的过程中发现这样一种情况: 某个节点由于网络故障或者DataNode进程死亡,被NameNode判定为死亡, HDFS马上自动开始数据块的容错拷 ...

  6. hadoop(三):hdfs 机架感知

    client 向 Active NN 发送写请求时,NN为这些数据分配DN地址,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响.一个简单但非优化的副本放置策略是,把副本分别放在不同机架 ...

  7. Hadoop架构: HDFS中数据块的状态及其切换过程,GS与BGS

    该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 首先,我们要提出HDFS存储特点: 1.高容错 2.一个文件被切成块(新版本默认128MB一个块)在不 ...

  8. HDFS写数据的过程

  9. HDFS 读/写数据流程

    1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...

随机推荐

  1. vue之冒泡阻止

    用了Element ui写页面 <el-dropdown-menu slot="dropdown"> <el-dropdown-item> <el-s ...

  2. 从 Spring 的环境到 Spring Cloud 的配置

    需求 不知不觉,web 开发已经进入 “微服务”.”分布式” 的时代,致力于提供通用 Java 开发解决方案的 Spring 自然不甘人后,提出了 Spring Cloud 来扩大 Spring 在微 ...

  3. ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net

    在构思完系统思维脑图后,小墨回到家中,便摩拳擦掌开始了开发工作.要想迅速完成系统开发,前期系统设计和准备尤其重要,因为小墨做过太多大大小小的业务系统,准备工作也是十分顺利. 系统结构 整个系统工程结构 ...

  4. java基本类型、数组、和枚举类型

    开始之前先吐槽一下,学艺不精,面试要吃大亏,出来混迟早要还的. 别的不说了,从零开始复习基础知识 1.标识符和关键字 意义:标识符用于对变量.类.和方法的命名.规范的标识符命名可以提高程序的可读取性. ...

  5. CAS无锁模式

    一.java内存模型:JMM 在内存模型当中定义一个主内存,所有声明的实例变量都存在于主内存当中,主内存的数据会共享给所有线程,每一个线程有一个块工作内存,工作内存当中主内存数据的副本当更新数据时,会 ...

  6. 一文洞悉JVM内存管理机制

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图: 一.为什么要学习内存管理? Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙 ...

  7. NeurIPS 2019 Spotlight | Cascade RPN,结构的艺术带来极致的提升

    论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时anchor和feature不对齐的问题,论文创新点足,效果也很惊艳,相对于原始的RPN提升13.4%AR 论文 ...

  8. Windows下利用Chrome调试IOS设备页面

    本文介绍如何在 Windows 系统中连接 iOS设备 并对 Web 页面进行真机调试 必须前提 iOS设备.数据线 Node.js 环境 Chrome 浏览器 环境准备 安装Node环境 参考Nod ...

  9. WEB应用之httpd基础入门(四)

    前文我们聊到了httpd的虚拟主机实现,状态页的实现,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12570900.html:今天我们来聊一聊后面的常用基础配 ...

  10. 浏览器与DNS解析过程

    浏览器解析 1.地址栏输入地址后,浏览器检查自身DNS缓存 地址栏输入chrome://net-internals/#dns 查看. 2.浏览器缓存中未找到,那么Chrome会搜索操作系统自身的DNS ...