大数据学习之Hadoop——03HDFS概念

欢迎关注我的CSDN: https://blog.csdn.net/bingque6535

一. HDFS概述

1. HDFS产出背景及定义

  1. HFDS产生的背景
    随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
  2. HDFS的定义
    HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

2. HDFS的优缺点

  1. 优点
    • 高容错性
      数据自动保存多个副本. 可以通过增加副本的形式, 提高容错性.
      某一个副本丢失以后, 它可以自动恢复.
    • 适合批处理
      计算向数据移动
    • 适合处理大数据
      数据规模: 处理数据规模可达TB, 甚至是PB级别
      文件规模: 处理文件数量可达百万级别
    • 可构建在廉价机器上, 通过多副本机制, 提高可靠性
  2. 缺点
    • 不适合低延时数据访问
    • 无法高效的对大量小文件进行存储,
      占用NameNode大量的内存来存储文件目录和块信息
      寻道时间超过读取时间,就违反了HDFS的设计目标。
    1. 不支持并发写入和文件随机修改
      一个文件只能有一个写, 不允许多个线程同时写
      仅支持数据append(追加), 不支持文件的随机修改.

3. HDFS的组成架构

1. NameNode(NN)
  1. 基于内存存储, 不与磁盘发生交换
  2. NameNode主要功能
    • 收集DataNode汇报的Block列表信息
    • 处理客户端读写请求
    • 管理HDFS的命名空间
    • 配置副本策略
  3. NameNode保存metadata信息包括:
    • 文件owership 和 permissions
    • 文件大小, 时间
    • Block列表: 偏移量, 位置信息(持久化不存)
    • Block每个副本的位置, 由DataNode上报
  4. NameNode持久化
    • NameNode的metadata信息在启动后会加载到内存
    • metadata存储到磁盘文件名为”fsimage”(时点备份)
    • Block的位置信息不会保存到fsimage
    • edits记录对metadata的操作日志 -> Redis
    • 二者的产生时间和过程?(format)
2. DataNode(DN)
  1. 存储实际的Block
  2. 存储Block的元数据信息文件
  3. 启动DataNode是会向NameNode汇报block信息
  4. 执行数据库的读/写操作
  5. DataNode与NameNode保持心跳, 提交Block列表
3. Client
  1. 文件切分, 文件上传HDFS时, Client将文件切分成一个一个的Block, 然后上传
  2. 与NameNode交互, 获取文件的位置信息
  3. 与DataNode交互, 读取或写入数据
4. Secondary NameNode
  1. 并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
  2. 帮助NameNode合并edits log, 减少NameNode的启动时间
  3. 在紧急情兄下,可辅助恢复NarmeNode
  4. SNN执行合并的时机
    • 根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
    • 根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
  5. SNN合并流程


    图源: 尚学堂课件
5. 架构图
图源: 尚学堂课件

4. HDFS Block块的大小

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

  2. 单一文件的Block大小一致, 不同文件的Block大小不一致

  3. Block如果设置太小, 文件数量会增多,会增加寻址时间

  4. Block如果设置太大, 从磁盘传输数据的时间会明显大于定位这个Block开始位置所需的时间, 导致程序处理这块数据时, 会非常慢

  5. 总结: HDFS block的大小设置主要取决于磁盘传输速率

5. HDFS写流程

声明: 这部分内容引用的 https://www.cnblogs.com/qingyunzong/p/8548806.html , 侵权删

1. 流程步骤
  1. 使用 HDFS 提供的客户端 Client,向远程的 namenode 发起 RPC 请求
  2. namenode 会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会 为文件创建一个记录,否则会让客户端抛出异常;
  3. 当客户端开始写入文件的时候,客户端会将文件切分成多个 packets,并在内部以数据队列“data queue(数据队列)”的形式管理这些 packets,并向 namenode 申请 blocks,获 取用来存储 replicas 的合适的 datanode 列表,列表的大小根据 namenode 中 replication 的设定而定;
  4. 开始以 pipeline(管道)的形式将 packet 写入所有的 replicas 中。客户端把 packet 以流的 方式写入第一个 datanode,该 datanode 把该 packet 存储之后,再将其传递给在此 pipeline 中的下一个 datanode,直到最后一个 datanode,这种写数据的方式呈流水线的形式。
  5. 最后一个 datanode 成功存储之后会返回一个 ack packet(确认队列),在 pipeline 里传递 至客户端,在客户端的开发库内部维护着"ack queue",成功收到 datanode 返回的 ack packet 后会从"data queue"移除相应的 packet。
  6. 如果传输过程中,有某个 datanode 出现了故障,那么当前的 pipeline 会被关闭,出现故 障的 datanode 会从当前的 pipeline 中移除,剩余的 block 会继续剩下的 datanode 中继续 以 pipeline 的形式传输,同时 namenode 会分配一个新的 datanode,保持 replicas 设定的 数量。
  7. 客户端完成数据的写入后,会对数据流调用 close()方法,关闭数据流;
  8. 只要写入了 dfs.replication.min(最小写入成功的副本数)的复本数(默认为 1),写操作 就会成功,并且这个块可以在集群中异步复制,直到达到其目标复本数(dfs.replication 的默认值为 3),因为 namenode 已经知道文件由哪些块组成,所以它在返回成功前只需 要等待数据块进行最小量的复制。
