客户端与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文件读取详解的更多相关文章

  1. hdfs文件系统架构详解

    hdfs文件系统架构详解 官方hdfs分布式介绍 NameNode *Namenode负责文件系统的namespace以及客户端文件访问 *NameNode负责文件元数据操作,DataNode负责文件 ...

  2. Hadoop(四)HDFS集群详解

    前言 前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群.接下来这篇我详细的分享一下HDFS. HDFS前言: 设计思想:(分而治之)将大文件.大 ...

  3. adoop(四)HDFS集群详解

    阅读目录(Content) 一.HDFS概述 1.1.HDFS概述 1.2.HDFS的概念和特性 1.3.HDFS的局限性 1.4.HDFS保证可靠性的措施 二.HDFS基本概念 2.1.HDFS主从 ...

  4. 【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)

    1. HDFS概述 Hadoop 分布式系统框架中,首要的基础功能就是文件系统,在 Hadoop 中使用 FileSystem 这个抽象类来表示我们的文件系统,这个抽象类下面有很多子实现类,究竟使用哪 ...

  5. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

  6. C++文件读写详解(ofstream,ifstream,fstream)

    C++文件读写详解(ofstream,ifstream,fstream) 这里主要是讨论fstream的内容: #include <fstream> ofstream //文件写操作 内存 ...

  7. Android的file文件操作详解

    Android的file文件操作详解 android的文件操作要有权限: 判断SD卡是否插入 Environment.getExternalStorageState().equals( android ...

  8. Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号

    一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...

  9. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

随机推荐

  1. PHP开发Android应用程序(转)

    第一部分是指在Android系统的手机上直接写PHP脚本代码并立即运行:第二部分则继续讲解如何把写好的PHP脚本代码打包成akp安装文件. 首先,在手机上安装两个apk包. 一个是SL4A(Scrip ...

  2. 顺序表JAVA代码

        publicclassSeqList{       final int defaultSize =10;     //默认的顺序表的最大长度     int maxSize;          ...

  3. Creating a Swap Partition

    Creating a Swap Partition 1.   Use  fdisk /dev/vda  to open your disk in fdisk. (Use gdisk if you ar ...

  4. Dijkstra算法and Floyd算法 HDU 1874 畅通工程续

    Dijkstra算法描述起来比较容易:它是求单源最短路径的,也就是求某一个点到其他各个点的最短路径,大体思想和prim算法差不多,有个数组dis,用来保存源点到其它各个点的距离,刚开始很好办,只需要把 ...

  5. 用CSS边框图像让你的网站更漂亮

    不久之前,添加一些装饰性元素,例如给网页中的图片添加花哨的边,以及耐心调整CSS文件才能使你的网页看起来不错.然而现在CSS已经做出了改变,用复杂的边框装饰你的网站只需几行代码.这篇文章将告诉你如何做 ...

  6. PL/SQL中的变量

    1.标量: ag1: declare v_ename emp.ename%type;--自己称为单变量 begin select ename into v_ename from emp where e ...

  7. 如何在苹果官网下载旧版本的Xcode 方法

    1   在百度里输入“苹果开发者中心“,进入以下页面.点击页面中的“Member Center" 2  出现登录界面.这是需要苹果开发者帐号的,没有帐号的可以选择“Create Apple ...

  8. 查看sqlserver默认的编码格式

    SQL语句:SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage') 936 简体中文GBK 950 繁体中文BIG ...

  9. C#中的委托(Delegate)和事件(Event)

    原文地址:C#中的委托(Delegate)和事件(Event) 作者:jiyuan51 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式--观察者(Obs ...

  10. [转]SGI STL 红黑树(Red-Black Tree)源代码分析

    STL提供了许多好用的数据结构与算法,使我们不必为做许许多多的重复劳动.STL里实现了一个树结构-Red-Black Tree,它也是STL里唯一实现的一个树状数据结构,并且它是map, multim ...