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. 【PG】Greenplum-db-6.2.1的安装部署

    目录 1配置host文件(所有节点) 2 配置用户 3 配置/etc/sysctl.conf文件 4 limit文件,后面添加[不影响安装] 5 安装greenplum-db-6.2.1-rhel7- ...

  2. 树莓派3B+远程VNC的设置

    现在很少有自带VNCserver的教程,因为之前官方系统没有自带VNC,但是现在最新版的官方系统已经自带VNCserver,只需要在设置里启用一下,然后设置就可以用啦. 1.打开树莓派设置 sudo ...

  3. [python]回答百度知道上的问题2000-2999之间的回文日

    因为百度知道的编辑器没有提供代码功能,将回复写入. 题目如下: 求2000到2999的所有回文日,例如20200202 用Python怎么做 回文年好求,回文日的话,年月日这咋存啊 思路一:遍历每一天 ...

  4. echart图表中legend不显示问题

    主要是legend中的name要和series中的name对应上.

  5. js获得用户网络状况API

    js获得用户网络状况API 这是一个实验中的功能,目前还有许多浏览器不兼容此功能某些浏览器尚在开发中 1. 网络类型 effectiveType: 可以得到2g,3g,4g connectionInf ...

  6. 使用WireShark进行网络流量安全分析

    WireShark的过滤规则 伯克利包过滤(BPF)(应用在wireshark的捕获过滤器上) ** 伯克利包过滤中的限定符有下面的三种:** Type:这种限定符表示指代的对象,例如IP地址,子网或 ...

  7. 解决tinyint映射成boolean/byte的问题

    前言 最近受疫情的影响,公司要做一个类似一码通的系统为客户服务.由我来进行表的设计.创建表之后需要逆向生成Java的entity.mapper.mapper.xml.由于我在数据库中定义了大量 tin ...

  8. mybatis入门详解

    一.mybatis-config.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP ...

  9. 【西北大学集训队选拔赛】D温暖的签到题(自创数据结构)

    题目链接 #include <bits/stdc++.h> #define NUM #define ll long long using namespace std; int n, m; ...

  10. GitHub 热点速览 Vol.13:近 40k star 计算机论文项目再霸 GitHub Trending 榜

    作者:HelloGitHub-小鱼干 摘要:"潮流是个轮回",这句话用来形容上周的 GitHub Trending 最贴切不过.无论是已经获得近 40k 的高星项目 Papers ...