热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hdfs读写流程_大数据云计算面试之一HDFS架构详解

标题中提到hdfs(HadoopDistributeFileSystem)是分布式文件系统本文主要包括以下5个内容1.HDFS架构2.HDFS读写流程3.HDFSHA(高可用)4.

标题中提到hdfs(Hadoop Distribute File System)是分布式文件系统

e5635d0bbc7fbd3ebc04d2a1c705770f.png

本文主要包括以下5个内容

1.HDFS架构

2.HDFS 读写流程

3.HDFS HA(高可用)

4.小文件是什么

5.小文件带来的瓶颈

引言:

学习新框架方法

推荐官网+源码

hadoop.apache.org

spark.apache.org

flink.apache.org

storm.apache.org

  1. HDFS架构
    可以查看官网的描述

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

介绍NameNode and DataNodes

bf61810f9f06274dd028723cecee79bf.png

结合上图官网 描述可以总结

HDFS has a master/slave architecture 是一个主从的架构

An HDFS cluster consists of a single NameNode 一个集群只有一个NameNode

there are a number of DataNodes, usually one per node in the cluster, which manage storage attached to the nodes that they run on. 有多个 DataNodes 主要作用是管理manages 文件系统的命名空间,和管理需要访问文件的客户端

 HDFS exposes a file system namespace and allows user data to be stored in files. HDFS公开了文件系统名称空间,并允许用户数据存储在文件中。

fc28da442a57f09ada6cd46b9f3968b3.png

根据上图

可以看到有这么几个概念

  1. Client

  2. NameNode( 简写为NN)

  3. DataNodes (简写为 DN)

  4. Block

Client 用于发起HDFS请求,可以是用户,可以是代码

NN 存在唯一一个,所以存在SinglePoint of Failure (单点故障的问题) 引出 ==》HA(heigh available)

DN 存在多个

作用:存储数据 和NN 之间有心跳

Namenode 创建的时候,配置有文件名字、 副本数 等

854ca3e4afe26c2df8059c66b3bed9f2.png

2.读写流程

了解架构后,我们来看读写流程

假设我们有一个client  一个NameNode 三个DataNode,等几个角色

7ec166b30cb5b29658c480bba6636ffc.png

(1)写入流程

1.一个用户、代码需要写入文件

第一步:client 从配置文件(hdfs 的配置文件中)获取到 1. 副本大小 2.副本数量

02177ae1b2cc09c976d945ba1d580519.png

第二步:在第一步获取的的参数中,进行文件拆分

第三步:client 向 NameNode 发起请求,询问NameNode 文件应该放在哪里

第四步: NameNode 返回文件,可以存放到的位置

5495197a63e529be0ac1a6dd12f30726.png

第五步:client 对指定的DataNode 位置写入文件

6813114238528feb3e9ea8d65b970683.png

DataNode 写入完成进行副本拷贝和通知NameNode

9cb6fba8a4ae988143a62db620d95be2.png

(2)读取流程(就相对比较简单了)

第一步:客户段请求NameNode 文件

第二步:NameNode 返回存放该数据的DataNode 地址

第三步:client 到DataNode 读取数据

3.HA (高可用)架构

在官网上可以看到有QJM 和NFS 架构

b0a5d8f70943ba69bca4e142d5417dd3.png

QJM(https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html)

NFS(https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html)

其中见常见的HA框架如下图所示

d1bc2eccf14f04abe6e4739105bbe82c.png

建立多个NameNode 一个Active 活动状态, 一个Standby 备用,通过Monitor Health 监控状态, 通过Zookeeper 协调主备切换

4.小文件是什么

小文件是指文件size小于HDFS上block大小的文件。这样的文件会给hadoop的扩展性和性能带来严重问题

为什么有小文件?

1、实时处理:比如我们使用 Spark Streaming 从外部数据源接收数据,然后经过 ETL 处理之后存储到 HDFS 中。这种情况下在每个 Job 中会产生大量的小文件。2、hive中对表执行insert操作,每次插入都在表目录下形成一个小文件。创建表结构相同的表,create table t_new as select * from t_old;老表根据实际情况可以删除就删除。3、hive中执行简单过滤操作,符合过滤条件的数据存在很多block块中,走map,map输出有很多小文件。开启map端的聚合。4、mapreduce正常执行产生小文件。将mapreduce输出不直接写hdfs,而是写入到hbase中。设置map端文件合并及reduce端文件合并。5、输入数据文件为小文件。小文件合并后再计算。CombineFileInputFormat:它是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。

5.小文件带来的瓶颈

1.磁盘IO

2.task启动销毁的开销

3.资源有限(磁盘空间)

具体为:处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。

最后小文件的解决方法:

通用处理方案:

1、Hadoop Archive

Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。

2、Sequence file

sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。

底层处理方案:

HDFS-8998:

DataNode划分小文件区,专门存储小文件。一个block块满了开始使用下一个block。

HDFS-8286:

将元数据从namenode从内存移到第三方k-v存储系统中。

HDFS-7240:

Apache Hadoop Ozone,hadoop子项目,为扩展hdfs而生。

如有不足,请批评指正!!




推荐阅读
  • 揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节
    揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • 分布式一致性算法:Paxos 的企业级实战
    一、简介首先我们这个平台是ES专题技术的分享平台,众所周知,ES是一个典型的分布式系统。在工作和学习中,我们可能都已经接触和学习过多种不同的分布式系统了,各 ... [详细]
  • 字节Java高级岗:java开发cpu吃多线程吗
    前言抱着侥幸心理投了字节跳动后台JAVA开发岗,居然收到通知去面试,一面下整个人来都是懵逼的,不知道我对着面试官都说了些啥(捂脸~~)。侥幸一面居然过了,三天后接到二面通知,结果这 ... [详细]
  • 在分布式系统领域有个著名的CAP定理:C——数据一致性;A——服务可用性;P——服务对网络分区故障的容错性。这三个特性在任何分布式系统中不能同时满足,最多同时满足两个。Zookee ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 美团优选推荐系统架构师 L7/L8:算法与工程深度融合 ... [详细]
  • 本文详细解析了高性能通信库 NanoMsg 的框架及其应用场景。其中,BUS模式支持多对多的简单通信方式,消息会传递给所有直接连接的节点。REQREP模式则适用于构建无状态的服务集群,用于处理用户的请求,每个请求都需要一个相应的响应。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • Storm集成Kakfa
    一、整合说明Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下:StormKafkaIntegratio ... [详细]
author-avatar
霙昉蘖976
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有