HDFS文件系统

前面Hadoop的分布式环境已经搭建完成了,接下来说说如何使用Hadoop的HDFS文件系统:

HDFS(Hadoop Distributed File System)Hadoop 分布式文件系统:

基于流数据模式访问
    就是可以字节序列化的数据,java.io.Serializable接口
    分布式文件系统处理的数据必须是流数据,可以写IO操作的数据

它是以128MB的数据块 存储文件(在Hadoop 1.x版本中是以64MB的数据块存储文件的)
    其中每一个存储节点上都有一个DataNode进程,由NameNode来进行协调。

    当一个很大的文件存储到分布式文件系统时,它不是存储在一台机器上的,而是将这个文件分为好多块,多台服务器分开存储的,这些服务器通过一个文件系统将文件组织起来对外界提供统一的服务;所以当客户端访问服务器是就会感觉一个服务器在服务,这个机制就是分布式,把运行在多台服务器上的这个文件系统就叫做分布式文件系统

HDFS名词简介:

block:

    基本存储单位,128M,默认备份3份

    块的大小(hadoop2.0 128M):决定了资源,文件系统读写数据的吞吐量,应用程序寻址的速度

    大数据的块之所以设置的如此之大,是为了提高数据的吞吐量和降低数据寻址的时间

    每一个block块对应一个Map的任务(线程)


NameNode:

    维护HDFS文件系统,存储文件数据的元信息。处理来自客户端的对HDFS的各种操作的交互反馈。

    镜像文件(Namespace image)和操作日志文件(edit log):

             这些信息在系统启动时从数据节点重建.被Cache在RAM中

             这两个文件也会被持久化存储在本地硬盘。


SecondaryNameNode:

    周期性将元数据节点的命名空间镜像文件和修改日志进行合并,并实现fsimage的备份

    日志与镜像的定期合并的作用:

             如果Namenode节点故障,namenode下次启动的时候,会把fsimage加载到内存中

             如果没有合并机制:edits log是每一次操作的记录,namenode要对每一次操作进行重写导致操作很耗时(namenode容错机制)


DataNode:

    文件系统的工作节点,根据客户端或是namenode的调度存储和检索数据

    并且定期向namenode发送他们所存储的块(block)的列表。

    DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息

    DataNode之间会进行通信,复制数据块,保证数据的冗余性


ResouceManager:

    负责集群中所有资源的统一管理和分配

    接收来自各个节点(NodeManager)的资源汇报信息

    并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationManager)。


HDFS优点:

1)适合大数据处理

             能够处理百万规模以上的文件数量( GB、TB、PB级数据),能够处理10K节点的规模

2)处理非结构化的数据

             可处理结构化、半结构化、非结构化的数据(语音、视频、图片),80% 的数据都是非结构化的数据

3)流式访问数据

              一次写入,多次读取。文件一旦写入不能修改,只能追加。它能保证数据的一致性。

4)运行于廉价的商用机器集群上

              它通过多副本机制,提高可靠性。一旦出现故障也不会影响正常的业务处理,可以通过其它副本来恢复。

HDFS缺点:

1)不适合处理低延迟的数据访问

            HDFS是为了处理大型数据集分析任务的,主要是为了达到高的数据吞吐量而设计的
            HBase适合做低延迟的数据访问BigTable

2)无法高效的存储大量小文件

            当文件以block块的形式进行存储时,block块的位置会存储在namenode节点的内存中不论存储大文件还是小文件,每个       文件对应的单条block的块信息大小是一致的 而NameNode的内存总是有限的。小文件存储的寻道时间会超过读取时间,它         违反了HDFS的设计目标。(这里的小文件是指小于HDFS系统的Block大小的文件,默认是64M)

3)不支持并发写入和任意的修改

            一个文件同时只能有一个写,不允许多个线程同时写。 
            仅支持数据append(追加),不支持文件的随机修改。以追加的形式达到修改的目的

