ITPub博客

首页 > 大数据 > Hadoop > Hadoop:HDFS—概述 喝no一j#

Hadoop:HDFS—概述 喝no一j#

Hadoop 作者:韩寒哈 时间:2014-03-04 14:45:45 0 删除 编辑
    Hadoop有一个称为HDFS的分布式系统,全称为Hadoop Distributed Filesystem。HDFS是Hadoop的旗舰级文件系统。
**************************************************************************************************
HDFS设计理念
    HDFS以流式数据访问模式来存储超大文件,运行与商用硬件集群上。
(1)流式数据访问:HDFS的构建思路是"一次写入,多次读取是最高效的访问模式"。读取整个数据集的实验延迟比读取第一条记录的时间延迟要重要。
(2)商用集群:Hadoop并不需要运行在昂贵且高可靠的硬件上,普通的硬件便可以。
==========================================================================
HDFS不适合的应用领域
(1)低时间延迟的数据访问;
(2)大量的小文件;
(3)多用户写入,任意修改文件。
*************************************************************************************************
数据块
    每个磁盘都有默认的数据块大小,这是磁盘进行数据读写的最小单位。HDFS也有块的概念,但是大多数,默认为64MB。和单一磁盘的文件系统相似,HDFS上的文件也被划分为块大小的多个分块,作为独立的存储单元。但和其它文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块空间。
    HDFS的块设置的如此大的原因是为了最小化寻址开销,但是块也不能设置的太大,因为MapReduce中的map通常一次处理一个块中的数据,因此如果任务数太少(少于集群的节点数),会减慢任务执行的速度。
======================================================================
块抽象好处
    使用块抽象拥有如下的好处:
(1)文件的大小可以大于网络中任意一个磁盘的容量;
(2)使用块抽象而非整个文件作为存储单元,大大简化了存储子系统的设计;
(3)块非常适用于数据备份而提供数据容错能力和可用性。
=======================================================================
    HDFS可以使用fsck指令显示块信息:
$hadoop fsck / -files -blocks
Hadoop:HDFS—概述
**************************************************************************************************
namenode 和 datanode
    HDFS集群有两类节点,并以管理者—工作者模式运行:
(1)namenode:管理者
    namenode管理文件系统的命名空间。它维护者文件系统树以及整颗树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像 文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时由数据节 点重建。
(2)datanode:工作者
    datanode是文件系统的工作节点。它们需要根据存储并检索数据块(受客户端或namenode调度),并且定期向namenode发送它们所存储的块的列表。
=================================================================
    客户端代表用户通过namenode 和 datanode交互来访问整个文件系统。客户端提供了一个类似于 POSIX的文件系统接口,因此用户在编程的时候无需知道namenode 和 datanode也可实现其功能。
=================================================================
namenode容错
    没有namenode,文件系统将无法使用。如果运行namenode的服务器毁坏,文件系统上所有的文件将会丢失。因为会不知道如何根据datanode来重建文件。通常有两种容错的机制:
(1)备份那些组成文件系统元数据持久状态的文件。
(2)运行一个辅助的namenode。
*************************************************************************************************
Hadoop文件系统
    Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现。Java抽象类org.apache.hadoop.fs.FileSystem定义了一个Hadoop中的一个文件系统接口,并且该抽象类有好几个具体的实现。
    Hadoop对文件系统提供了许多接口,它一般使用URI方案来选取合适的文件系统实例进行交互。
    下面的描述来自:http://www.douban.com/note/313096498/,写的非常好~~~Hadoop:HDFS—概述
=================================================================
    Hadoop借鉴了VFS,也引入了虚拟文件系统机制。HDFS是Hadoop虚拟文件系统的一个具体实现。除了HDFS文件系统之外,Hadoop还实现很多其他文件系统,诸如本地文件系统,支持HTTP的HFTP文件系统,支持Amazon的S3文件系统等等。
    HDFS 从设计上来说,主要考虑以下的特征:
(1)超大文件,最大能支持PB级别的数据;
(2)流式数据访问,一次写入,多次读取;
(3)在不可靠的文件,故障率高的商用硬件上能运行。
    Hadoop的不利之处:
(1)是不适应低时间延迟的数据访问;
(2)不适应大量的小文件;
(3)也不适应多用户写入任意修改文件的情况。
-----------------------------------------------------------------
    假设 有一个HDFS集群,那么这个集群有且仅有一台计算机做名字节点NameNode,有且仅有一台计算机做第二名字节点 SecondaryNameNode,其他机器都是数据节点DataNode。在伪分布式的运行方式 下,NameNode,SecodaryNameNode,DataNode都由同一台机器担任。

    NameNode是HDFS的管理者。SecondaryNameNode是NameNode的辅助者,帮助NameNode处理一些合并事宜,注意,它不是NameNode的热备 份,它的功能跟NameNode是不同的。DataNode以数据块的方式分散存储HDFS的文件。HDFS将大文件分割成数据块,每个数据块是64M, 也可以设置成128M或者256M,然后将这些数据块以普通文件的形式存放到数据节点上,为了防止DataNode意外失效,HDFS会将每个数据块复制 若干份放到不同的数据节点。

    执行”hadoop fs -help”可以看到HDFS的命令行工具和用法。
    
    如 前所说,文件系统主要作用是提供文件的创建,删除,读,写,追加,重命名,查看属性,更改属性等各种功能 。在随后部分,本章选取若干功能,给出了HDFS的文件操作示例代码。熟悉这些之后会对HDFS的操作有一个形象了解。这样将来参考Hadoop API的FileSystem类及其相关子类,就可以写出更多的文件系统操作。
<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23266250/viewspace-1120578/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-01-30