Hadoop(三)HDFS写数据的基本流程
HDFS写数据的流程

HDFS shell上传文件a.txt,300M
对文件分块,默认每块128M。
shell向NameNode发送上传文件请求
NameNode检测文件系统目录树,看能否上传
NameNode向shell发送允许上传通知
shell向NameNode发送上传block1,备份为3的通知。
NameNode检测DataNode信息池,查找的3台DataNode的IP,查找的IP有以下机制:
网络拓扑距离最近(经历交换机最少)
如果shell本身就是一个DataNode,本地会备份一份。
相同机架备份一份(关于机架检测,见后文)
不同机架备份一份
NameNode把检测到的IP返回给shell
shell检测最近的IP,比如DataNode1,建立连接请求数据传输,建立pipeline
pipeline是Hadoop用来传输数据的对象,类似流水线的传递。
DataNode1向DataNode2建立pipeline
DataNode2向DataNode3建立pipeline
DataNode3向DataNode2返回pipeline建立成功通知,再逐级返回2-1,1-shell。
shell通过OutputStream,以packet(64K)为单位,向DataNode1发送数据,并逐级下发。
各级DataNode接收到后,存储数据到本地。
DataNode保存数据后,会逆向逐级发送数据校验包,用于验证数据是否传输完成。
传输完成,关闭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写数据的基本流程的更多相关文章
- Hadoop源码分析之客户端向HDFS写数据
转自:http://www.tuicool.com/articles/neUrmu 在上一篇博文中分析了客户端从HDFS读取数据的过程,下面来看看客户端是怎么样向HDFS写数据的,下面的代码将本地文件 ...
- 大数据:Hadoop(HDFS 读写数据流程及优缺点)
一.HDFS 写数据流程 写的过程: CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block: NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode ...
- HDFS写数据和读数据流程
HDFS数据存储 HDFS client上传数据到HDFS时,首先,在本地缓存数据,当数据达到一个block大小时.请求NameNode分配一个block. NameNode会把block所在的Dat ...
- 图解向hadoop分布式文件系统写文件的工作流程
网上看到一张关于hadoop分布式文件系统(hdfs)的工作原理的图片,其实主要是介绍了向hdfs写一个文件的流程.图中的流程已经非常清晰,直接上图 好吧,博客园告诉我少于200字的文章不允许发布到网 ...
- 【Hadoop】HDFS冗余数据块的自动删除
HDFS冗余数据块的自动删除 在日常维护hadoop集群的过程中发现这样一种情况: 某个节点由于网络故障或者DataNode进程死亡,被NameNode判定为死亡, HDFS马上自动开始数据块的容错拷 ...
- hadoop(三):hdfs 机架感知
client 向 Active NN 发送写请求时,NN为这些数据分配DN地址,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响.一个简单但非优化的副本放置策略是,把副本分别放在不同机架 ...
- Hadoop架构: HDFS中数据块的状态及其切换过程,GS与BGS
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 首先,我们要提出HDFS存储特点: 1.高容错 2.一个文件被切成块(新版本默认128MB一个块)在不 ...
- HDFS写数据的过程
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
随机推荐
- vue之冒泡阻止
用了Element ui写页面 <el-dropdown-menu slot="dropdown"> <el-dropdown-item> <el-s ...
- 从 Spring 的环境到 Spring Cloud 的配置
需求 不知不觉,web 开发已经进入 “微服务”.”分布式” 的时代,致力于提供通用 Java 开发解决方案的 Spring 自然不甘人后,提出了 Spring Cloud 来扩大 Spring 在微 ...
- ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net
在构思完系统思维脑图后,小墨回到家中,便摩拳擦掌开始了开发工作.要想迅速完成系统开发,前期系统设计和准备尤其重要,因为小墨做过太多大大小小的业务系统,准备工作也是十分顺利. 系统结构 整个系统工程结构 ...
- java基本类型、数组、和枚举类型
开始之前先吐槽一下,学艺不精,面试要吃大亏,出来混迟早要还的. 别的不说了,从零开始复习基础知识 1.标识符和关键字 意义:标识符用于对变量.类.和方法的命名.规范的标识符命名可以提高程序的可读取性. ...
- CAS无锁模式
一.java内存模型:JMM 在内存模型当中定义一个主内存,所有声明的实例变量都存在于主内存当中,主内存的数据会共享给所有线程,每一个线程有一个块工作内存,工作内存当中主内存数据的副本当更新数据时,会 ...
- 一文洞悉JVM内存管理机制
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图: 一.为什么要学习内存管理? Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙 ...
- NeurIPS 2019 Spotlight | Cascade RPN,结构的艺术带来极致的提升
论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时anchor和feature不对齐的问题,论文创新点足,效果也很惊艳,相对于原始的RPN提升13.4%AR 论文 ...
- Windows下利用Chrome调试IOS设备页面
本文介绍如何在 Windows 系统中连接 iOS设备 并对 Web 页面进行真机调试 必须前提 iOS设备.数据线 Node.js 环境 Chrome 浏览器 环境准备 安装Node环境 参考Nod ...
- WEB应用之httpd基础入门(四)
前文我们聊到了httpd的虚拟主机实现,状态页的实现,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12570900.html:今天我们来聊一聊后面的常用基础配 ...
- 浏览器与DNS解析过程
浏览器解析 1.地址栏输入地址后,浏览器检查自身DNS缓存 地址栏输入chrome://net-internals/#dns 查看. 2.浏览器缓存中未找到,那么Chrome会搜索操作系统自身的DNS ...