【原创】HDFS介绍

一、            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读取数据

 1 //用URL接口读取HDFS中文件
 2 static  {
 3     URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory() );
 4 }
 5 public  String  GetHDFSByURL(String url) throws MalformedURLException,IOException
 6 {
 7     String str="";
 8     InputStream in =null;
 9     OutputStream out=null;
10     try {
11         in=new URL(url).openStream();
12         //IOUtils.copyBytes(in,out,4096,false);
13         str=out.toString();
14     }
15     finally {
16         IOUtils.closeStream(in);
17         IOUtils.closeStream(out);
18     }
19     return  str;
20 }

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());
}

  

时间: 2024-12-24 06:03:55

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

hdfs介绍

HDFS:分布式文件系统,提供高吞吐量的应用程序数据访问,对外部客户机而言,HDFS 就像一个传统的分级文件系统.可以创建.删除.移动或重命名文件,等等.但是HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的.这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务:DataNode,它为 HDFS 提供存储块.由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败).

HDFS的体系结构

一.HDFS介绍 1.1 背景 随着数据量越来越大,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统. 学术一点的定义就是:分布式文件系统是一种允许文件通过网络在多台主机上分享的文件的系统,可让多机器上的多用户分享文件和存储空间.分布式文件管理系统很多,HDFS 只是其中一种.适用于一次写入.多次查询的情况,不支持并发写情况,小文件不合适.因为小文件也占用一个块,小文件越多(1000个

HDFS简介

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Helvetica; color: #454545 } p.p2 { margin: 0.0px 0.0px 2.0px 0.0px; text-align: justify; font: 14.0px Helvetica; color: #454545 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; text-al

HDFS、YARN、Mapreduce简介

一. HDFS介绍: Hadoop2介绍 HDFS概述 HDFS读写流程   1.  Hadoop2介绍 Hadoop是Apache软件基金会旗下的一个分布式系统基础架构.Hadoop2的框架最核心的设计就是HDFS.MapReduce和YARN,为海量的数据提供了存储和计算. HDFS主要是Hadoop的存储,用于海量数据的存储: MapReduce主要运用于分布式计算: YARN是Hadoop2中的资源管理系统. Hadoop1和Hadoop2的结构对比: Hadoop2主要改进: YARN

通过RMAN创建dataguard(原创)

通过RMAN创建dataguard(原创) 环境介绍:数据库版本10G,两个节点分别是rednum1(192.168.212.128)和rednum2(192.168.212.130)主库主机名称是rednum1,从库主机名称是rednum2配置步骤如下:1.在主库和从库配置tnsnames如下:standbydb1 =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = rednum1)(PORT = 1521))(CONNECT_DATA =(SE

hadoop(一HDFS)

hadoop(一HDFS) 介绍 狭义上来说: hadoop指的是以下的三大系统: HDFS :分布式文件系统(高吞吐,没有延时要求,容错性,扩展能力) MapReduce : 分布式计算系统 Yarn:分布式样集群资源管理 但是hadoop可不止这三个系统 广义上来说: hadoop指的是大数据的一个生态圈 架构模型 1.X版本的架构 NameNode:集群的主节点,主要是管理集群中的各种元数据() secondaryNameNode:主节点的辅助管理,主节点宕机后无法代替它(Secondar

[转]分布式计算框架综述

本来是发表到科技论在线的,谁知道被退稿了,那就发到这里来吧. 0      引言 随着互联网的发展,web2.0时期[1]的到来,人类正式进入了信息爆炸时期的.海量的信息在很多应用都会出现,比如一些社交网络应用中记录用户行为日志通常都是以GB甚至是TB为单位的.常规的单机计算模式已经不能支撑如此巨大的数据量.所以,计算必须以分布式的把巨大的计算任务分成小的单机可以承受的计算任务,在这种情况下分布式计算框架与云计算[2]出现. 1      分布式计算框架背景介绍 我们的互联网从Web 1.0迈入

2016.09.07

周末两天在家,没干活. 周一和周二调试gitblit和tfs2015 express. 今天把V+Studio上添加了中英字幕的入门教程和两个中文原创入门介绍都过了一遍,中文的都是介绍,没有教程,英文的那哪是入门教程,术语一堆一堆地往外蹦,操作眼花缭乱,我停停看看有些动作都看不清楚,基本就是看了看高手操作而已. youtube和官网上的都是这一套教程,按我这个情况,我看我还是得从文档看起.. 路漫漫啊..

深入浅出解析大数据平台架构

目录: 什么是大数据 Hadoop介绍-HDFS.MR.Hbase 大数据平台应用举例-腾讯 公司的大数据平台架构 "就像望远镜让我们能够感受宇宙,显微镜让我们能够观测微生物一样,大数据正在改变我们的生活以及理解世界的方式--". 大数据的4V特征-来源 公司的"大数据" 随着公司业务的增长,大量和流程.规则相关的非结构化数据也爆发式增长.比如: 1.业务系统现在平均每天存储20万张图片,磁盘空间每天消耗100G: 2.平均每天产生签约视频文件6000个,每个平均2