【读书笔记】大数据原理与应用:分布式文件系统HDFS

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 【读书笔记】大数据原理与应用:分布式文件系统HDFS

简 介:这本书的名字为大数据技术原理与应用,该书的作者为厦门大学著名的研究大数据方向的林子雨老师。顾名思义,概述讲述了大数据的相关知识,包含一些分布式系统以及各种流计算等大数据技术。本书讲述的非常棒,通俗易懂。下面是我在读这本书的时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。

 

关键词:大数据组件、HBase、NoSQL

一、文件系统格式

Hadoop的文件系统是由多个服务器构成,集群中的节点都是放在机架上面,然后不同机架之间通过交换机进行互连。

HDFS的存储是以块为单位,就是说一个完整的文件会被切分成多个文件块存储到不同的服务器上面。对于一个集群来说,是由多个服务器构成的,而这些服务器分为两类,一类是名称节点(NameNode),另一种是数据节点(DataNode)。

  • NameNode:用来存储文件树,以及文件块与HDFS位置的映射以及各种元数据
  • DataNode:是真正用来存储数据的节点,受NameNode支配

当我们进行读取数据时,首先会访问NameNode节点获取所需要读取的文件的块在哪个位置,然后向存储文件块的服务器进行通信获得数据块。

当我们写数据时,依旧会访问NameNode,NameNode会进行分配存储位置,然后客户端把相应的数据写入分配到的节点。

很重要的一个地方就是HDFS存在副本机制,如果某一台服务器崩掉,我们会找到其它的DataNode节点访问它的副本数据,提高了数据的可靠性,在单个节点出现故障时,就可以很快的调用副本。

二、HDFS的一些特点

  • 支持大数据存储:因为是集群机制,所以可以使用更多的服务器存储更大的数据
  • 文件模型简单:HDFS是一次写入,多次读取,当我们将文件写入HDFS上面之后,是无法进行再次更改,只能是读取
  • 数据延迟较高:HDFS无法使用于那些毫秒级的应用场景,广泛用于离线数据处理,HDFS主要是进行大规模数据进行批处理
  • 不适合存储小文件:NameNode中会存取我们HDFS文件中的元数据就是一些位置映射数据,每条元数据也会占用一定空间,如果小文件很多,那么NameNode就是产生大量小文件的元数据,导致文件检索效率降低,而且如果小文件过多的话,进行MapReduce的时候计算开销也会较大,因为每个小文件会对应一个Map任务,导致线程数增多,严重的影响整个集群的性能。
  • HDFS默认是以块进行存储数据,现在默认为128MB,每个块会作为独立的单元进行存储数据。

三、NameNode和DataNode

  • NameNode:主要负责管理分布式文件系统的命名空间。它的内部含有两个核心的数据结构,分别是FsImage和EditLog。FsImage用于维护文件树中的数据以及文件夹的元数据。而EditLog就是操作日志,记录着客户端对文件系统的各种操作,包括文件的创建、删除、重命名等操作。NameNode记录着每个文件中各个块在DataNode中的位置信息。
  • DataNode:会受NameNode的支配进行存储数据,客户端会进行访问,通过NameNode给的文件位置,拿到文件块

当NameNode启动时,会将FsImage加载到内存,然后执行EditLog中的操作来保持内存中的元数据是最新的。HDFS正常启动后,会将操作数据写入到操作日志中,而不是写入FsImage中,这是因为我们的HDFS系统支持的是大数据,如果直接操作数据的话系统就会变得非常缓慢,所以将操作写入操作日志还是非常高效的。

有一点就是当我们启动NameNode的时候,HDFS会进入安全模式,此时HDFS只能够对外界进行读数据操作,而不能够进行写操作,等待启动结束后,安全模式会自动退出,有时候不能够自动退出,可以自己使用命令进行退出。

hadoop dfsadmin -safemode leave

四、SecondaryNameNode

当我们启动NameNode之后,HDFS会不断地进行更新,这些更新操作就会不断地写入EditLog中,该文件就会不断地增大。这是就会存在一个问题,当我们重启NameNode时,我们要执行所有EditLog中的操作来进行更新FsImage中的元数据,这就会导致在启动初期启动地会非常慢,安全模式会非常的长,但是着不会影响运行阶段,EditLog文件尽管很大,在NameNode运行时不会造成影响。

为了解决这一问题就有了SecondaryNameNode节点,它的任务就是一定时间会拉取NameNode中的FsImage和EditLog然后将其进行合并,执行EditLog中的操作更新FsImage,然后将新的FsImage返回。

  1. NameNode创建一个新的EditLog文件,记录新的操作,老的不允许再写入
  2. SecondaryNameNode会将FsImage和EditLog将其拉到
  3. 执行EditLog更新FsImage
  4. 将新的FsImage返回给NameNode

五、HDFS的存储原理

HDFS是分布式文件系统,为了保证文件的可靠性采取了副本机制,它会将一个数据块的多个副本存到到不同的DataNode上,这样就会存在很多优点:

  • 文件传输速率变快:当访问文件时,会访问距离客户端最近的节点上的数据
  • 可以检查文件数据是否错误:因为存在多个副本,所以可以不同的DataNode之间进行通信,核对数据是否出错
  • 保证数据不会丢失

数据的存放策略

HDFS的默认副本数为3,一个机架的不同机器会存储两个副本,另外一个存储到不同的机架中。这样既可以保证机架发生异常时能够进行恢复数据,还可以题号数据的读写性能,同一机架内的带宽非常高,所以同一机架内的通信非常快,另外如果一个机架出现问题,可以从其它的机架上进行恢复数据。

