大数据分享修行宝典-HDFS读写两步教程

本文详细解析了Hadoop分布式文件系统(HDFS)的读写机制,包括NameNode、DataNode和SecondaryNameNode的角色及工作原理。阐述了客户端如何与NameNode交互,以及数据在DataNode间的传输流程。
部署运行你感兴趣的模型镜像

程序员大数据分享修行宝典-HDFS读写两步教程

大数据分享修行宝典-HDFS读写两步教程

 

 

一、HDFS读写之前提

NameNode(元数据节点):存放元数据(名称空间、副本数、权限、块列表、集群配置信息),不包含数据节点。元数据节点将文件系统元数据存储在内存中。

1.DataNode(数据节点):真正存储数据的地方,以数据块为单位。默认数据块大小为128M。数据节点周期性的将所有存储块信息发送给元数据节点。客户端通过和NameNode节点沟通后,再向数据节点对数据读出或写入。

2.SecondaryNameNode(从元数据节点):并不是元数据节点的备用节点,而是配合元数据节点工作,与元数据节点有不同的工作。SecondaryNameNode周期性地将元数据节点的命名空间镜像文件和修改日志合并,帮助元数据节点将内存中元数据信息存储到磁盘上。

3.Client(客户端):客户端就是需要获取HDFS系统中文件的应用程序和接口,引发HDFS的读/写等操作。

值得注意的是:

1.namenode实际客户端只上传一个datanode,其余两个是namenode完成的。让datenote自己复制的。然后复制完成以后逐级返回结果给namenode。如果2,3datanode复制失败,再有namenode分配新的datanode地址。对于客户端来说默认上传一个datanode就可以了,其余的由datanode自己复制。

2.datanode切片是由客户端完成的。datanode第二三个副本的上传和第一个上传是异步的。

二、HDFS中的写流程:

1.根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。

2.namenode返回是否可以上传。

3.client请求第一个 block该传输到哪些datanode服务器上。

4.namenode返回3个datanode服务器ABC。

5.client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端。

6.client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答。

7.当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

三、hdfs中的读流程:

1.跟namenode通信查询元数据,找到文件块所在的datanode服务器。

2.挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流。

3.datanode开始发送数据。(从磁盘里面读取数据放入流,以packet为单位来做校验)

4.客户端以packet为单位接收,先在本地缓存,然后写入目标文件。

推荐阅读文章

大数据技术盘点

程序员大数据培训分享Shell中数组讲解

大数据教程:SparkShell和IDEA中编写Spark程序

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

大数据系统及应用中HDFS实训资料包含多方面内容。 在实践任务方面,涵盖了多关HDFS Java API编程的内容,如文件读写文件上传、文件下载、使用字符流读取数据、删除文件、删除文件夹以及自定义数据输入流等实践内容[^1]。 在相关工具方面,HadoopHDFS实训中重要的基础,它是由Apache基金会所开发的分布式系统基础架构,可在不了解分布式底层细节的情况下开发分布式程序,满足在低性能集群上对高容错、高并发的大数据集进行高速运算和存储的需求。Hadoop支持超大文件(可达PB级),能检测和快速应对硬件故障、支持流式数据访问,在简化的一致性模型基础上保证了高容错性,因而被大规模部署在分布式系统中,应用广泛[^2]。 以下是一个利用HDFS文件系统开放的API对HDFS系统进行文件创建和读写的Java代码示例: ```java import java.io.*; import java.sql.Date; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class hdfs { public static void main(String[] args) throws IOException { //请在 Begin-End 之间添加代码,完成任务要求。 /********* Begin *********/ Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path file = new Path("/user/hadoop/myfile"); FSDataOutputStream outStream = fs.create(file); outStream.writeUTF("https://www.educoder.net"); outStream.close(); FSDataInputStream inStream = fs.open(file); String data = inStream.readUTF(); System.out.print(file); /********* End *********/ } } ``` 此代码展示了如何使用HDFS的Java API进行文件的创建和读写操作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值