2. 流程图
在这里插入图片描述

6. HDFS的读操作

声明: 这部分内容引用的 https://www.cnblogs.com/qingyunzong/p/8548806.html , 侵权删

1. 流程步骤
  1. 客户端调用FileSystem 实例的open 方法,获得这个文件对应的输入流InputStream。
  2. 通过RPC 远程调用NameNode ,获得NameNode 中此文件对应的数据块保存位置,包括这个文件的副本的保存位置( 主要是各DataNode的地址) 。
  3. 获得输入流之后,客户端调用read 方法读取数据。选择最近的DataNode 建立连接并读取数据。
  4. 如果客户端和其中一个DataNode 位于同一机器(比如MapReduce 过程中的mapper 和reducer),那么就会直接从本地读取数据。
  5. 到达数据块末端,关闭与这个DataNode 的连接,然后重新查找下一个数据块。
  6. 不断执行第2 - 5 步直到数据全部读完。
  7. 客户端调用close ,关闭输入流DF S InputStream。
2. 流程图
在这里插入图片描述

二. HDFS的shell操作

  1. -ls: 查看指定路径下的文件或文件夹

    -R: 表示查询子目录下的文件

    hdfs dfs -ls /hadoop
    hadoop fs -ls /hadoop
    hdfs dfs -ls -R /hadoop
    hadoop fs -ls -R /hadoop
    
    在这里插入图片描述
  2. -mkdir: 创建文件夹

    hdfs dfs -mkdir -p /hadoop
    hadoop fs -mkdir -p /hadoop
    

    -p: 表示循环创建, 创建多级目录时需要该参数

    在这里插入图片描述
  1. -put: 文件上传

    hadoop fs -put words.txt /hadoop
    hdfs dfs -put zookeeper.out /hadoop
    
    在这里插入图片描述

    通过hdfs 的web ui 查看
  2. -get: 文件下载

    hdfs dfs -get /hadoop/words.txt ~/data
    hadoop fs -get /hadoop/zookeeper.out ~/data
    
    在这里插入图片描述
  3. -cp: 拷贝文件到指定目录

    hdfs dfs -cp /hadoop/zookeeper.out /hadoop/a/zookeeper.out
    
    在这里插入图片描述
  4. -mv: 移动文件

    hdfs dfs -mv /hadoop/a/zookeeper.out /hadoop/b/zookeeper.out
    
  5. -rm: 删除文件/目录

    hdfs dfs -rm /hadoop/b/zookeeper.out
    

    如果删除非空目录, 需要加上: -r
    hdfs dfs -rm -r /hadoop/a

    在这里插入图片描述
  6. -cat: 查看文件内容

    hdfs dfs -cat /hadoop/words.txt
    
  7. 查询集群工作状态

     hdfs dfsadmin -report
    
    在这里插入图片描述

三. HDFS 2.x

1. 产生背景

  1. Hadoop 1.0中HDFS和MapReduce在高可用、扩展性等方面存在问题
  2. HDFS存在的问题(2个)
    • NameNode单点故障,难以应用于在线场景 HA
    • NameNode压力过大,且内存受限,影响扩展性F
  3. MapReduce存在的问题响系统
    • JobTracker访问压力大,影响系统扩展性
    • 难以支持除MapReduce之外的计算框架,比如Spark、Storm等

2. HDFS 2.x特点

  1. 解决HDFS1.0中单点故障和内存受限问题。
  2. 解决单点故障
    • HDFS HA:通过主备NameNode解决
    • 如果主NameNode发生故障,则切换到备NameNode上
  3. 解决内存受限问题
    • HDFS Federation(联邦)
    • 水平扩展,支持多个NameNode;
      每个NameNode分管一部分目录;
      所有NameNode共享所有DataNode存储资源
  4. 2.x仅是架构上发生了变化,使用方式不变
  5. 对HDFS使用者透明
  6. HDFS1.x中的命令和API仍可以使用

3. HDFS 2.0 HA

1. 相关概念
  1. 主备NameNode
  2. 解决单点故障
    • 主NameNode对外提供服务,备NameNode同步主NameNode元数据,以待切换
    • 所有DataNode同时向两个NameNode汇报数据块信息(位置)
    • JNN:集群(属性)
    • standby:备,完成了edits.log文件的合并产生新的image,推送回ANN
  3. 两种切换选择
    • 手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
    • 自动切换:基于Zookeeper实现
  4. 基于Zookeeper自动切换方案
    • ZooKeeper Failover Controller:监控NameNode健康状态,
    • 并向Zookeeper注册NameNode
    • NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC 锁的NameNode变为active
2. 流程图
在这里插入图片描述

再次声明: HDFS读写流程的内容引用的 https://www.cnblogs.com/qingyunzong/p/8548806.html , 侵权删

欢迎关注我的CSDN: https://blog.csdn.net/bingque6535

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342