首页 > 其他 > 详细

Hadoop组件详解(随缘摸虾)

时间:2019-09-15 21:27:03      阅读:109      评论:0      收藏:0      [点我收藏+]

1.1. Hadoop组成:

Hadoop = hdfs(存储) + mapreduce(计算) + yarn(资源协调) + common(工具包) + ozone(对象存储) +

submarine(机器学习库)

hadoop生态圈:

技术分享图片

1.2. 分布式存储系统HDFS (Hadoop Distributed File System)

概括: 它是一个分布式存储系统, 提供高可靠性(high reliablity), 高扩展性(high scalability)和高吞吐率(High throughput)的数据存储服务。

应用: 主要用于解决大数据的存储问题。

HDFS架构图:

技术分享图片

HDFS 数据存储单元(block)

  • 文件被切分成固定大小的数据块block

    (1). 默认数据块大小为128MB(hadoop 3.x为256MB),可自定义配置

    (2). 若文件大小不到128MB, 则单独存储成一个block

  • 文件存储方式

    (1). 按大小被切分成若干个block, 存储到不同节点上

    (2). 默认情况下每个block都有3个副本

  • Block大小和副本数通过Client端上传文件时设置, 文件上传成功后副本数可以变更, Block Size 不可变更

    技术分享图片

    hdfs存储模型: 字节

    • ? 文件线性切割成块(Block): 偏移量 offset (byte)
    • ? Block 分散存储在集群节点中
    • ? 单一文件Block大小一致, 文件与文件可以不一致
    • ? Block可以设置副本数, 副本分散在不同节点中(副本数不要超过节点数量)
    • ? 文件上传可以设置Block大小和副本数
    • ? 已上传的文件Block副本数可以调整, 大小不变
    • ? 只支持一次写入多次读取, 同一时刻只有一个写入者可以append追缴数据

名称节点NameNode(NN)

主要功能:

  • 接受客户端的读/写服务
  • 收集DataNode回报的Block列表信息

特性: 基于内存存储, 不会和磁盘发生交换

  • 只存在内存中
  • 持久化

NameNode保存metadata(元数据)信息

  • 文件ownership(归属) & permission(权限)
  • 文件大小, 时间
  • Block列表: Block偏移量, 位置信息(不会持久化)
  • Block 保存在哪个DataNode, 信息就由该DataNode启动时上报, 不保存在磁盘

NameNode持久化

  • NameNode的metadate信息在启动后会叫再到内存
  • metadata存储到磁盘的文件名为 “fsimage”
  • Block的位置信息不会保存到 fsimage
  • edits 记录对metadata的操作日志

fsimage保存了最新的metadata检查点, 类似snapshot.

editslog 保存自最新检查点后的原信息变化, 从最新检查点后, hadoop将对每个文件的操作都保存在edits中。客户端修改文件的时候, 先写到editlog, 成功后才更新内存中的metadata信息。

so: Metadata = fsimage + editslog

数据节点DataNode(DN)

  • 本地磁盘目录存储数据(Block), 文件形式
  • 同时存储Block的元数据(md5值)信息文件
  • 启动DN进程的时候会向NameNode汇报block信息
  • 通过向NN发送心跳保持与其联系(3秒一次), 如果NN 10分钟没有收到DN的心跳, 则认为其已经失效, 并拷贝其上的block到其他DN

第二个名称节点SecondaryNameNode(SNN) [hadoop2.x 被standby namenode替代]

技术分享图片

合并流程:

首先是NN中的Fsimage和edits文件通过网络拷贝, 到达SNN服务器中, 拷贝的同时, 用户在实时操作数据, 那么NN中就会从新生成一个edits来记录用户的操作, 而另一边的SNN将拷贝过来的edits和fsimage进行合并, 合并之后替换NN中的fsimage。之后NN根据fsimage进行操作(每隔一段时间进行合并替换, 循环)。 当然新的edits与合并之后传输过来的fsimage会在下一次时间内又进行合并。

Block 的副本放置策略

  • 第一个副本: 放置在上传文件的DN; 如果是集群外提交, 则随机挑选一台磁盘不太满, CPU不太忙的节点。
  • 第二个副本: 放置在于第一个副本不同的机架的节点上。
  • 第三个副本: 与第二个副本相同机架的不同节点。
  • 更多副本: 随机节点

集群内提交:

技术分享图片

HDFS读写流程

写文件流程图

技术分享图片

  • 客户端Client:
    • 切分文件Block
    • 按 Block 线性和NN获取DN列表(副本数)
    • 验证DN列表后以更小的单位(packet)流式传输数据(需确保各节点可两两通信)
    • Block传输结束后:
      • DN向NN汇报Block信息
      • DN向Client汇报完成
      • Client向NN汇报完成
    • 获取下一个Block存放的DN列表 ...............
    • 最终Client汇报完成
    • NN会在写流程更新文件状态

读文件流程图

技术分享图片

  • 客户端Client:
    • 和 NN 获取一部分Block副本位置列表
    • 在Block副本列表中按距离择优选取
    • 和DN获取Block, 最终合并为一个文件

HDFS文件权限

  • 与Linux文件权限类似

    • r: read; w: write; x: execute
    • 权限x对于文件忽略, 对于文件夹表示是否允许访问其内容
  • 如果Linux系统用户xxx使用hadoop命令创建一个文件, 那么这个文件在HDFS中owner就是xxx。

  • HDFS的权限目的:组织好人做错事, 而不是阻止坏人做坏事。

    HDFS相信, 你告诉我你是谁, 我就认为你是谁。

安全模式

  • namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
  • 一旦在内存中成功建立文件系统元数据的映射,创建一个空的编辑日志。
  • 此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。
  • 在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
  • 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。

HDFS的优缺点

优点:

  • 高容错性
    • 数据自动保存多个副本
    • 副本丢失后, 自动恢复
  • 适合批处理
    • 移动计算而非数据
    • 数据位置暴露给计算框架(Block 偏移量)
  • 适合大数据处理
    • TB, 甚至PB级数据
    • 百万规模以上的文件数量
    • 10K+ 节点
  • 可构建在廉价机器上
    • 通过多副本提高可靠性
    • 提供了容错和恢复机制

缺点

  • 低延迟

    • 支持秒级别反应, 不支持毫秒级
    • 延迟与高吞吐率问题(吞吐量大但有限制于其延迟)
  • 小文件存储

    • 占用NameN大量内存
    • 寻道时间超过读取时间
  • 并发写入, 文件随机修改

    • 一个文件只能有一个写者
    • 仅支持append

Hadoop组件详解(随缘摸虾)

原文:https://www.cnblogs.com/ronnieyuan/p/11523749.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!