hadoop与hdfs

这篇具有很好参考价值的文章主要介绍了hadoop与hdfs。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第2章 大数据处理架构Hadoop

简介

  • Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce
  • Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的

项目结构

应用框架
hadoop与hdfs,【5】大数据技术基础,hadoop,hdfs,大数据

版本演变
hadoop与hdfs,【5】大数据技术基础,hadoop,hdfs,大数据

项目结构

组件 功能
HDFS 分布式文件系统
MapReduce 分布式并行编程模型
YARN 资源管理和调度器
Tez 运行在YARN之上的下一代Hadoop查询处理框架
Hive Hadoop上的数据仓库
HBase Hadoop上的非关系型的分布式数据库
Pig 一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig
Sqoop 用于在Hadoop与传统数据库之间进行数据传递
Oozie Hadoop上的工作流管理系统
Zookeeper 提供分布式协调一致性服务
Storm 流计算框架
Flume 一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统
Ambari Hadoop快速部署工具,支持Apache
Kafka 一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据
Spark 类似于Hadoop

第3章 分布式文件系统HDFS

简介

  • 分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群
  • 这些节点分为两类,“名称结点”(NameNode),“数据节点”(DataNode)
  • NameNode
    • 存储元数据
    • 元数据保存在内存中
    • 保存文件,block,datanode 之间的映射关系
  • DataNode
    • 储存文件内容
    • 文件内容保存在磁盘
    • 维护了block id到datanode本地文件的映射关系
  • 抽象的块概念
    • 好处:
      • 支持大规模文件存储:文件以块为单位进行存储,一个大规模文件可以被分拆成若干个文件块,不同的文件块可以被分发到不同的节点上,因此,一个文件的大小不会受到单个节点的存储容量的限制,可以远远大于网络中任意节点的存储容量
      • 简化系统设计:首先,大大简化了存储管理,因为文件块大小是固定的,这样就可以很容易计算出一个节点可以存储多少文件块;其次,方便了元数据的管理,元数据不需要和文件块一起存储,可以由其他系统负责管理元数据
      • 适合数据备份:每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性
    • 局限
      • 不适合低延迟数据访问
      • 无法高效存储大量小文件。HDFS采用了分布式的存储架构,它将大文件切分成多个数据块,并将其分散存储在多个节点上。这种设计使得HDFS非常适合处理大文件和流式数据访问,但对于小文件的存储和访问则效率较低。
      • 不支持多用户写入及任意修改文件。HDFS的写入模式是追加模式,即只能在文件末尾追加数据,不支持多用户并发写入同一个文件。这限制了HDFS在多用户写入文件方面的灵活性,并且不支持任意修改文件。

NameNode

名称节点负责管理分布式文件系统的命名空间,
保存了两个核心的数据结构:

  • FsImage,用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
  • EditLog,操作日志文件,记录了所有针对文件的创建、删除、重命名等操作
    hadoop与hdfs,【5】大数据技术基础,hadoop,hdfs,大数据
FsImage

包含了文件系统中所有目录和文件inode的序列化形式

inode是一个文件或目录的元数据的内部表示,并包含:文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块。对于目录,则存储修改时间、权限和配额元数据。

fsimage没有记录文件包含哪些块以及每个块存储在哪个数据节点。
而是由名称节点把这些映射信息保留在内存中。
当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的。

相当于,比如一个文件,名字叫“aaa”。你存了aaa在fsimage中。
然后有一天你改了名字,叫“bbb”。此时,fsimage中还是aaa,然后editLog中记录了“aaa—>bbb”。
这样会导致一个问题。你的操作增多,editLog变大。当你要用aaa文件的时候,会很慢。所以有了SecondaryNameNode。

