• HDFS学习笔记(一)——概述


    1. HDFS产出的背景及定义

    1.1 HDFS产生的背景

    随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

    1.2 HDFS的定义

    HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

    HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

     

    2. HDFS的优缺点

    2.1 优点:

    1). 高容错性

    (1)数据自动保存多个副本,它通过增加数据副本的样式,提高容错性

         

    (2)某一个数据副本丢失以后,它可以自动恢复

         

    2) 适合处理大数据

    (1)数据规模:能够处理规模达到GB、TB、甚至PB的级的大数据 ;

    3) 可构建在廉价机器上,通过多副本机制,提高可靠性。

    2.2 缺点

    1)不适合低时延的数据访问;

    2)无法高效的对大量小文件进行存储:

    (1)存储大量小文件的话,它会占用NameNode大量的内存来存储文件的目录和块信息;

    (2)小文件的存储的寻址时间超过了读取时间,违反了HDFS的设计目标。

    3)不支持并发的写入、文件随机修改

    (1)一个文件只能有一个写,不允许多个线程同时写;

    (2)仅支持数据的append(追加),不支持文件的随机修改

     

    3. HDFS的组成架构

    3.1 整体架构图如下:

           

    3.2 HDFS架构详解

    1)NameNode(简称:ND):就是master,它是一个主管人员,负责管理HDFS的相关信息:

    (1)管理HDFS的名称空间;

    (2)管理副本的策略;

    (3)管理数据块(Block)的映射信息;

    (4)处理客户端的读写请求。

    2)DataNode(简称:DN):就是slave,NameNode下达指令,DataNode执行实际的操作:

    (1)存储实际的数据块;

    (2)执行数据块的读/写操作。

    3)Client:客户端,与NameNode交互的程序,职责或功能如下:

    (1)文件切分:在上传文件至HDFS的时候,Client会将文件分切成一个个的Block上传;

    (2)与NameNode交互,可以获取文件的位置信息(存在哪个节点上)

    (3)Client可以通过一些命令来访问HDFS,比如增删改查操作;

    (4)Client通过一些命令来管理HDFS,比如将NameNode格式化。

    4)SecondaryNameNode:并非是NameNode的热备。当NameNode挂掉的时候,它并不会立即替换NameNode并提供服务。

    (1)辅助NameNode,分担其工作量,比如定期合并FsImage和Edits(后边会讲到,这里不用理解),并将合并后的FsImage.checkPoint推送给NameNode;

    (2)在紧急情况下可以辅助恢复NameNode。

     

    4 HDFS的文件块大小

    1)HDFS中的文件在物理上是按照块(Block)存储的,块id大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop2.x的版本中是128M,老版本的是64M。

    2)块的大小设定:文件的寻址时间应为块文件的传输时间的1%,这是比较合理的设定。

    3)思考:为什么块的大小不能设置太小,也不能设置太大?

    (1)HDFS的块如果设置的太小,会增加寻址时间,程序长时间在寻找块的存储位置;

    (2)如果设置太大,从磁盘传输的时间会明显大于定位这个块的起始位置所需的时间。导致在处理这个块的数据时,浪费了大量的时间在IO上。

    因此,块的大小可以根据数据量和磁盘的IO速度决定如何设置。

     

    5. 简单粗暴的总结:

    • HDFS就是存文件的;

    • 把一份文件存在一台机器上不安全怎么办?搞多台机器存多个副本,一个节点挂了,其他节点上的还能用;

    • 要存的文件太大读写慢怎么办?把文件切成块存储,每块的默认大小是128MB;

    • 那么多台机器怎么管理呢?定义存数据的机器就是DataNode,管理这些个DataNode的机器就是NameNode(它记录了文件存储的位置、文件的元数据以及使唤DataNode做存取操作)。

     

     

     

  • 相关阅读:
    浏览器 显示flash问题
    类型参数的约束
    C# FUNC 应用
    c#抽奖系统
    3D基础数学小结
    google应用之字体引用
    MYSQL启动参数
    chrome中你不知道的快捷方式
    SQL Server 2008在添加用户时弹出15195错误
    Hibernate Maven Missing artifact javax.transaction:jta:jar:1.0.1B
  • 原文地址:https://www.cnblogs.com/simon-1024/p/11741184.html
Copyright © 2020-2023  润新知