数据开发八股文整理- 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

相关推荐
一只鹿鹿鹿9 分钟前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
June bug28 分钟前
【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
经验分享·分布式·职场和发展·架构·学习方法·测试·软考
聚铭网络1 小时前
案例精选 | 某省级税务局AI大数据日志审计中台应用实践
大数据·人工智能·web安全
阿波罗.20121 小时前
Zookeeper 客户端 .net访问框架 ZookeeperNetEx项目开发编译
分布式·zookeeper
Bug退退退1232 小时前
RabbitMQ 工作模式
java·分布式·rabbitmq
Qdgr_3 小时前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
选择不变3 小时前
日线周线MACD指标使用图文教程,通达信指标
大数据·区块链·通达信指标公式·炒股技巧·短线指标·炒股指标
高山莫衣3 小时前
git rebase多次触发冲突
大数据·git·elasticsearch
链上Sniper3 小时前
智能合约状态快照技术:实现 EVM 状态的快速同步与回滚
java·大数据·linux·运维·web3·区块链·智能合约
wx_ywyy67984 小时前
推客系统小程序终极指南:从0到1构建自动裂变增长引擎,实现业绩10倍增长!
大数据·人工智能·短剧·短剧系统·推客系统·推客小程序·推客系统开发