Hadoop核心-HDFS读写流程

HDFS写数据步骤:

1. client发起文件上传请求,通过RPC与NameNode建立连接,NameNode检查目标文件是否已经存在,父目录是否存在,并检查用户是否有相应的权限,若检查通过,
会为该文件创建一个新的记录,否则的话文件创建失败,客户端得到异常信息,
2. client通过请求NameNode,第一个block应该传输到哪些DataNode服务器上;
3. NameNode根据配置文件中指定的备份(replica)数量及机架感知原理进行文件分配,返回可用的DataNode的地址 以三台DataNode为例:A B C
注: Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为:第一个备份放在客户端相同的datanode上(若客户端在集群外运行,
就随机选取一个datanode来存放第一个replica),第二个replica放在与第一个replica不同机架的一个随机datanode上,第三个replica放在与第二个repli
ca相同机架的随机datanode上,如果replica数大于三,则随后的replica在集群中随机存放,Hadoop会尽量避免过多的replica存放在同一个机架上.选取repl
ica存放在同一个机架上.(Hadoop 1.x以后允许replica是可插拔的,意思是说可以定制自己需要的replica分配策略)
4. client请求3台的DataNode的一台A上传数据,(本质是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成后,逐
级返回client;
5. client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(默认 64K),A收到一个packet就会传给B,B传递给C;A每传一
个packet会放入一个应答队列等待应答.
注: 如果某个datanode在写数据的时候宕掉了下面这些对用户透明的步骤会被执行:
1) 管道线关闭,所有确认队列上的数据会被挪到数据队列的首部重新发送,这样也就确保管道线中宕掉的datanode下流的datanode不会因为宕掉的datanode而丢
失数据包
2) 在还在正常运行datanode上的当前block上做一个标志,这样当宕掉的datanode重新启动以后namenode就会知道该datanode上哪个block是刚才宕机残留下
的局部损坏block,从而把他删除掉
3) 已经宕掉的datanode从管道线中被移除,未写完的block的其他数据继续呗写入到其他两个还在正常运行的datanode中,namenode知道这个block还处在und
er-replicated状态(即备份数不足的状态)下,然后它会安排一个新的replica从而达到要求的备份数,后续的block写入方法同前面正常时候一样
4) 有可能管道线中的多个datanode宕掉(一般这种情况很少),但只要dfs.relication.min(默认值为1)个replica被创建,我么就认为该创建成功了,剩余的re
lica会在以后异步创建以达到指定的replica数.
6. 数据被分割成一个个packet数据包在pipeline上一次传输,在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A
将pipeline ack发送给client
7. 当一个block传输完成后,client再次发送请求NameNode上传第二个block到服务器  

HDFS读数据步骤:

1. Client向NameNode发起RPC请求,来确定请求文件block所在的位置;
2. NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址
3. 这些返回的DN地址,会按照集群拓扑结构得出DataNode与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client的排在前;心跳机制中超时汇
报的DN状态为STALE,这样的排在后
4. Clietn选取排序靠前的DataNode来读取block,如果客户端本身就是DataNode,那么将从本地直接获取数据
5. 底层本质是建立Socket Stream(FSDataInputStream) ,重复调用父类DataInputStream的read方法,知道这个块上的数据读取完毕;
6. 当读完列表的block后,若文件读取还没有结束,客户端会继续想NameNode获取下一批的block列表
7. 读取完一个Block都会进行checksum验证,如果读取DataNode时出现错误,客户端会通知NameNode,然后再从下一个拥有该block副本的DataNode继续读取
注: 如果在读取过程中DFSInputStream检测到block错误,DFSInputStream也会检查从datanode读取来的数据的校验和,如果发现有数据损坏,它会把坏掉的bl
ock报告给namenode同时重新读取其他datanode上的其他block备份
8. read方法是并行的读取block信息,不是一块一块的读取,NameNode只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据;
9. 最终读取哎所有的block会合并成一个完整的最终文件
时间: 2024-10-21 20:36:36

Hadoop核心-HDFS读写流程的相关文章

Hadoop核心之MapReduce架构设计

