一、            HDFS简介

1、    HDFS全称

Hadoop Distributed FileSystem,Hadoop分布式文件系统。

Hadoop有一个抽象文件系统的概念,Hadoop提供了一个抽象类org.apache.hadoop.fs.FilesSystem,HDFS是这个抽象类的一个实现。其他还有:

文件系统

URI方案

Java实现(org.apache.hadoop

Local

file

fs.LocalFileSystem

HDFS

hdfs

hdfs.DistrbutedFilesSystem

HFTP

hftp

hdfs.HftpFilesSystem

HSFTP

hsftp

hdfs.HsftpFilesSystem

HAR

har

fs.HarFileSystem

KFS

kfs

fs.kfs.KosmosFilesSystem

FTP

ftp

Fs.ftp.FtpFileSystem

2、    HDFS特点:

(1)     超大文件数据集群

(2)     流式数据访问方式读取文件

(3)     对硬件要求并不是特别高,有很好的容错机制。

(4)     数据访问有一定的延迟,这是因为HDFS优化的是数据吞吐量,是要以提高延迟为代价的。

(5)     HDFS无法高效存储大量小文件。因为NameNode限制了文件个数。

(6)     HDFS不支持多个写入者,也不支持随机写。

二、            HDFS体系结构

3、    体系结构图

4、    体系结构介绍

(1)     HDFS由Client、NameNode、DataNode、SecondaryNameNode组成。

(2)     Client提供了文件系统的调用接口。

(3)     NameNode由fsimage(HDFS元数据镜像文件)和editlog(HDFS文件改动日志)组成,NameNode在内存中保存着每个文件和数据块的引用关系。NameNode中的引用关系不存在硬盘中,每次都是HDFS启动时重新构造出来的。

(4)     SecondaryNameNode的任务有两个:

l  定期合并fsimage和editlog,并传输给NameNode。

l  为NameNode提供热备份。

(5)     一般是一个机器上安装一个DataNode,一个DataNode上又分为很多很多数据块(block)。数据块是HDFS中最小的寻址单位,一般一个块的大小为64M,不像单机的文件系统,少于一个块大小的文件不会占用一整块的空间。

(6)     设置块比较大的原因是减少寻址开销,但是块设置的也不能过大,因为一个Map任务处理一个块的数据,如果块设置的太大,Map任务处理的数据量就会过大,会导致效率并不高。

(7)     DataNode会通过心跳定时向NameNode发送所存储的文件块信息。

(8)     HDFS的副本存放规则

默认的副本系数是3,一个副本存在本地机架的本机器上,第二个副本存储在本地机架的其他机器上,第三个副本存在其他机架的一个节点上。

这样减少了写操作的网络数据传输,提高了写操作的效率;另一方面,机架的错误率远比节点的错误率低,所以不影响数据的可靠性。

三、HDFS读写过程

1、    数据读取流程图

2、    读取过程说明

(1)     HDFS客户端调用DistributedFileSystem类的open()方法,通过RPC协议请求NameNode来确定说请求的文件所在位置,找出最近的DataNode节点的地址。

(2)     DistributedFileSystem会返回一个FSDataInputStream输入流对象给客户端。

(3)     客户端会在FSDatatInputStream上调用read()函数,按照每个DataNode的距离从近到远依次读取。

(4)     读取完每个DataNode后,在FSDataInputStream上调用close()函数。

(5)     如果读取出现故障,就会读取数据块的副本,同时向NameNode报告这个消息。

3、    文件的写入流程图

4、    写入流程说明

(1)     客户端调用DistributedFileSystem对象的create()方法,通过RPC协议调用NameNode,在命名空间创建一个新文件,此时还没有关联的DataNode与之关联。

(2)     create()方法会返回一个FSDataOutputStream对象给客户端用来写入数据。

(3)     写入数据前,会将文件分割成包,放入一个“数据队列”中。

(4)     NameNode为文件包分配合适的DateNode存放副本,返回一个DataNode的管道。

(5)     根据管道依次保存文件包在各个DataNode上。

(6)     各个DataNode保存好文件包后,会返回确认信息,确认消息保存在确认队列里,当管道中所有的DataNode都返回成功的的确认信息后,就会从确认队列里删除。

(7)     管道中所有的DataNode都保存完成后,调用FileSystem对象的close()关闭数据流。

四、Hadoop的页面接口

1、    界面地址

可以通过http://NameNodeIP:50070访问HDFS的Web界面了。

五、HDFS的Java API

1、    使用URL读取数据

 //用URL接口读取HDFS中文件
 static  {
     URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory() );
 }
 public  String  GetHDFSByURL(String url) throws MalformedURLException,IOException
 {
     String str="";
     InputStream in =null;
     OutputStream out=null;
     try {
         in=new URL(url).openStream();
         //IOUtils.copyBytes(in,out,4096,false);
         str=out.toString();
     }
     finally {
         IOUtils.closeStream(in);
         IOUtils.closeStream(out);
     }
     return  str;
 }

2、    FileSystem API读取数据

//ReadFile
//url:"/user/hadoop/data/write.txt"
public  String  ReadFile(String url)throws IOException
{
    String fileContent="";
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);
    Path path = new Path(url);

    if(fs.exists(path)){
        FSDataInputStream is = fs.open(path);
        FileStatus status = fs.getFileStatus(path);
        byte[] buffer = new byte[Integer.parseInt(String.valueOf(status.getLen()))];
        is.readFully(0, buffer);
        is.close();
        fs.close();
        fileContent=buffer.toString();
    }
    return fileContent;
}

  

3、    FileSystem API创建目录

