搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
从前慢现在也慢
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
我国各省单季水稻(10m或20m)高分辨率分布数据介绍_我国 作物 分布 矢量图
2
代码审查的流程_代码review流程
3
微服务系列:分布式文件存储之 MinIO 入门指南_微服务文件存储
4
前端面试八股文 - 面试必备_前端八股文面试题2023
5
HIVE数据类型与函数____(1)___ data __(2)__ inpath '1.txt' ___(3)___ in
6
探索OpenWAF:开源Web应用防火墙的力量
7
gvim verilog 插件,服务器无网安装_gvim 添加verilog 例化插件
8
0基础自学软件测试 如何短期快速学到可以找工作的程度?_如何快速学习软件测试,以便有能力找到一份工作?
9
埃氏筛法求素数
10
sobel、laplace、canny边缘检测算法概述_sobel高滞后阈值
当前位置:
article
> 正文
Hadoop文件写入(详细剖析)_had op剧情的所有dhc no de节点。都需要写入哪个文件?
作者:从前慢现在也慢 | 2024-05-19 12:08:46
赞
踩
had op剧情的所有dhc no de节点。都需要写入哪个文件?
步骤详情:
文件是如何写入 HDFS 的。尽管比较详细,但对于理解数据流还是很有用的,因为它清楚地说明了 HDFS 的一致模型。要考虑的情况是如何创建一个新文件,并把数据写入该文件,最后关闭该文件。参见上图客户端通过对 DistributedFileSystem 对象调用 create()函数来创建文件(图步骤1)。 DistributedFileSystem 对 namenode 创建一个 RPC 调用,在文件系统的命名空间中创建一个新文件,此时该文件中还没有相应的数据块(步骤 2)。 namenode 执行各种不同的检查以确保这个文件不存在,并且客户端有创建该文件的权限。如果这些检查翊通过, namenode就会为创建新文件记录一条记录;否则,文件创建失败并向客户端抛出一个 IOException 异常 DistributedFileSystem 想客户端返回一个 FSDataOutputStream 对象,由此客户端可以开始写入数据。就像读取事件一样, FSDataOutputStream 封装一个 DFSoutPutstream 对象,该对象负责处理 datanode 和 namenode 之间的通信。在客户端写入数据时(步骤 3), DFSOutputStream 将它分成一个个的数据包,并写入内部队列,称为“数据队列” (data queue)。 DataStreamer 处理数据队列,它的责任是根据datanode 列表来要求 namenode 分配适合的新块来存储数据备份。这一组 datanode 构成一个管线一一假设复本数为 3,所以管线中有 3 个节点。 DataStreamer 将数据包流式传输到管线中第 1 个datanode,该 datanode 存储数据包并将它发送到管线中的第 2 个 datanode。同样地,第 2 个 datanode 存储该数据包并且发送给管线中的第3 DFSOutputStream 也维护着一个内部数据包队列来等待 datanode 的收到确认回执,称为“确认队列” (ack queue)。当收到管道中所有 datanode 确认信息后,该数据包才会从确认队列删除(步骤 5)。如果在数据写入期间, datanode 发生故障,则执行以下操作,这对与写入数据的客户端是透明的。首先关闭管线,确认把队列中的任何数据包都添加回数据队列的最前端,以确保故障节点下游的 datanode 不会漏掉任何一个数据包。为存储在另一正常 datanode 的当前数据块指定一个新的标识,并将该标识传送给 namenode,以便故障 datanode 在恢复后可以删除存储的部分数据块。从管线中删除故障数据节点并且把余下的数据块写入管线中的两个正常的的 datanode。 namenode 注意到块复本量不足时,会在另一个节点上创建一个新的复本。后续的数据块继续正常接受处理。在一个块被写入期间可能会有多个 datanode 同时发生故障,但非常少见。只要写入了dfs. replication. min 的复本数(默认为 1),写操作就会成功,并且这个块可以在集群中异步复制,直到达到其目标复本数( dfs. replication 的默认值为 3)。客户端完成数据的写入后,会对数据流调用 close()方法(步骤 6)。该操作将剩余的所有数据包写入 datanode 管线中,并在联系 namenode 且发送文件写入完成信号之前,等待确认(步骤 7)
步骤总结:
由上图可知;写入文件分为三个角色,分别是clientnode namenode 和datanode
cliennode本质为java虚拟机.namenode 和datanode则是Hadoop数据集群存储块
第一步:create实际是客户端创建DistributedFileSystem实例化对象
第二步 create通过实例化对象录取调用对象中create()方法,此方法访问namenode,那么弄得收到命令,首先判断datanode中所写的文件是否有重复,然后在检查namenode是否有可写入空余的空间.当二者同时满足是,namenode写将datanode路径信息,文件数等记录,并确认信息返回DistributedFileSystem,否则返回异常,DistributedFileSystem收到确认信息后向客户端返回一个FSDataOutputStream FSDataOutputStream对象
第三步:实例化实例化FSDataOutputStreamFSDataOutputStream对象(该对象负责处理 datanode 和 namenode 之间的通信 ),调用该对象的write()方法, 即是图中write实现过程该对象负责处理 datanode 和 namenode 之间的通信
第四步:方法将数据分成多个数据包,并写入内部队列. DFDataOutStream 将写入的数据分成多个数据包,并写入内部队列中,同时开启datanode中DataStreamer处理数据队列,它负责根据datanode列来要求namenode分配合适的新块存储数据备份开启管道机制依次执行步骤4,同时即是write packet完整过程
第五步:每执行一次4就有一次步骤5返回确认信息.
4和5属于分别在DataQueue队列和ACKQueue队列,当每执行一次4就将此步确认信息放到
ACKQueue
队列中
如图:
第六步:当FSDataOutputStream收到确认信息后,执行close()方法关闭输出流,
第七步:DistributeFileStream 返回给namenode确认信息.
注释:第4-5部分实现在后台完成步不一定在第七步之前,
当执行第四步就就收第5步确认信息,告诉namenode 数据写入成功,即是第七步.
如有不明之处私信与我,相互交流经验.,恳请多多指正.谢谢!
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
【wpsshop博客】
推荐阅读
article
毕设项目分享 基于
SpringCloud
+
Hadoop
+
Vue
的
企业级网盘
系统
设计
与实现_毕设云盘
的
...
基于
SpringCloud
+
Hadoop
+
Vue
的
企业级网盘
系统
设计
与实现提示:适合用于课程
设计
或毕业
设计
,工作量达标,...
赞
踩
article
hadoop
start
-dfs.sh
Error
:
JAVA
_
HOME
is
not
set an...
# sbin/
start
-dfs.sh 报错如下[
hadoop
@vm7
hadoop
-2.7.1]$ sbin/star...
赞
踩
article
大
数据
入门系列 5:全网最全,
Hadoop
实验——熟悉常用
的
HDFS
目录
操作和
文件
操作_hdf...
年以上经验
的
小伙伴深入学习提升
的
进阶课程,基本涵盖了95%以上大
数据
开发知识点,真正体系化!**_向
hdfs
中上传任意文...
赞
踩
article
【
Hadoop
】之 熟悉常用
的
HDFS
操作
_
hadoop
熟悉常用
的
hdfs
操作
...
参考: 《大数据技术原理与应用》 http://www.jianshu.com/p/0663d74b79b5一、实现目
的
...
赞
踩
article
No
FileSystem
for
scheme
:
hdfs
and
Class
org.
apache
...
在获取 Hadoop 文件系统对象时,如下所示
FileSystem
fs =
FileSystem
.get(
hdfs
U...
赞
踩
article
org.
apache
.
hadoop
.
fs
.Unsupported
FileSystem
Exceptio...
Configuration configuration = new Configuration(); FileSyst...
赞
踩
article
flume
出现org.apache.
hadoop
.
fs
.Unsupported
FileSystem
E...
flume
报错说没有
hadoop
环境
flume
出现org.apache.
hadoop
.
fs
.UnsupportedFil...
赞
踩
article
UnsupportedFileSystemSc
h
emeException:
Hadoop
is no...
fl
in
k程序在idea上运行正常,打成jar包上传服务器运行,各种报错。下面这个错误印象最为深刻Caused by: ...
赞
踩
article
java
.
io
.IOExcept
io
n: No
File
System
for
scheme
: HDF...
hdfs要小写 hadoop102是集群namenode的节点ipal backend: StateBackend = ...
赞
踩
article
Hadoop
Shell
的基本操作_本关任务:
使用
hadoop
的
hdfs
系统来上传文件。...
调用文件系统(FS)
Shell
命令
使用
hadoop
fs
形式。所有的FS shell命令
使用
URI路径作...
赞
踩
article
Hadoop
Shell
基本操作_
hadoop
怎么使用
shell
命令...
Hadoop
Shell
基本操作任务目标1.熟练掌握常用的
hadoop
shell
命令相关知识调用文件系统(FS)She...
赞
踩
article
熟悉常用的
Linux
操作
和
Hadoop
操作
_熟悉常用的
linux
操作
和
hadoop
操作
...
该文章介绍了常用的
Linux
命令和
Hadoop
操作
,包括cd、ls、mkdir、rmdir等命令的使用方法,以及...
赞
踩
article
Hadoop
命令
操作大全_
hadoop
fs
-cp...
Apache
Hadoop
2.7.3 Shell
命令
操作指南大全目录OverviewappendToFilecatc...
赞
踩
article
hadoop
shell操作
hd
fs
处理
文件
命令
hd
fs
上传
命令
hadoop
fs
-put命...
副本数量记录在NameNode,不要设置超过节点数量的副本,设置超过节点数,最多也只是总节点数量的副本,不会超过Data...
赞
踩
article
hadoop
HDFS
常用命令_
hadoop
上传
文件
到
hdfs
命令...
HDFS
(Hadoop Distributed File System)提供了一系列命令行工具,用于管理和操作分布式
文件
...
赞
踩
article
Hadoop
Hdfs
常用命令
_
hadoop
怎么查看文件拥有者...
本文档介绍
Hadoop
hdfs系统的一些
常用命令
。操作hdfs系统可以使用
hadoop
fs 也可以使用 hdfs d...
赞
踩
article
win
dows下使用
hdfs
调试_
win
调试
hadoop
...
配置环境变量HADOOP_HOME=
hadoop
安装解压目录PATH=%HADOOP_HOME%\bin
hadoop
的b...
赞
踩
article
hadoop
(三)——
hdfs
(
下
)_
current
in
use
.
lock
...
dfs目录:引入:上一篇文章中,我们看见了tmp文件
下
有个dfs文件夹,dfs中有存储主节点(NameNode)信息的n...
赞
踩
article
关于
hadoop
.
tmp
.
dir
理解及
配置
...
理解:首先,
hadoop
.
tmp
.
dir
是
hadoop
文件系统依赖的基本
配置
,很多
配置
路径都依赖它,它的默认位置是在...
赞
踩
article
Linux 虚拟机:大数据集群基础环境搭建(
Hadoop
、
Spark
、
Flink
、
Hive
、Zook...
基本信息:Centos-7.9、Java-1.8、Python-3.9、Scala-2.12、
Hadoop
-3.2.1、...
赞
踩
相关标签
hadoop
毕设
毕业设计
开源
大数据
hdfs
HDFS
java
maven
flume
flink
shell
Hadoop Shell基本操作