六、HDFS数据的读写流程

1.读数据流程

读取HDFS上面的数据分为几个流程:

  1. 客户端会通过File System.open()打开文件,调用open方法之后,创建HDFS的输入流
  2. 访问NameNode,通过getBlockLocations()方法会获得文件的数据块的存储位置,并用该存储位置初始化输入流
  3. 通过初始化好的输入流进行read操作,获取数据,但是读的数据是最近的,什么意思?就是第2步会初始化同一个数据块的输入流,因为存在多个副本,然后将其进行排序,最近的会优先访问,如果前面的出现访问异常然后读取下一个较近的
  4. 关闭数据流的连接
  5. 重复2、3、4操作直到将一个文件的所有数据块全部读取完成

2.写数据流程

向HDFS中写入数据的流程:

  1. 客户端通过FileSystem.create()获取文件的输出流
  2. 访问NameNode,NameNode此时会做一些检查就是带写入的数据是否存在等信息,如果不存在NameNode会创建一个新的文件,并添加元数据信息
  3. 调用输出流的write方法进行写数据
  4. 当时写入的数据会被分成一个一个的包,这些包会被存入到一个队列中
  5. 输出流向NameNode申请节点,这些节点就会构成一个数据流管道,按照流水线的方式不断发往目标节点
  6. 每个节点成功接收成功的话会返回ack,确认已经收到,沿着管道的逆方向,每当一个包成功接受就将其从队列中删除,直到队列中无数据
    这些节点就会构成一个数据流管道,按照流水线的方式不断发往目标节点
  7. 每个节点成功接收成功的话会返回ack,确认已经收到,沿着管道的逆方向,每当一个包成功接受就将其从队列中删除,直到队列中无数据
  8. 关闭输出流资源


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
24天前
|
机器学习/深度学习 数据可视化 大数据
阿里云大数据的应用示例
阿里云大数据应用平台为企业提供高效数据处理与业务洞察工具,涵盖Quick BI、DataV及PAI等核心产品。DT203课程通过实践教学,帮助学员掌握数据可视化、报表设计及机器学习分析技能,提升数据驱动决策能力。Quick BI简化复杂数据分析,DataV打造震撼可视化大屏,PAI支持全面的数据挖掘与算法应用。课程面向CSP、ISV及数据工程师等专业人士,为期两天,结合面授与实验,助力企业加速数字化转型。完成课程后,学员将熟练使用阿里云工具进行数据处理与分析。[了解更多](https://edu.aliyun.com/training/DT203)
|
27天前
|
消息中间件 SQL 大数据
Hologres 在大数据实时处理中的应用
【9月更文第1天】随着大数据技术的发展,实时数据处理成为企业获取竞争优势的关键。传统的批处理框架虽然在处理大量历史数据时表现出色,但在应对实时数据流时却显得力不从心。阿里云的 Hologres 是一款全托管、实时的交互式分析服务,它不仅支持 SQL 查询,还能够与 Kafka、MaxCompute 等多种数据源无缝对接,非常适合于实时数据处理和分析。
73 2
|
3天前
|
网络协议 安全 Java
分布式(基础)-RMI的原理
分布式(基础)-RMI的原理
|
1月前
|
存储 分布式计算 Hadoop
【揭秘Hadoop背后的秘密!】HDFS读写流程大曝光:从理论到实践,带你深入了解Hadoop分布式文件系统!
【8月更文挑战第24天】Hadoop分布式文件系统(HDFS)是Hadoop生态系统的关键组件,专为大规模数据集提供高效率存储及访问。本文深入解析HDFS数据读写流程并附带示例代码。HDFS采用NameNode和DataNode架构,前者负责元数据管理,后者承担数据块存储任务。文章通过Java示例演示了如何利用Hadoop API实现数据的写入与读取,有助于理解HDFS的工作原理及其在大数据处理中的应用价值。
51 1
|
28天前
|
存储 SQL 分布式计算
MaxCompute 在大规模数据仓库中的应用
【8月更文第31天】随着大数据时代的到来,企业面临着海量数据的存储、处理和分析挑战。传统的数据仓库解决方案在面对PB级甚至EB级的数据规模时,往往显得力不从心。阿里云的 MaxCompute(原名 ODPS)是一个专为大规模数据处理设计的服务平台,它提供了强大的数据存储和计算能力,非常适合构建和管理大型数据仓库。本文将探讨 MaxCompute 在大规模数据仓库中的应用,并展示其相对于传统数据仓库的优势。
69 0
|
1月前
|
存储 关系型数据库 大数据
PolarDB 大数据处理能力及其应用场景
【8月更文第27天】随着数据量的爆炸性增长,传统的数据库系统面临着存储和处理大规模数据集的挑战。阿里云的 PolarDB 是一种兼容 MySQL、PostgreSQL 和高度可扩展的关系型数据库服务,它通过其独特的架构设计,能够有效地支持海量数据的存储和查询需求。
52 0
|
1月前
|
机器学习/深度学习 监控 大数据
Serverless 应用的监控与调试问题之Flink在整个开源大数据生态中应该如何定位,差异化该如何保持
Serverless 应用的监控与调试问题之Flink在整个开源大数据生态中应该如何定位,差异化该如何保持
|
1月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
68 2
基于Redis的高可用分布式锁——RedLock
|
1月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
2月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型

热门文章

最新文章