0
点赞
收藏
分享

微信扫一扫

大数据面试总结-2021年4月


文章目录

  • ​​一. 小文件的问题​​
  • ​​1.1 HDFS架构​​
  • ​​2. HDFS写流程​​
  • ​​3. HDFS读流程​​
  • ​​4. HA​​
  • ​​5. 小文件​​
  • ​​Hadoop调优策略​​
  • ​​分表​​
  • ​​充分利用中间结果集​​
  • ​​压缩​​

一. 小文件的问题

HDFS架构;
HDFS读写流程;
HDFS HA;
小文件是什么
小文件给Hadoop集群带来的瓶颈问题;

从HDFS架构中看到Hadoop各个组件的作用是什么?

把问题向尼所知道的方面去引导;

1.1 HDFS架构

Hadoop:HDFS/YARN/MapReduce

HDFS:NameNode,DataNode, SecondaryNameNode;

概念:
Client、
NN:
– 一个,容易出现单点故障问题,引出HA;
– metadata:谁 权限 文件对应的block的信息;

DN:多个,存储数据;和NN之间是有心跳的
Block:文件存入HDFS中时,是按照block进行拆分,128M的大小;

HDFS的容错信息:三副本或两幅本的策略。

2. HDFS写流程

Client(请求读写操作)、一个NameNode(只有一个,负责元数据管理和协调巩工作)、多个DataNode(负责存储数据)、

需求:
一个人写数据到HDFS中,大小是200M;

缺少些东西:
1)blocksize是多少:128/64/256M;
2)几副本:1/2/3
都是在HDFS的配置文件中的;

200M会被拆分为两个block块,block1和block2。

第三步:block1存放3个副本,NN需要知道3个block块要存放到哪几个DN上呢?
第四步:NameNode明确告诉Client,DN1/DN2/DN3的地址;
第五步:一边接受,一边把数据存放在下面的机器上面去。当每个block写完后,DataNode会告诉NameNode,其block已经写完了。当所有的块写完后,NameNode上面就有所有block块的信息了。

元数据信息:
file–>
block1:3 dn1/dn2/dn3
block2:3 dn1/dn2/dn3;

3. HDFS读流程

一个人要读某个目录下的文件,流程是怎样的:
拿着目录在元数据中来找,要问NN,去拿到你想获取的元数据信息。客户端直接到DataNode上去拿,把相同的block块上的信息合并。

4. HA

元数据是在NameNode中管理的。
生产上的东西一定是要保证高可用的,HDFS、YARN都是这样。
高可用方案:主备方案。
Standby做的仅仅是同步active的节点状态。
但是这两个怎么切换?
配置再两个独立的机器上,一个处于活动状态,一个处于备份状态。
当出现了问题时,怎样来切换?
通过Monitor来进行监控两个NameNode:active和standby;
然后通过zookeeper来进行管理。

总结:通过主和备,然后有各自的进程来监控它,通过zookeeper来进行一个状态的切换,不需要人工来进行干预。

​​参考文档​​

HA扩展:YARN的HA
RM虽然有HA,但是会起不来。主的挂掉,备用的起不来,可能是小文件的问题导致。

挂掉的时候意味着无法把yarn的作业提交上去,那此时的SLA如何来保证这个99.99%?

5. 小文件

为什么会有小文件:–>
做批处理或者离线计算时,就会有小文件的产生。
最通常的做法:数据拷贝到HDFS上去。
reduce决定了文件输出的个数。
Hadoop中的目录、文件、block都会以元数据的方式来存储。

小文件给Hadoop集群带来的瓶颈问题:–>
经典的mapreduce过程:

大数据面试总结-2021年4月_HDFS


以MapReduce为例–>

Hive的执行过程,是如何把SQL转成MapReduce的?

1)磁盘的IO是瓶颈;
2)map的task的开启和销毁会浪费大量的时间;
3)资源有限;

Hadoop调优策略

  1. 架构:分表 分区表partition 充分利用中间结果集 压缩
  2. 语法: 排序–order by/sort by/distribute by/cluster by
    控制输出(reduce/partiton/task)的数量
    join:普通join/mapjoin
    执行计划
  3. 执行:推测执行 并行执行 JVM

分表

Flume–>HDFS–>Spark ETL–>Spark SQL–>SQL–>Spark SQL/NoSQL
行式存储–>每分钟2亿调数据,500哥个作业访问这个大表。

分表:

access_20190808 在关系数据库的分表;
在大数据中,就是分区表:/spark/access/day=20190808/…
分区里又分为单极分区/多级分区/静态分区/动态分区;

分区表目的是用来减少查询时候的范围

充分利用中间结果集

CPU负载,IO负载;
IO负载降低进而提升作业的执行性能,缺点是什么

在资源不变的情况下,让作业的执行性能有所提升;

压缩

使用压缩算法来“减少”数据的过程;
缺点是什么?
常用压缩技术:gzio,bzip2;
压缩在大数据中的使用场景:
输入数据,中间数据,输出数据;

怎么在压缩中做一个选择:压缩比 压缩速度,两者呈反比。
reduce结果输出的,选择压缩比高的,节省磁盘空间。

输入:哪些压缩支持分片;


举报

相关推荐

0 条评论