Client以数据块(Block)为单位进行数据存储。按照我们一般的理解,Client向HDFS写入数据,首先需要向NameNode申请Block;申请Block完成后,申请DataNode(包括备份存储的DataNode);二者完成后,Clent进行与DataNode之间的数据存储。
我们知道NameNode之中维护两张非常重要的表,一张是filename→blocks的映射;另外一张是block→machinelist的映射。如果是我进行设计,这两张表都可以在申请的时候完成记录。HDFS在在实现过程中,采用了另外一种方式。首先filename→blocks是在申请过程中进行记录的。当Client申请Block的时候,NameNode分配Block给客户端,并将该Block记录到该File的INode当中;在申请Block的时候,NameNode还会将DataNode和备份存储的DataNode发送给Client。但是,此时NameNode并没有记录Block和DataNode(machinelist)的映射关系。Client向DataNode写入数据完成后,由DataNode向NameNode周期性的进行汇报,报告自己节点所存储的所有Block(思考一下,为什么这么实现?)。我自己以为之所以要这么实现主要是为了考虑数据的可靠性,如果在Client和数据的传输过程中数据出现了问题,那么已经记录在NameNode 中的block→machinelist就会随之改变。当然这只是我自己的考虑,正确与否还有待考证。另外还有一个需要考虑的问题是,DataNode报告自己的block列表的频率是多少呢?
分享到:
相关推荐
本文将详细解析HDFS的读取和写入过程,基于标题"《Hadoop学习总结之二:HDFS读写过程解析》"和描述中提到的代码分析。 1. **文件的打开** 当客户端想要打开一个HDFS文件时,它会调用`DistributedFileSystem.open`...
在实际读取过程中,HDFS会优先选择地理位置上最近的DataNode进行数据读取,以此减少网络延迟,提高读取速度。同时,HDFS支持预读取机制,即在读取当前数据块的同时,客户端可以预先加载后续数据块的部分数据,进一步...
3. **写入数据**:可以通过`write`方法将字符串或者JSON数据写入HDFS。 - **字符串写入**: ```python client.write('data/records.jsonl', data='this is a test!', encoding='utf-8') ``` - **JSON数据写入**...
3. **读取HDFS上的数据**:使用SparkSession创建DataFrame并加载HDFS上的数据,例如: ```java SparkSession spark = SparkSession.builder().appName("SparkSQL_HDFS_Java").getOrCreate(); DataFrame df = ...
**1、数据写入** - **客户端发起请求:**客户端(Client)首先访问NameNode,请求上传一个文件。 - **检查文件与目录:**NameNode接收到请求后,会检查目标文件或目录是否已存在。 - **确认上传权限:**如果目标...
4. **Hive客户端交互**:`HiveClient.java`可能包含了与Hive交互的代码,使得数据可以直接写入Hive表,这样可以方便后续的数据查询和分析。通过Hive,我们可以将数据结构化,提供SQL查询接口,并与其他Hadoop工具...
HDFS的读取过程涉及三个主要组件:客户端(Client)、名称节点(NameNode)和数据节点(DataNode)。读取文件的步骤如下: 1. 客户端首先调用get方法获取HDFS文件系统的实例(FileSystem),然后通过该实例的open...
在IT行业中,Hadoop分布式文件系统(HDFS)是大数据处理的核心组件之一,它为大规模数据存储提供了可靠的、可扩展的解决方案。集群环境下的HDFS使用涉及到多个关键组件和技术,如ZooKeeper、Hadoop MapReduce等。...
第2章 HDFS元数据解析 2.1 概述 2.2 内存元数据结构 2.2.1 INode 2.2.2 Block 2.2.3 BlockInfo和DatanodeDescriptor 2.2.4 小结 2.2.5 代码分析——元数据结构 2.3 磁盘元数据文件 2.4 Format情景分析 2.5 元数据...
《大数据平台构建:深入理解HDFS架构》 ...通过以上解析,我们可以看到HDFS是如何通过这些组件协同工作,实现大规模、高可靠性的数据存储和处理。理解并掌握这些基础知识,对于构建和优化大数据平台至关重要。
HDFS的客户端(Client)在文件写入时负责将文件切分成块,与NameNode通信获取数据块的存储位置,并直接与DataNode交互进行数据传输。在读取文件时,客户端可以从任何副本中获取数据,根据需要进行数据恢复和重试。 ...
HDFS是一种分布式文件系统,专为处理海量数据而设计,尤其适合一次性写入、多次读取的场景。当单台计算机无法容纳数据集时,HDFS通过分布式存储,使得数据跨越多台计算机,实现了数据的高效共享和处理。其设计目标...
在大数据处理领域,Hadoop的分布式文件系统(HDFS)和NoSQL数据库HBase是两个重要的组件。HDFS用于存储海量数据,而HBase则提供高效、随机的实时查询能力。这篇文章将详细介绍如何使用Java编程语言将HDFS中的文件...
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》是一本深入探讨Hadoop核心组件的书籍,其源代码提供了对Hadoop内部工作原理的直观理解。这本书主要关注两个关键部分:Hadoop Common和HDFS...
在HDFS写文件时,客户端调用DistributedFileSystem进行操作,通过NameNode进行数据块的分配,之后Client将数据块写入DataNode。数据写入前会进行校验,确保数据的完整性。完成写入后,NameNode将数据块信息记录在...
Client端向NameNode请求读取或写入文件,NameNode负责分配块并将其映射到DataNode,DataNode负责实际的读写操作。 2. HDFS文件读取时块损坏处理:如果HDFS在读取文件时发现其中一个块损坏了,会自动重复读取该块,...
5. **执行MapReduce作业**:编写一个MapReduce作业,该作业使用HFileOutputFormat作为输出格式,将上一步骤中写入HDFS的数据转化为HBase可读的HFile格式。 6. **加载HFiles**:最后,通过HBase的Admin API或者HBase...
1. 理解HDFS内部的决策过程,例如NameNode如何选择复制数据块的DataNode。 2. 掌握故障恢复机制,如DataNode失效时如何重新分配数据块。 3. 学习如何优化HDFS,例如调整副本策略以提高系统性能。 4. 为自定义HDFS...
**解析:** 当Client向HDFS上传文件时,它会先将文件切分为一系列的Block,然后按照NameNode提供的数据块存储位置列表,直接将Block写入相应的Datanode。数据并不会经过NameNode传递给Datanode,而是直接由Client发送...