HDFS读写数据过程】的更多相关文章

一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public FSDataInputStream open(Path f, int bufferSize) throws IOException { return new DFSClient.DFSDataInputStream( dfs.open(getPathName(f), bufferSize, verif…
最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要的角度来读这部分代码的. hdfs-site.xml <property> <name>dfs.data.dir</name> <value>/mnt/datadir1/data,/mnt/datadir2/data,/mnt/datadir3/data<…
一.HDFS读写文件过程 1.读取文件过程 1)       初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件 2)       FileSystem用RPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址. 3)       FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用stream的read()函数开始读取数据. 4)       DFSInpu…
ES读写数据过程及原理 倒排索引 首先来了解一下什么是倒排索引 倒排索引,就是建立词语与文档的对应关系(词语在什么文档出现,出现了多少次,在什么位置出现) 搜索的时候,根据搜索关键词,直接在索引中找到对应关系,搜索速度快. doc:表示哪个文档, frep:表示出现的频率 pos:表示出现的位置 1.写数据过程 客户端通过hash选择一个node发送请求,这个node被称做coordinating node(协调节点), 协调节点对docmount进行路由,将请求转发给到对应的primary s…
一.HDFS 写数据流程 写的过程: CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block: NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode 上的地址: DATANODE:负责数据的存储,可以有很多个: 客户端想 NameNode 发出请求(包含 Blocksize 和 副本数): NameNode 经过计算,反馈给客户端相同副本数的 DataNode,切给出的 DataNode 有优先存储顺序要求:(数据与 DataNode 对应时,…
一.hdfs文件读取过程 hdfs有一个FileSystem实例,客户端通过调用这个实例的open()方法就可以打开系统中希望读取的文件,hdfs通过rpc协议调用Nadmenode获取block的位置信息,对于文件的每一块,Namenode会返回含有该block副本的Datanode的节点地址:客户端还会根据网络拓扑来确定它与每一个DataNode的位置信息,从离它最近的哪个DataNode获取block的副本(所谓的就近原则),最理想的情况是该block就存储在客户端所在的节点上. hdfs…
HDFS的组成 1.NameNode:存储文件的元数据,如文件名,文件目录结构,文件属性(创建时间,文件权限,文件大小) 以及每个文件的块列表和块所在的DataNode等.类似于一本书的目录功能. 2.DataNode:在本地文件系统存储文件块数据,以及块数据的校验和. 3.SecondaryNameNode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照. HDFS写数据流程 1.HDFS客户端向NameNode请求是否可以上传该文件 2.NameNode返回客户端可…
一.上传数据 二.下载数据 三.读写时的节点位置选择 1.网络节点距离(机架感知) 下图中: client 到 DN1 的距离为 4 client 到 NN 的距离为 3 DN1 到 DN2 的距离为 2 2.Block 的副本放置策略 NameNode 通过 Hadoop Rack Awareness 确定每个 DataNode 所属的机架 ID 简单但非最优的策略 将副本放在单独的机架上 这可以防止在整个机架出现故障时丢失数据,并允许在读取数据时使用来自多个机架的带宽. 此策略在群集中均匀分…
1.Hdfs读数据出错:若在读数据的过程中,客户端和DataNode的通信出现错误,则会尝试连接下一个 包含次文件块的DataNode.同时记录失败的DataNode,此后不再被连接. 2.Hdfs在写某一个副本数据的时候出错: (1)首先会关闭dataNode联通的线管. (2)将已发送至线管内,还没有收到确认消息的数据包重新写回到数据队列中,保证数据不丢失. (3)将当前正常工作的dataNode赋予新的版本号,这样保证即使故障dataNode节点恢复了,由于版本号不对,故障dataNode…
在介绍HDFS读写流程时,先介绍下Block副本放置策略. Block副本放置策略 第一个副本:放置在上传文件的DataNode:如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点. 第二个副本:放置在与第一个副本不同的机架的节点上. 第三个副本:与第二个副本相同机架的节点. 更多副本:随机节点. HDFS写流程 客户端发请求给NameNode,我想保存一个文件A,这时候在NameNode会有一个标识,标识为A_copy(文件不可用). 根据副本放置策略,返回三个副本的可放置位置列表…