HDFS文件读取详解
客户端与HDFS文件读取
创建HDFS文件系统实例
FileSystem fs = FileSystem.get(new URI("hdfs://ns1"), new Configuration(),"root");
客户端通过调用FileSystem对象fs的Open()方法打开要读取的文件,DistributedFileSystem通过使用RPC来调用NameNode,以确定文件起始块的位置。
对于文件的每一个块,NameNode返回存有该块副本的DataNode地址。这些DataNode根据它们与客户端的距离来排序(根据集群中的网络拓扑)。如
果该客户端本身就是一个DataNode(例如在一个MapReduce任务中)并保存有相应数据块的一个副本时,该节点就会从本地DataNode读取数据。然后
DistributedFileSystem返回一个FSDataInputStream对象(支持文件定位的输入流)给客户端读取数据。FSDataInputStream类转而封装DFSInputStream
对象,该对象管理着DataNode和NameNode的I/O。
FSDataInputStream in = fs.open(new Path(dfsPath));
接着客户端对这个输入流调用read()方法读取,存储着文件起始位置的几个块的DataNode地址的DFSInputStream随机链接距离最近的DataNode。通过
对数据流反复调用read()方法,将数据从DataNode传输到客户端,到达快的末端时,DFSInputStream关闭与该DataNode的连接,然后寻找下一个块的
最佳DataNode,客户端只需要读取连续的流。客户端从流中读取数据时,块是按照打开DFSInputStream与DataNode新建连接顺序的读取的,它也会根
据需要询问NameNode来检索下一批数据块的DataNode的位置,一旦客户端读取完成就对DFSInputStream调用close()方法释放。在读取数据时,如果
DFSInputStream在与DataNode通信时遇到错误,会尝试从这个块的另外一个最邻近的DataNode读取数据。它也会记住那个故障的DataNode,以保证
以后不会从那个故障DataNode节点反复读取后续的块数据。DFSInputStream也会通过校验和确认从DataNode发来的数据是否完整。如果发现有损坏的
块,就在DFSInputStream试图从其他DataNode读取其副本之前通知NameNode。这个设计的一个重点是:NameNode告知客户端每个块中最佳的
DataNode,并让客户端直接连接到该最佳DataNode上检索数据。由于数据流分散在集群中的所有DataNode上,所以这种设计能使HDFS可扩展到大量
的并发客户端。同时,NameNode只需要响应块位置的请求(这些块位置信息存储在内存中,因而非常高效),无需响应数据请求,否则随着客户端数量
的增长,NameNode会很快成为瓶颈。
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(localPath)));
IOUtils.copyBytes(in, out, 4096, true); Hadoop的网络拓扑解释
在本地网络中,两个节点被称为“彼此近邻”是指:在海里数据处理中,其主要限制因素是节点之间数据的传输速率-带宽很稀缺。这里的想法是将两个
节点间的带宽作为军力的衡量标准。如果不用衡量节点间的带宽则很难实现(需要一个稳定的集群,并且在集群中两两节点对数量是节点数量的平方)。
Hadoop为此采用了一种简单的方法:把网络当做一棵树,两个节点间的距离是它们到最近共同祖先的距离综合。该书中的层次是没有预先设定的,但是相对
于数据中心、机架和正在运行的节点,通常可以设定等级。具体是针对以下每个场景,可用带宽一次递减,如下:
同一节点上的进程
同一机架上的不同节点
同一数据中心的不同机架上的节点
不同数据中心的节点
跨数据中心运行
目前到Hadoop-2.7仍然不适合跨数据中心运行。
HDFS文件读取详解的更多相关文章
- hdfs文件系统架构详解
hdfs文件系统架构详解 官方hdfs分布式介绍 NameNode *Namenode负责文件系统的namespace以及客户端文件访问 *NameNode负责文件元数据操作,DataNode负责文件 ...
- Hadoop(四)HDFS集群详解
前言 前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群.接下来这篇我详细的分享一下HDFS. HDFS前言: 设计思想:(分而治之)将大文件.大 ...
- adoop(四)HDFS集群详解
阅读目录(Content) 一.HDFS概述 1.1.HDFS概述 1.2.HDFS的概念和特性 1.3.HDFS的局限性 1.4.HDFS保证可靠性的措施 二.HDFS基本概念 2.1.HDFS主从 ...
- 【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)
1. HDFS概述 Hadoop 分布式系统框架中,首要的基础功能就是文件系统,在 Hadoop 中使用 FileSystem 这个抽象类来表示我们的文件系统,这个抽象类下面有很多子实现类,究竟使用哪 ...
- 【Linux学习】Linux下用户组、文件权限详解
原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...
- C++文件读写详解(ofstream,ifstream,fstream)
C++文件读写详解(ofstream,ifstream,fstream) 这里主要是讨论fstream的内容: #include <fstream> ofstream //文件写操作 内存 ...
- Android的file文件操作详解
Android的file文件操作详解 android的文件操作要有权限: 判断SD卡是否插入 Environment.getExternalStorageState().equals( android ...
- Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号
一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...
- 史上最全的maven pom.xml文件教程详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
随机推荐
- cas 官方文档
1. 架构 http://jasig.github.io/cas/4.0.0/planning/Architecture.html System Components The CAS server a ...
- [转] PostgreSQL学习手册(数据表)
from: http://www.cnblogs.com/stephen-liu74/archive/2012/04/23/2290803.html 一.表的定义: 对于任何一种关系型数据库而言,表都 ...
- JAVA - 回调机制
参考例子:android的Button OnClickListener接口.<第一行代码>中的回调例子 定义接口 public interface HttpCallbackListen ...
- LSI SAS 3108 配置操作
配置LSISAS3108 介绍LSISAS3108的配置操作. 5.1 登录CU界面 介绍登录LSISAS3108的CU配置界面的方法,以及CU界面的主要功能. 5.2 创建RAID 介绍在LSISA ...
- apache 2.4 You don't have permission to access / on this server
用的2.4版本,以前版本解决: 马上打开apache的配置文件httpd.conf,逐行检查.在大约快一半的地方有以下这段代码: <Directory /> Options Foll ...
- memcache锁,解决查询过多email查询为空的问题
/* 设置memcache锁,解决查询过多email查询为空的问题 Begin */ $mmc = new Memcache; $mmc->connect('127.0.0.1', 11211) ...
- Oracle 增加修改删除字段
Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...
- shell中if做比较
比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then 这里的关键有几点: 1 使用单个等号 2 注意到等号两边各有一 ...
- NetBeans使用技巧记录
1.窗体字体大小设置: 在etc文件夹下的netbeans.conf中添加,12表示字体大小,12正合适. netbeans_default_options="--fontsize 12 - ...
- hadoop实现共同出现的单词(Word co-occurrence)
共同出现的单词(Word co-occurrence)是指在一个句子中相邻的两个单词.每一个相邻的单词就是一个Co-Occurrence对. Sample Input: a b cc, c d d c ...