一、            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. First Day:Starting My Coding Road

    今天是2015年7月28日,星期二,晴,下午坐在科创园2楼的办公室里,窗明几净,继续我全新的Android之旅! 在调试和比较了N多IDE集成开发环境之后,最终决定在IDEA SDK环境下试试手,在已 ...

  2. Call for Papers IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM)

    IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...

  3. SQL Server数据库备份的镜像

    SQL Server数据库备份的镜像 一个完整备份可以分开镜像 USE master GO BACKUP DATABASE [testdatabase] TO DISK = N'C:\testdata ...

  4. C#图片色彩的纠正-上

    WPF(C#)图片色彩的纠正-上 WPF(C#)图片色彩的纠正-下 前言 对图片进行色彩的纠正,其实与WPF是没有什么关系的,为什么标题又是“WPF(C#)图片色彩的纠正”呢,因为这些图片色彩的纠正功 ...

  5. ASP.NET MVC 过滤器(三)

    ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...

  6. vmware 安装xp 流水账

    1. 分区 PQ分区.1个区,C盘,NTFS. 2. 安装XP 进入ghost,不要选择一键. 然后fromImage, d:\xxx\GHO

  7. 在互联网公司参与拍卖是一种怎样的感觉?part 1

    拍卖在中国是不太流行的一件事,为什么呢?说不太出.当初在外国火的不得了的ebay在交易时采用的就是拍卖出价的模式,但进入中国后这种方式就是玩不转,不得以后来也变成了跟淘宝一样的一口价方式. 话说现在每 ...

  8. 导入一些常用命令比如(rz),关闭防火墙外面可以访问

     yum -y install lrzsz-----------导入常用命令 我在虚拟机上面启动了一个项目 这个原因是防火墙造成的,关闭防火墙  iptables -L 查看下 service ipt ...

  9. css绝对定位如何在不同分辨率下的电脑正常显示定位位置?

    有时候我们在写页面中,会发现绝对定位的父级元素已经相对定位了,但是在不同分辨率的电脑下,绝对定位还是会错乱,似乎父级的相对定位并没有起了作用. 首先要明白如下几个原理: 1.笔记本电脑的分辨率一般为1 ...

  10. EasyUI刚加载时候Window窗体自动弹出的解决办法