HDFS 写数据流程【重点】

简介: HDFS 写数据流程【重点】

1. 首先,客户端通过 DistributedFileSystem 模块向 NameNode 请求上传文件。

2.NameNode 收到请求后,会检查该用户是否有上传权限、以及检查目录结构(目录是否存在),如果这两者都满足则返回客户端可以上传文件的信息,否则任意一个不满足都会直接报错。

3. 接着,客户端根据文件的大小进行切分,默认 128MB 一块,切分完成之后会向 NameNode 发送请求,第一个 block 块上传到哪些服务器上。

4.NameNode 收到请求之后,会根据网络拓扑和机架感知以及副本机制进行文件分配,返回可用的 DataNode 的地址给 Client 客户端。

注:Hadoop 在设计时考虑到数据的安全与高效,数据文件默认在 HDFS 上存三份,存储策略为本地一份,同机架内其他任意节点一份,不同机架的任意节点上一份。

5.Client 客户端收到地址之后,会与第一个 datanode 进行通信,请求建立 block 传输通道,datanode1 收到请求后会继续调用 datanode2,datanode2 再调用 datanode3,完成 block 传输通道。block 管道建立完成后,会逐级地应答客户端。

5. 接着,客户端以 packet 为单位开始向 datanode1 发送第一个 block,datanode1 收到一个 packet 就会发送给 datanode2、然后 datanode2 再发送给 datanode3。每传完一个 packet 就会放入一个应答队列等待应答。

6. 当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务,.......。(重复执行 3-5 步)

7. 最后,客户端调用 FSDataOutputStream 的 close 方法关闭流对象。再调用 DistributedFileSystem 对象的 complete 方法,通知 NameNode 文件写入成功。

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path file = new Path("demo.txt");
FSDataOutputStream outStream = fs.create(file);
out.write("Welcome to HDFS Java API !!!".getBytes("UTF-8")); 
outStream.close();

写数据流程视频讲解:55_尚硅谷_Hadoop_HDFS_写数据流程_哔哩哔哩_bilibili

 

相关问题:

1.HDFS 的写入过程中,如果一台机器宕机,HDFS 怎么保证数据的一致性?

答:如果在写入时,一个 DataNode 挂掉的话,NameNode 不会重新分配一个 DataNode,而是会将已经写好的数据放置到 queue 的顶端,并将挂掉的 DataNode 移除 pipeline 管道,继续将数据写入到剩余的 DataNode 中。在写入结束后,NameNode 会检查 DataNode 的信息,如果发现 partition 没有达到配置的数量要求(default=3),则会寻找一个新的 DataNode 存放副本。

2.HDFS 的写入过程中,如果只存活一台机器又会发生什么情况?

答:如果 HDFS 集群只有一台机器存活,那么会导致以下几种情况:

(1)数据不可用:HDFS 是一个分布式文件系统,它会将文件分割成块并存储在不同的结点上,如果只有一台机器存活,那么整个集群的数据将无法访问,因为他们无法从其他机器中检索数据。

(2)数据损坏丢失:如果 HDFS 只有一台机器存活并且存储了某些数据的话,那么在该机器发生故障时,这些数据可能会损坏。在这种情况下,HDFS 无法从其他节点中检索数据,因此数据可能会永久丢失。

(3)系统停止工作:Hadoop 集群是一个分布式系统,它需要多个结点协同工作,如果只有一台机器存活,它将无法执行工作负载,因此整个系统可能会停止工作。

3.Hadoop 中有一些节点挂了会有影响吗?

Hadoop 集群中的结点挂掉会对整个集群产生影响,具体包括以下方面:

(1)数据丢失:如果挂掉的结点上存储了重要的数据块,而这些数据块没有备份,那么这些数据就会永久丢失。

(2)故障转移:如果挂掉的结点上运行着关键的服务(如 NameNode、ResourceManager),则这些服务将无法正常工作。此时,Hadoop 集群中的其他节点需要接管这些服务并进行故障转移,以保证整个集群的可用性。

(3)资源利用率下降:如果一个节点挂掉,那么它上面运行的所有任务都会终止。为了保证集群资源的充分利用,这些任务必须重新调度到其他节点上运行,这可能会导致整个集群的资源利用率下降。

4.HDFS 备份文件数量是多少?写入数据时是写完一个文件就返回还是所有备份写完才返回?

答:HDFS 的默认副本数量是 3 个

上传文件时默认情况下是要等待所有备份都成功写入才会返回,这个可以通过修改 dfs.client.block.write.replace-datanode-on-failure.policy 参数来更改,默认情况下此参数的值为 DEFAULT,即需要等待所有备份都成功写入才会返回。

5.DataNode 备份过程需不需要客户端参与?

在 HDFS 分布式文件系统中,DataNode 备份过程不需要客户端参与。备份是 DataNode 之间进行的,由正在写入数据的 DataNode 向其它 DataNode 复制数据块,这个过程是自动发生的,不需要客户端参与。

备份过程的目的是为了提高数据的可用性和可靠性,当某个 DataNode 宕机或者发生故障时,可以从备份中快速恢复数据,保证数据不会丢失。

相关文章
|
2月前
|
存储 安全
HDFS读写流程详解
HDFS读写流程详解
HDFS读写流程详解
|
2月前
|
SQL 存储 分布式计算
HDFS数据(跨集群)迁移
HDFS数据(跨集群)迁移
|
2月前
|
存储 分布式计算 Hadoop
【揭秘Hadoop背后的秘密!】HDFS读写流程大曝光:从理论到实践,带你深入了解Hadoop分布式文件系统!
【8月更文挑战第24天】Hadoop分布式文件系统(HDFS)是Hadoop生态系统的关键组件,专为大规模数据集提供高效率存储及访问。本文深入解析HDFS数据读写流程并附带示例代码。HDFS采用NameNode和DataNode架构,前者负责元数据管理,后者承担数据块存储任务。文章通过Java示例演示了如何利用Hadoop API实现数据的写入与读取,有助于理解HDFS的工作原理及其在大数据处理中的应用价值。
57 1
|
3月前
|
分布式计算 Hadoop
|
3月前
|
分布式计算 Hadoop 关系型数据库
实时计算 Flink版操作报错合集之Hadoop在将文件写入HDFS时,无法在所有指定的数据节点上进行复制,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
存储 分布式计算 Hadoop
Hadoop的HDFS数据均衡
【6月更文挑战第13天】
159 3
|
5月前
|
存储 分布式计算 Hadoop
hadoop节点HDFS数据分片过程
【5月更文挑战第18天】
53 1
|
5月前
|
存储 分布式计算 Hadoop
|
5月前
|
存储 分布式计算 资源调度
|
4月前
|
消息中间件 分布式计算 关系型数据库
使用Apache Spark从MySQL到Kafka再到HDFS的数据转移
使用Apache Spark从MySQL到Kafka再到HDFS的数据转移

热门文章

最新文章

下一篇
无影云桌面