HDFS特性:

1)高容错,可扩展性及可配置性强

            数据自动保存多个副本。它通过增加数据冗余来提高容错性。
            某一个副本丢失以后,它可以自动恢复可扩展:可以不断的添加新的datanode    

2)跨平台

            Java语言开发的,HDFS支持多个平台Windows

3)shell命令接口

            hadoop fs -put 上传,把本地Linux文件系统的文件,上传到HDFS文件系统中
            hadoop fs -ls hdfs://master:9000/ 查看HDFS文件系统根目录(/)下的文件
            ......

4)机架感知功能

            副本的存放,第一个存到rack1,第二个就会选择不同于rack1的其他的rack上面存储 /etc/hosts

5)负载均衡

            理想状态下,集群中每个服务器上面存储数据都是均匀的。但在实际当中,经常会出现数据偏移
            start-balancer.sh -t 10%

6)Web界面

            http://master:8088  yarn           http://master:50070  hdfs
            能够查看hdfs文件系统中的文件信息

HDFS设计目标:

1)监测和快速恢复硬件故障

            监测:立刻会监测到坏的块--->上报到主节点RM
            单独启动一个进程:hadoop-daemon.sh start namenode/datanode/resourcemanager/nodemanager

2)流式数据访问

            重视的是吞吐量,而不是数据处理的速度。实现批处理

3)大规模数据集

            支持大文件存储,一个单一的HDFS实例能支撑数以千万计的文件

4)简化一致性访问模式

            一次写入,多次读取

5)移植性强
            移动计算的代价,要比移动数据的代价低

HDFS数据存储:

    HDFS采用Master/Slave主从架构来存储数据,这种架构主要由四个部分组成。分别为HDFS Client、NameNode、DataNode和Secondary NameNode

Client:客户端:

1、文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
2、与 NameNode 交互,获取文件的位置信息。
3、与 DataNode 交互,读取或者写入数据。
4、Client 提供一些命令来访问和管理HDFS等操作。


NameNode:master管理者:

1、管理 HDFS 的名称空间。数据块(Block)映射信息。配置副本策略
2、处理客户端读写请求。

fsimage与edits是NameNode的两个重要文件。
    1)fsimage:元数据镜像文件(存储文件系统的目录树,比如说有哪些目录,每个目录有哪些文件...)
    2)edits:元数据操作日志(存储针对目录树的修改操作,比如你删除了某个文件或者增加了某个文件)


DataNode:Slave节点,NameNode 下达命令,DataNode 执行实际的操作:

1、存储文件。
2、执行数据块的读/写操作。


SecondaryNameNode:辅助元数据:

并非NameNode 的热备(热备从广义上讲,就是服务器高可用应用的另一种说法)。
当NameNode 挂掉的时候,它并不能替换 NameNode 并提供服务。
    1、辅助 NameNode,执行fsimage和edits的定期合并
    2、在紧急情况下,可辅助恢复 NameNode。

HDFS功能概述

HDFS具有两个功能:命名空间管理(Namespace management)和 块/存储管理服务(block/storage management)。

1.命名空间管理 

            HDFS的命名空间包含目录、文件和块的信息。 
            指命名空间支持对HDFS中的目录、文件和块做创建、修改、删除、列表文件和目录等基本操作。

2.块/存储管理 

            在块存储服务中包含两部分工作:块管理和物理存储。这是一个更通用的存储服务。其他的应用可以直接建立在Block             Storage上,如HBase,Foreign Namespaces等。
 

块管理:
    A) 处理DataNode向NameNode注册的请求,处理datanode的成员关系。
    B) 处理来自DataNode周期性的心跳报告,维护块的位置信息。
    C) 处理与块相关的操作:块的创建、删除、修改及获取块信息。
    D) 管理副本放置(replica placement)和块的复制及多余块的删除。

物理存储:
    Data Node把块存储到本地文件系统中,对本地文件系统的读写。

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值