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

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-8 -*-
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[1],"rack0")
 

原文地址:https://www.cnblogs.com/renzhongpei/p/12590328.html

时间: 2024-10-09 12:24:20

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

hadoop 中HDFC client 写数据的基本流程

一.要了解HDFS客户端写数据的过程,首先需要明白namenode和datanode namenode:主要保存数据的元数据,它维护着文件系统树及整棵树内所有的文件和目录,说的直白点就是文件目录的管理以及Block的管理,体现的是一个管理者的身份: datanode:存储并检索数据块的作用,也就是说数据的存储是有datanode来直接操作的,在这体现的是一个工作者的身份,并且会定期的向namenode汇报自身的情况, namenode 就可以比较清楚的知道其管理的每个datanode的具体情况,

hadoop(三):hdfs 机架感知

client 向 Active NN 发送写请求时,NN为这些数据分配DN地址,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响.一个简单但非优化的副本放置策略是,把副本分别放在不同机架,甚至不同IDC,这样可以防止整个机架.甚至整个IDC崩溃带来的错误,但是这样文件写必须在多个机架之间.甚至IDC之间传输,增加了副本写的代价,是否有较优的方案来解决这个问题呢? 目录: 常用策略 机架配置 分配原理 常用策略: hdfs 在缺省配置下副本数是3个,通常的策略是: 第一个副本放在和C

大数据技术之Hadoop(HDFS)

第1章 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HDFS组成架构 1.4 HDFS文件块大小(面试重点) 第2章 HDFS的Shell操作(开发重点) 1.基本语法 bin/hadoop fs 具体命令 OR bin/hdfs dfs 具体命令 dfs是fs的实现类. 2.命令大全 [[email protected] hadoop-2.7.2]$ bin/hadoop fs ? [-appendToFile <localsrc> ... <dst&

Hadoop之HDFS(HDFS的数据流读写数据) (面试开发重点)

1 HDFS写数据流程 1.1 剖析文件写入 HDFS写数据流程,如图所示 1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在. 2)NameNode返回是否可以上传. 3)客户端请求第一个 Block上传到哪几个DataNode服务器上. 4)NameNode返回3个DataNode节点,分别为dn1.dn2.dn3. 5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn

Linux启动kettle及linux和windows中kettle往hdfs中写数据(3)

在xmanager中的xshell运行进入图形化界面 1 sh spoon.sh 新建一个job 1.往hdfs中写数据 1)linux中kettle往hdfs中写数据 双击hadoop copy files 运行此job 查看数据: 1)windows中kettle往hdfs中写数据 Windows中往power服务器中hdfs写数据 日志: 2016/07/28 16:21:14 - Version checker - OK 2016/07/28 16:21:57 - 数据整合工具-作业设计

HDFS写文件过程分析

转自http://shiyanjun.cn/archives/942.html HDFS是一个分布式文件系统,在HDFS上写文件的过程与我们平时使用的单机文件系统非常不同,从宏观上来看,在HDFS文件系统上创建并写一个文件,流程如下图(来自<Hadoop:The Definitive Guide>一书)所示:具体过程描述如下: Client调用DistributedFileSystem对象的create方法,创建一个文件输出流(FSDataOutputStream)对象 通过Distribut

Storm与Spark、Hadoop三种框架对比

一.Storm与Spark.Hadoop三种框架对比 Storm与Spark.Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景.所以,在不同的应用场景下,应该选择不同的框架. 1.Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义.Storm的适用场景:1)流数据处理Storm可以用来处理源源不断流进来

大数据系列文章-Hadoop的HDFS读写流程(二)

在介绍HDFS读写流程时,先介绍下Block副本放置策略. Block副本放置策略 第一个副本:放置在上传文件的DataNode:如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点. 第二个副本:放置在与第一个副本不同的机架的节点上. 第三个副本:与第二个副本相同机架的节点. 更多副本:随机节点. HDFS写流程 客户端发请求给NameNode,我想保存一个文件A,这时候在NameNode会有一个标识,标识为A_copy(文件不可用). 根据副本放置策略,返回三个副本的可放置位置列表

HDFS的写数据流程以及异常写数据流程

一.HDFS的写数据流程 ①服务端启动HDFS中的NN和DN进程 ②客户端创建一个分布式文件系统客户端,由客户端向NN发送请求,请求上传文件 ③NN处理请求,检查客户端是否有权限上传,路径是否合法等 ④检查通过,NN响应客户端可以上传 ⑤客户端根据自己设置的块大小,开始上传第一个块,默认0-128M,NN根据客户端上传文件的副本数(默认为3),根据机架感知策略选取指定数量的DN节点返回 ⑥客户端根据返回的DN节点,请求建立传输通道客户端向最近(网络举例最近)的DN节点发起通道建立请求,由这个DN