数据开发八股文整理- Hadoop

什么是hadoop

Hadoop是一个分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题
Hadoop运行模式

本地模式和为分布式模式都是单机运行

完全分布模式即是多台服务器组成分布式环境
Hadoop集群中的组件

Name Node-负责存储文件的元数据,例如文件位置,文件目录结构

Data Node-负责存储文件块数据

Secondary Name Node-负责对Name Node的数据进行备份

Node Manger-执行任务

Resource Manager负责资源调度
HDFS定义

是一个分布式文件系统,适合一次写入多次写出的场景,对于文件只能追加不能修改,适合用于数据分析
HDFS优缺点

优点:

高容错性-能够自动保存多个副本,在一个副本丢失时可以进行恢复

适合进行大规模数据的处理

可以在廉价机器上构建,有可靠性

缺点:

不适合低延迟数据访问

无法高效的存储大量小文件

不支持文件并发写入

仅支持数据追加,不支持数据修改
HDFS中的组件

Name Node负责管理名称空间,管理数据映射信息,处理客户端的请求

Data Node负责存储数据,执行数据读写操作

Client负责与前两个组件进行交互,获取文件信息并读取或者写入数据,同时提供一些命令操作HDFS

Secondary Name Node负责备份Name Node,在紧急情况下,可以接替Name Node的工作

*H DFS采用块存储,2.0中一个块大小是128MB
HDFS写数据流程

1)客户端通过分布式文件系统模块(Distributed FileSystem)向NameNode请求上传文件,NameNode检查目标文件是否存在,父目录是否存在;

2)NameNode返回是否可以上传文件;

3)客户端请求第一个Block上传到哪几个DataNode服务器上;

4)NameNode返回3个DataNode节点,分别为dn1,dn2,dn3;

5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,dn2调用dn3,将这个通信管道建立完;

6)dn1,dn2,dn3逐级应答客户端;

7)客户端开始往dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet传给dn2,dn2传给dn3,dn1每传一个packet会放入一个应答队列等待应答;

8)当一个Block传输完成后,客户端再次请求NameNode上传第二个Block的服务器(重复执行3-7步)。
HDFS数据备份

Name Node内存中的元数据序列化后会形成Fsimage文件,用于在磁盘中备份元数据

每当有元数据更新或者添加元数据的时候,修改元数据同时追加到edit文件中,记录客户端更新元数据的每一步操作

一旦Name Node断电,系统会合并Fsimage文件和Edits文件,合成新的元数据,其中Secondary Name Node专门用于合并两个文件,接替Name Node的工作
小文件对HDFS的危害

小文件过多会占用Name Node的内存,因为每一个元数据都会占用一份内存,会造成内存空间不足

如果有大量小文件,会造成寻道时间大于读取文件的时间,这与其设计原理相悖,并且会严重影响运行速度

如果访问小文件,必须跳转Data Node,严重降低读取性能
Mapreduce原理

它是一个分布式运算框架,其中Map函数用于数据预处理,输入和输出都是键值对形式,处理好的数据会送入Reduce阶段,对每一组简直进行处理,形成最后的输出
Mapreduce优缺点

优点:易于编程,有良好的扩展性

具备高容错性适合处理海量数据

缺点:不擅长实时计算和流使式计算,只能处理静态数据

不擅长有向图计算(spark擅长),因为需要将数据写入磁盘,会造成大量磁盘IO
Hadoop数据压缩的方式

deflate,Gzip,Bzip,前两种不支持切片
mapreduce性能瓶颈

1.计算机性能

2.IO操作优化

数据倾斜,任务设置不合理,Map时间过长,小文件过多,大文件过多等
MapReduce优化方法

在数据输入阶段,合并小文件,减少数据装载次数

在Map阶段减少溢写和合并次数,缩短整体时间,减少IO

合理设置Map和reduce任务数量,避免造成资源竞争或者处理超时
数据倾斜

一种是某一区域的数据量远远大于区域

一种是部分记录的大小的大小远远大于平均值

导致大部分的任务运行速度快,小部分的任务运行速度很慢,或者出现内存异常

如何缓解数据倾斜?

1抽样和范围分区

2自定义分区

3使用combine减少数据倾斜,聚合并精简数据,例如将相同key的数据进行合并

4尽量采用Map Join避免使用Reduce join这样可以省略shuffle阶段,提高磁盘IO效率

5通过随机前缀重新设计键值,针对聚合类的数据倾斜,可以在map阶段添加随机后缀,是的分区的时候能够分到不同节点,然后再重新进行一次全局聚合
HDFS小文件优化方法

HDFS上每个文件都需要建立一个索引,文件过多就会产生大量的索引文件,不仅占用内存空间,也会导致索引速度大幅度降低

优化方法:

在数据采集阶段将小文件合并成大文件再上传

在业务处理钱,在HDFS上使用Map Reduce进行文件合并

可以使用CombineTextInputFormat提高效率
参考博客https://blog.csdn.net/weixin_44123362/article/details/130230531

相关推荐
少许极端18 小时前
消息队列5-RabbitMQ的高级特性和MQ的应用问题与解决方案-事务、消息分发的应用、幂等性保证、顺序性保证、消息积压的解决
分布式·消息队列·rabbitmq
青稞社区.18 小时前
Claude Code 源码深度解析:运行机制与 Memory 模块详解
大数据·人工智能·elasticsearch·搜索引擎·agi
T062051419 小时前
【面板数据】地级市及区县人口空心化数据(2000-2024年)
大数据
Aktx20FNz19 小时前
iFlow CLI 完整工作流指南
大数据·elasticsearch·搜索引擎
Arva .19 小时前
RabbitMQ
网络·分布式·rabbitmq
DYuW5gBmH20 小时前
Kafka 成功消费消息的完整流程图
分布式·kafka·流程图
LaughingZhu20 小时前
Anthropic 收购 Oven 后,Claude Code 用运行时写了一篇护城河文章
大数据·人工智能·经验分享·搜索引擎·语音识别
学习3人组20 小时前
TortoiseGit冲突解决实战上机练习
大数据·elasticsearch·搜索引擎
Ln5x9qZC221 小时前
Flink SQL 元数据持久化实战
大数据·sql·flink
OYpBNTQXi21 小时前
Flink Agents 源码解读 --- (6) --- ActionTask
大数据·flink