SecondaryNameNode的工作情况:
(1)SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edit.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别;
(2)SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下;
(3)SecondaryNameNode将下载下来的FsImage载入到内存,然后一条一条地执行EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并;
(4)SecondaryNameNode执行完(3)操作之后,会通过post方式将新的FsImage文件发送到NameNode节点上
(5)NameNode将从SecondaryNameNode接收到的新的FsImage替换旧的FsImage文件,同时将edit.new替换EditLog文件,通过这个过程EditLog就变小了

但其实按我的理解就是:
你fsimage是"name:aaa"
editLog里面“aaa->bbb->ccc->ddd”
(为了方便,把所有更新操作举例为更改名字)
现在嫌启动的时候要改4次名字,很麻烦。
于是有个第二名称节点,开始进行操作。
假设第二名称节点启动时刻是1:00,假设第二名称节点操作时间是10分钟,所以结束的时候是1:10。
1:00————把fsimage和editLog文件用get方式进行下载(因为第二名称节点一般单独运行在另一台机器上,所以需要把这两个文件下载备份)。
1:00到1:10————现在你所有操作不卸载editLog上了,写在一个edit.now文件中。(因为刚刚备份了editLog文件,你现在再往上写,刚刚那份就少了记录了)。
1:00到1:10————现在第二名称节点开始进行备份的editLog中的操作,把aaa文件一步步操作成ddd文件。
1:10————第二名称节点用post方式把fsimage重新发回NameNode上替换原来的。然后把edit.now文件作为新的editLog文件。

这里还没搞清楚的疑问:

  1. “哪些块储存在哪个数据节点”和“数据节点会把自己包含哪些块告知名称节点”,“映射关系”有什么区别。
  2. 为什么说没有“记录文件包含哪些块以及每个块存储在哪个数据节点”呢,明明名称节点维护一个称为"块映射表(BlockMap)"的数据结构,用于记录文件的数据块信息。块映射表中的条目包括块ID和对应的数据节点列表。每个条目表示一个数据块,它存储了该块在HDFS中的多个副本的存储位置,即数据节点的信息。而且不是说inode包含了组成文件的块信息吗。

数据节点

  • 负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表
  • 每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中
    hadoop与hdfs,【5】大数据技术基础,hadoop,hdfs,大数据

体系结构

命名空间
  • HDFS的命名空间包含目录、文件和块
  • 在HDFS1.0体系结构中,在整个HDFS集群中只有一个命名空间,并且只有唯一一个名称节点,该节点负责对这个命名空间进行管理
  • HDFS使用的是传统的分级文件体系,因此,用户可以像使用普通文件系统一样,创建、删除目录和文件,在目录间转移文件,重命
通信协议
  • HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输。
  • 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的
  • 客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互
  • 名称节点和数据节点之间则使用数据节点协议进行交互
  • 客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的。在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求名文件等

客户端-> TCP链接 ->NameNode
NameNode-> 数据节点协议 ->DataNode
客户端-> RPC协议 ->DataNode

局限性
  1. 命名空间的限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到内存空间大小的限制。
  2. 性能的瓶颈:整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。
  3. 隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。
  4. 集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。

储存原理

冗余数据保存

为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上,优点:
(1)加快数据传输速度
(2)容易检查数据错误
(3)保证数据可靠性

数据存取策略

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

HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID
当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据文章来源地址https://www.toymoban.com/news/detail-815414.html

数据错误与恢复

  1. 名称节点出错
    HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当名称节点出错时,就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog数据进行恢复。
  2. 数据节点出错
  • 每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态
  • 当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求
  • 这时,有可能出现一种情形,即由于一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子
  • 名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本
  • HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位置
  1. 数据出错
  • 网络传输和磁盘错误等因素,都会造成数据错误
  • 客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据
  • 在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面
  • 当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块