Hadoop主要由两大部分组成,一个是分布式文件系统即HDFS,另一个是分布式计算框架MapReduce. 关于HDFS详细介绍请参考:[Hadoop核心之HDFS 架构设计] 本篇重点介绍分布式计算框架MapReduce.在Hadoop的MapReduce框架中主要涉及到两个组件:JobTracker和TaskTracker(HDFS中的组件是NameNode和DataNode),下面我们就分别看一下这两个组件. TaskTracker TaskTracker一个hadoop计算进程,运行在h

《Hadoop与大数据挖掘》一2.1.2 Hadoop存储—HDFS

2.1.2 Hadoop存储-HDFS Hadoop的存储系统是HDFS(Hadoop Distributed File System)分布式文件系统,对外部客户端而言,HDFS就像一个传统的分级文件系统,可以进行创建.删除.移动或重命名文件或文件夹等操作,与Linux文件系统类似. 但是,Hadoop HDFS的架构是基于一组特定的节点构建的(见图2-2),这些节点包括名称节点(NameNode,仅一个),它在 HDFS 内部提供元数据服务:第二名称节点(Secondary NameNode)

《Scala机器学习》一一3.6 运行Hadoop的HDFS

3.6 运行Hadoop的HDFS 没有分布式存储的分布式框架是不完整的.HDFS是其中的一种分布式存储.即使Spark在本地模式下运行,它仍然可以在后台使用分布式文件系统.与Spark将计算任务分解成子任务一样,HDFS也会将文件分成块,并将它们存储在集群上.为了实现高可用性(High Availability,HA),HDFS会为每个块存储多个副本,副本数称为复制级别,默认为三个(见图3-5). 图3-5 HDFS架构.每个块存储在三个(复制级别)单独的位置 Namenode通过记录块位置以

详解Hadoop核心架构HDFS+MapReduce+Hbase+Hive

通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS.MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心. 通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.Hive是如何运行,以及基于Hadoop数据仓库的构建和分布式数据库内部具体实现.如有不足,后续及时修改. HDFS的体系架构 整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过M

Hadoop核心之HDFS 架构设计

概述:HDFS即Hadoop Distributed File System分布式文件系统,它的设计目标是把超大数据集存储到分布在网络中的多台普通商用计算机上,并且能够提供高可靠性和高吞吐量的服务.分布式文件系统要比普通磁盘文件系统复杂,因为它要引入网络编程,分布式文件系统要容忍节点故障也是一个很大的挑战. 设计前提和目标 专为存储超大文件而设计:hdfs应该能够支持GB级别大小的文件:它应该能够提供很大的数据带宽并且能够在集群中拓展到成百上千个节点:它的一个实例应该能够支持千万数量级别的文件.

知识分享:详解Hadoop核心架构

通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS.MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心. 通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.Hive是如何运行,以及基于Hadoop数据仓库的构建和分布式数据库内部具体实现.如有不足,后续及时修改. HDFS的体系架构 整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过M

英特尔重定义Hadoop核心:优化CPU

据国外媒体报道,近日,英特尔新推出的Intel版Hadoop不但改写了Hadoop框架的核心功能,强化对处理器指令集的支持来提高效能,可直接支持Xeon进阶运算加密指令集AES-NI,并在数据储存到HBase的过程,用芯片原生的加密功能保护,这是英特尔进军Big Data的杀手锏软件 . 继Cloudera与Hortonworks之后,英特尔近日宣布推出Hadoop新版本,包括Hadoop发行版(Intel Distribution)以及Hadoop管理工具Intel Manager与Intel

【Hadoop】HDFS的运行原理

 简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Google 文件系统(中文,英文). HDFS有很多特点:     ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复.默认存3份.     ② 运行在廉价的机器上.     ③ 适合大数据的处理.多大?多小?HDFS默认会将文件分割成block,64M为1个block.然后将block按键值

hadoop的hdfs文件操作实现上传文件到hdfs_java

hdfs文件操作操作示例,包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,大家参考使用吧 复制代码 代码如下: import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.*; import java.io.File;import java.io.IOException;public class HadoopFile {    private Configuration conf =null