//创建HDFS目录
//dirpath: "/user/hadoop/data/20130709"
public  void  MakeDir(String dirpath) throws IOException {
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);
    Path path = new Path(dirpath);
    fs.create(path);
    fs.close();
}

  

4、    FileSystem API写数据

//HDFS写文件
//fileurl:"/user/hadoop/data/write.txt"
public  void  WriteFile(String fileurl,String fileContent)throws IOException
{
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);
    Path path = new Path(fileurl);
    FSDataOutputStream out = fs.create(path);
    out.writeUTF(fileContent);
    fs.close();
}

  

5、    FileSystem API删除文件

//删除文件
//fileurl :"/user/hadoop/data/word.txt"
public void  DeleteFile(String fileurl)throws IOException
{
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);

    Path path = new Path(fileurl);
    fs.delete(path,true);
    fs.close();
}

  

6、    查询元数据

//查询文件的元数据
public  void  ShowFileStatus(String fileUrl) throws  IOException
{
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);
    Path file=new Path(fileUrl);
    FileStatus stat=fs.getFileStatus(file);

    System.out.println("文件路径:"+stat.getPath());
    System.out.println("是否是目录:"+stat.isDirectory());
    System.out.println("是否是文件:"+stat.isFile());
    System.out.println("块的大小:"+stat.getBlockSize());
    System.out.println("文件所有者:"+stat.getOwner()+":"+stat.getGroup());
    System.out.println("文件权限:"+stat.getPermission());
    System.out.println("文件长度:"+stat.getLen());
    System.out.println("备份数:"+stat.getReplication());
    System.out.println("修改时间:"+stat.getModificationTime());
}

  

【原创】HDFS介绍的更多相关文章

  1. Hadoop介绍-3.HDFS介绍和YARN原理介绍

    一. HDFS介绍: Hadoop2介绍 HDFS概述 HDFS读写流程   1.  Hadoop2介绍 Hadoop是Apache软件基金会旗下的一个分布式系统基础架构.Hadoop2的框架最核心的 ...

  2. HDFS介绍

    一.HDFS概述 1.HDFS设计思想来源于Google的GFS,是GFS的开源实现. 2.HDFS要解决的问题: -存储超大文件,比如TB级别 -防止文件丢失. 3.HDFS的特点 -可以存储超大文 ...

  3. HDFS介绍及简单操作

    目录 1.HDFS是什么? 2.HDFS设计基础与目标 3.HDFS体系结构 3.1 NameNode(NN)3.2 DataNode(DN)3.3 SecondaryNameNode(SNN)3.4 ...

  4. HDFS介绍~超详细

    HDFS(Hadoop Distributed File System)   (1) HDFS--Hadoop分布式文件存储系统   源自于Google的GFS论文,HDFS是GFS的克隆版 HDFS ...

  5. Hadoop之HDFS介绍

    1. 概述 HDFS是一种分布式文件管理系统. HDFS的使用场景: 适合一次写入,多次读出的场景,且不支持文件的修改: 适合用来做数据分析,并不适合用来做网盘应用: 1.2 优缺点 优点: 高容错性 ...

  6. Hadoop之HDFS及NameNode单点故障解决方案

    Hadoop之HDFS 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 H ...

  7. Java+大数据开发——HDFS详解

    1. HDFS 介绍  • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...

  8. java常用的框架介绍

    一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...

  9. Client将数据读写HDFS流程

    HDFS介绍 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的. 什么是分布式文件系统 分布式文件系统(Dist ...

随机推荐

  1. 广州PostgreSQL用户会技术交流会小记 2015-9-19

    广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...

  2. Docker:Ubuntu下的安装

    Docker是什么 Docker 是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎, 源代码托 管在 GitHub 上, 基于Go语言并遵从Apache2. ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (46) ------ 第八章 POCO之领域对象测试和仓储测试

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-8  测试领域对象 问题 你想为领域对象创建单元测试. 这主要用于,测试特定的数 ...

  4. Nodejs学习笔记(二)--- 事件模块

    目录 简介及资料 事件常用函数及使用 emitter.on(event, listener) emitter.emit(event, [arg1], [arg2], [...]) emitter.on ...

  5. CentOS On VirtualBox

    背景 后台开发需要随时与服务器交互,本人使用Mac开发.但是不愿意在Mac上直接安装redis以及mysql等等工具.所以选择在VirtualenvBox下安装一个服务器系统,并且使用ssh与其连接. ...

  6. 浅谈JavaScript的New关键字

    原型和闭包算是JavaScript中最常见,最难以理解,最容易被当做问题的两个部分,当然还有它们的延伸,如作用域链,继承等等吧,我最近也是各种看,各种翻,记录点自己的心得,写写总会让自己的理解更深一些 ...

  7. WCF学习之旅—WCF概述(四)

    一.WCF概述 1) 什么是WCF? Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终 ...

  8. SSIS 数据类型和类型转换

    在进行ETL开发时,数据类型(Data Type)是最基础的,但也容易被忽略,楼主使用的SQL Server 版本是2012,用此博文记录,常用的SSIS数据类型和TSQL数据类型的映射.SSIS的数 ...

  9. java中volatile关键字

    一.前言 JMM提供了volatile变量定义.final.synchronized块来保证可见性. 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值.volatil ...

  10. Web APi之认证(Authentication)及授权(Authorization)【一】(十二)

    前言 无论是ASP.NET MVC还是Web API框架,在从请求到响应这一过程中对于请求信息的认证以及认证成功过后对于访问页面的授权是极其重要的,用两节来重点来讲述这二者,这一节首先讲述一下关于这二 ...