到了这里,关于hadoop与hdfs的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据技术之Hadoop:HDFS存储原理篇(五)

    目录 一、原理介绍 1.1 Block块 1.2 副本机制 二、fsck命令 2.1 设置默认副本数量 2.2 临时设置文件副本大小 2.3 fsck命令检查文件的副本数 2.4 block块大小的配置 三、NameNode元数据 3.1 NameNode作用 3.2 edits文件 3.3 FSImage文件 3.4 元素据合并控制参数 3.5 SecondaryNameNode的作用 四、HDFS的读

    2024年02月09日
    浏览(69)
  • 大数据技术之Hadoop:HDFS集群安装篇(三)

    目录 分布式文件系统HDFS安装篇 一、为什么海量数据需要分布式存储 二、 分布式的基础架构分析 三、 HDFS的基础架构 四 HDFS集群环境部署 4.1 下载安装包 4.2 集群规划 4.3 上传解压 4.4 配置HDFS集群 4.5 准备数据目录 4.6 分发hadoop到其他服务器 4.7 配置环境变量 4.8 为普通用户授

    2024年02月14日
    浏览(51)
  • 大数据:Hadoop HDFS,基础架构,去中心化,中心化模式,HDFS基础架构,虚拟机和云服务器部署HDFS

    2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库 这oracle比sql安全,强大多了,所以你需要学

    2024年02月17日
    浏览(64)
  • 大数据技术基础实验四:HDFS实验——读写HDFS文件

    在前面的实验中我们进行了HDFS的部署,并设置了一键启动HDFS操作,本期实验我们将使用HDFS开发环境进行HDFS写、读的编写,以及程序的运行,了解HDFS读写文件的调用流程,理解HDFS读写文件的原理。 好啦废话不多说,我们开始今天的实验操作。 会在Linux环境下编写读写HDFS文

    2023年04月16日
    浏览(43)
  • Hadoop原理与技术——hdfs命令行基本操作

    点击链接查看文档 一、实验目的 熟悉hdfs命令行基本操作 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 三、实验内容 1:hdfs常见命令: (1)查看帮助:hdfs dfs -help (2)查看当前目录信息:hdfs dfs -ls / (3)创建文件夹:hdfs dfs -mkdir /文件夹名 (4)上传文件:

    2023年04月16日
    浏览(49)
  • Hadoop3.x基础(2)- HDFS

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

    2024年02月22日
    浏览(46)
  • hadoop基础:通过 Shell 命令访问 HDFS

    HDFS Shell 是由一系列类似 Linux Shell 的命令组成的。命令大致可分为 操作命令 、 管理命令 、 其他命令 三类 操作命令是以“ hdfs dfs ”开头的命令。通过这些命令,用户可以完成 HDFS 文件的 复制、删除和查找 等操作,Shell 命令的一般格式如下。 hdfs dfs [通用选项] 其中,hdfs

    2023年04月08日
    浏览(48)
  • Hadoop HDFS分布式文件系统(介绍以及基础操作命令)

    目录 一、为什么需要分布式存储? 二、分布式的基础架构分析  三、HDFS基础架构 1.HDFS简介 四、HDFS集群启停命令 1.一键启停脚本 2.单进程启停 五、HDFS基本操作命令 1.创建文件夹  2.查看指定目录下内容  3.上传文件到HDFS指定目录下  4.查看HDFS文件内容 5.下载HDFS文件  6.拷贝

    2024年02月05日
    浏览(71)
  • 【i阿极送书——第三期】《Hadoop大数据技术基础与应用》

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 本书由浅入

    2024年02月07日
    浏览(52)
  • 大数据技术⑥|大数据第11章·Hadoop 基础|大数据第12章·IBM InfoSphere BigInsights|大数据技术|20:20~21:20

      目录 第11章 Hadoop 基础 11.1 大数据与Hadoop 11.2 Hadoop框架的主要组件 11.3 用Hadoop分析大数据 表(Table) 元组(Tuple) 11.4 Hadoop分布式文件系统——HDFS cat chgrp chmod chown count cp du dus expunge get getmerge Is Isr mkdir mv put rm rmr setrep stat tail test text touchz 大数据第12章 IBM InfoSphere BigInsights   

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包