`
nlslzf
  • 浏览: 1045277 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
Hadoop 的文件系统
http://blogger.org.cn/blog/more.asp?name=bg1011&id=30853
Hadoop 的文件系统,最重要是 FileSystem 类,以及它的两个子类 LocalFileSystem 和 DistributedFileSystem。 这里先分析 FileSystem。
抽象类 FileSystem,提高了一系列对文件/目录操作的接口,还有一些辅助方法。分别说明一下:
1. open,create,delete,rename等,非abstract,部分返回 FSDataOutputStream,作为流进行处理。
2. openRaw,createRaw,renameRaw,deleteRaw等,abstract,部分返回 FSInputStream,可以随机访问。
3. lock,release,copyFromLocalFile,moveFromLocalFile,copyToLocalFile 等abstract method,提供便利作用,从方法命名可以看出作用。
特别说明,Hadoop的文件系统,每个文件都有一个checksum,一个crc文件。因此FileSystem里面的部分代码对此进行了特别的处理,比如 rename。
LocalFileSystem 和 DistributedFileSystem,理应对用户透明,这里不多做分析,和 FSDataInputStream,FSInputStream 结合一起说明一下。
查看两个子类的 getFileCacheHints 方法,可以看到 LocalFileSystem 是使用'localhost'来命名,这里暂且估计两个FileSystem都是通过网络进行数据通讯,一个是Internet,一个是Intranet。
LocalFileSystem 里面有两个内部类 LocalFSFileInputStream和LocalFSFileOutputStream,查看代码可以看到它是使用 FileChannel进行操作的。另外 lock和release 两个方法使用了TreeMap来保存文件和对应的锁。
DistributedFileSystem 代码量少于 LocalFileSystem,但是更加复杂,它里面使用了 DFSClient 来进行分布式文件系统的操作:
    public DistributedFileSystem(InetSocketAddress namenode, Configuration conf) throws IOException
    {
      super(conf);
      this.dfs = new DFSClient(namenode, conf);
      this.name = namenode.getHostName() + ":" + namenode.getPort();
    }
DFSClient 类接收一个InetSocketAddress 和Configuration 作为输入,对网络传输细节进行了封装。DistributedFileSystem中绝大多数方法都是调用DFSClient进行处理,它只是一个 Warpper。下面着重分析DFSClient。
DFSClient中,主要使用RPC来进行网络的通讯,而不是直接在内部使用Socket。如果要详细了解传输细节,可以查看 org.apache.hadoop.ipc 这个包里面的3个Class。
DFSClient 中的路径,基本上都是UTF8类型,而非String,在DistributedFileSystem中,通过getPath和getDFSPath来转换,这样做可以保证路径格式的标准和数据传输的一致性。
DFSClient 中的大多数方法,也是直接委托ClientProtocol类型的namenode来执行,这里主要分析其它方法。
LeaseChecker 内部类。一个守护线程,定期对namenode进行renewLease操作,注释说明:
Client programs can cause stateful changes in the NameNode that affect other clients. A client may obtain a file and neither abandon nor complete it. A client might hold a series of locks that prevent other clients from proceeding. Clearly, it would be bad if a client held a bunch of locks that it never gave up. This can happen easily if the client dies unexpectedly. So, the NameNode will revoke the locks and live file-creates for clients that it thinks have died. A client tells the NameNode that it is still alive by periodically calling renewLease(). If a certain amount of time passes since the last call to renewLease(), the NameNode assumes the client has died.
作用是对client进行心跳监测,若client挂掉了,执行解锁操作。
DFSInputStream 和 DFSOutputStream,比LocalFileSystem里面的更为复杂,也是通过 ClientProtocol 进行操作,里面使用到了 org.apache.hadoop.dfs 包中的数据结构,如DataNode,Block等,这里不对这些细节进行分析。

对FileSystem的分析(1)到此结束,个人感觉它的封装还是做的不错的,从Nutch项目分离出来后,比原先更为清晰。
分享到:
评论

相关推荐

    BeeGFS作为Hadoop文件系统.pdf

    BeeGFS作为Hadoop文件系统提供了一个替代方案,既可以利用BeeGFS的强大性能,又可以保持Hadoop的生态和灵活性。 实现Hadoop使用BeeGFS作为文件系统的配置方法主要有两种,分别是使用BeeGFS的Hadoop连接器和通过...

    操作系统课设——Hadoop文件系统

    5·访问Hadoop文件系统上的文件: 点击Hadoop按钮: 选择需要访问的文件, 在点击DownLoad按钮, 结果如下, 返回“DONE”说明下载成功, 这时Hadoop文件夹里将出现相应的文件。 四、 编程细节: 左边为OS-...

    王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第八讲Hadoop图文训练课程:Hadoop文件系统的操作

    Hadoop文件系统,通常指的是Hadoop分布式文件系统(HDFS),它是为了存储大量数据而设计的,可以在廉价硬件上实现高吞吐量的数据访问。HDFS具有高容错性的特点,能够自动处理失败的节点,并复制数据以保证数据的可靠...

    tencentyun#intlcloud-documents#Hadoop 文件系统与 COS 之间的数据迁移_intl_zh1

    简介Hadoop Distcp(Distributed copy)主要是用于 Hadoop 文件系统内部或之间进行大规模数据复制的工具,它基于 Map/Redu

    上传文件到Hadoop失败的原因分析及解决方法.pdf

    本文主要讨论了在 Java Web 程序中上传文件到 Hadoop HDFS 文件系统中失败的原因分析及解决方法。通过对问题的分析和解决,可以总结出以下知识点: 1. Hadoop 文件上传失败的原因分析: 在上传文件到 Hadoop HDFS ...

    hadoop文件

    但我们可以从Hadoop文件系统(HDFS)的角度来探讨Hadoop如何处理文件。 【标签】:“tt”同样没有提供具体的信息,这里我们将基于Hadoop的相关概念进行阐述。 **Hadoop文件系统(HDFS):** HDFS是Hadoop的核心...

    Java API操作Hadoop文件

    在Java编程环境中,Hadoop文件系统的API提供了一种与Hadoop分布式文件系统(HDFS)交互的方法。这篇博文“Java API操作Hadoop文件”可能是关于如何利用Java代码来读取、写入、管理和操作存储在Hadoop集群上的数据。...

    hadoop配置文件详解

    - fs.defaultFS:定义了Hadoop文件系统的默认名称节点RPC交互端口。通常设置为***,使用端口9000。 - io.file.buffer.size:指的是序列化文件的缓冲大小,它应设置为硬件页面大小的倍数,例如在x86架构上通常是4096...

    Hadoop 文件系统命令行基础详解

    本文将详细探讨Hadoop文件系统(HDFS)的命令行操作,这些操作对于管理存储在Hadoop上的数据至关重要。 首先,要使用Hadoop文件系统命令,需要启动Hadoop服务并在命令行界面(CLI)输入hadoop fs 。Hadoop文件系统...

    本地hadoop支持文件.rar

    5. **格式化NameNode**:首次启动Hadoop集群时,需要对NameNode进行格式化,这会创建Hadoop文件系统的元数据。 6. **启动Hadoop服务**:通过运行start-dfs.sh和start-yarn.sh脚本启动Hadoop的DataNodes、NameNodes...

    java笔试题算法-hadoop-crypto:Hadoop文件系统(例如HDFS或S3)中的每个文件客户端加密库

    文件系统的实现,它使用 Seekable Crypto 库为 Hadoop 文件系统提供高效和透明的客户端加密。 支持的密码 目前支持AES/CTR/NoPadding和AES/CBC/PKCS5Padding 。 免责声明不受支持的 AES 模式是 . 此库的使用者应通过...

    Hadoop课件

    - **Hadoop文件系统**:Hadoop Distributed File System (HDFS) 是Hadoop的核心组件之一,用于存储大量数据。 - **主要数据结构**:Hadoop中的数据结构主要包括文件块(Block)、文件系统元数据等。 - 文件块:HDFS...

    基于django的hadoop文件管理系统-期末实训项目

    【基于Django的Hadoop文件管理系统】 在信息技术领域,Django和Hadoop是两个非常重要的技术组件,分别在Web开发和大数据处理方面发挥着关键作用。这个“基于Django的Hadoop文件管理系统”是一个结合了这两者优势的...

    eclipse+maven+hadoop+文件增删改查

    本教程将通过Eclipse集成开发环境,结合Maven构建工具,详细介绍如何进行Hadoop文件系统的文件增删改查操作。以下是对这些知识点的详细阐述: 1. **Eclipse**: Eclipse是一款流行的Java开发IDE,它提供了丰富的代码...

    Java 读取Hadoop文件系统文件

    放一个hello的文件到Hadoop 文件系统 根目录:  [root@hadoop local]# touch hello  [root@hadoop local]# vi hello  [root@hadoop local]# hadoop fs -put hello /  代码:   package hadoop....

    【IT十八掌徐培成】Hadoop第04天-01.文件删除-递归访问文件系统-eclipse插件.zip

    1. **Hadoop文件系统(HDFS)**:Hadoop分布式文件系统是Hadoop的核心组件,它设计为存储和处理海量数据。HDFS具有高容错性和高可扩展性,能够将数据分布在大量的廉价硬件上,确保数据的可靠性和可用性。 2. **文件...

    hadoop2.6conf下的正确配置文件

    1. **core-site.xml**:这是Hadoop的核心配置文件,包含了与Hadoop文件系统操作相关的设置。其中最重要的是`fs.defaultFS`,它指定了默认的文件系统,通常是HDFS(Hadoop Distributed File System)的地址,如`hdfs:...

    hadoop.zip hadoop2.7.1安装包

    在Windows环境下使用Hadoop时,由于Hadoop原生支持Linux系统,所以需要额外的工具来与Hadoop文件系统(HDFS)交互。这正是`winutils-master.zip`的作用。这个文件包含了Windows平台上的Hadoop实用工具,比如用于设置...

    实验4:hadoop文件上传.docx

    9. 文件系统命令:Hadoop 提供了多种文件系统命令,如 hadoop fs -ls、hadoop fs -put 等,用于管理 HDFS 中的文件。 10. BP(Block Pool):在 HDFS 中,每个数据块都有一个唯一的 BP 名称,该名称是在 HDFS 格式...

Global site tag (gtag.js) - Google Analytics