首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
HDFS读取文件步骤
时间:
2015-05-28 09:40:55
阅读:
236
评论:
0
收藏:
0
[点我收藏+]
标签:
hadoop
hdfs
client调用FileSystem.open()
,该FileSystem指向的实例是DistrbutedFileSystem(DFS),它通过RPC请求到Namenode.
Namenode收到请求后,对于每一个块
返回存有该副本的Datanode地址
。并且依照
“网络拓扑”
来排序。
(就近原则)
DFS获取到BlockLocations后,可以
根据当前读取偏移量计算指定DataNode并进行通讯
,返回一个FSDataInputStream,该对象管理DataNode和NameNode的I/O, 客户端反复调用stream.read()方法获取数据 (这步包含了权威指南的3,4步骤)。
到达块的末端时,stream关闭与当前交互的DataNode的连接,继续
寻找下一个最佳的DataNode再执行步骤3操作
。
client从stream读取数据时,块是按照打开stream和DataNode的顺序读取的,
它也会询问NameNode来检索下一批数据块DataNode的位置
。(
《权威指南第三版》76页倒数第4行描述有误,事实上一次性获取了完整的BlockLocations
) 一旦client读取完成,就对stream执行close操作
上述流程是在正常读取,并且没有发生故障的理想情况下。
补充:
在读取数据时,如果stream和DataNode通讯时发现错误,会尝试从这个块的找最邻近的DataNode读取数据,它也会记住那个故障节点,以保证以后不会反复读取该节点上的块.
DFSInputStream会通过校验和确认从DataNode获取到的数据是否完整,如果发现有损坏的块,就会在DFSInputStream试图从其他DataNode读取其副本之前通知NameNode.
总结:
这个设计的重点是,NameNode告知客户端每个块中最佳的DataNode,并让客户端直接连接到该DataNode检索数据。由于数据流分散在集群中的所有DataNode,所以这种设计能使HDFS可扩展到大量的并发客户端。同时,NameNode只需要响应块位置的请求(这些信息存储在内存中,所以非常高效),无须响应数据请求,否则随着客户端数量的增长,NameNode会很快成为瓶颈。
HDFS读取文件步骤
标签:
hadoop
hdfs
原文地址:http://blog.csdn.net/u010811257/article/details/46054089
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!