综合分析

发布时间 2023-04-04 20:09:18作者: 一剑屠狗

如何解决Job运行效率低的问题

在模块B中出现某些Job运行时间较长,你认为可能是哪些情况造成?有什么相应的处理办法吗?

数据量过大,导致Job处理时间过长。可以考虑对数据进行分片或增加集群的计算资源。

Job设计不合理,算法复杂度过高。可以优化算法,减少计算量。

网络或IO瓶颈导致Job运行缓慢。可以优化网络连接或改进IO操作。

数据倾斜,导致某些节点负载过高。可以通过数据预处理、数据分布调整等方式解决。

对于数据仓库的理解

在模块B中,对数据进行分层作用(数仓的作用)的理解,

数据仓库,是一个面向主题,集成的,相对稳定的,反映历史变化的数据集合,通常用于支持管理决策

数仓中Hive内外表对比

在模块B中出现分区表均为内表,但分区表还有外表的存在形式,请问它们有哪些区别

内部表(管理表):

删除内部表会直接删除元数据以及存储的数据,对内部表的修改会将修改直接同步给元数据;

外部表:

删除外部表仅仅会删除元数据,HDFS上的数据是不会被删除的,对外部表的表结构和分区进行修改,则需要进行修复;

对于分组排序的理解

在模块B中用到分组排序,请问Hive SQL有哪三种分组排序,他们各自的特点是什么。

row_number:

每一行记录生生产一个序号,依次排序且不会重复

rank:

排序的时候会重复,但是数目不会减少

dense_rank:

排序的时候会重复,数目也会减少

对于UDF/UDAF/UDTF理解

在模块B中可能会用到UDF/UDAF/UDTF,它们的区别是什么,请问它们分别解决了什么问题?

UDF 是自定义函数,输入一行数据输出一行数据,可以实现函数或字符串拼接等操作

UDAF是自定义聚合函数,实现多对一,输入一行数据输出一行数据,主要实现一些复杂的聚合函数操作,比如平均值,求标准差等

UDTF是用来实现一行输入多输出的函数,,适用于一些复杂的数据处理操作

如何解决Job运行效率低的问题

在模块B中出现某些Job运行时间较长,你认为可能是哪些情况造成?

数据倾斜导致效率低

suffle 小文件太多或者分片数量过大

map太多,reduce不够

spark的吞吐量,单一节点的吞吐量

每一个步骤的RDD操作的空任务和小任务

spark的序列化的时间较长

suffle本身的io时间偏长

解决方案:

如果有相同的RDD,使用一个RDD

做suffle的时候可以做一个顶聚合

优化序列化的问题

写程序的时候减少拆箱和装箱的过程

做资源调度,修改spark的yarn

大规模的改suffle 的过程,在execute 里改

调整数据倾斜,尽量少用这种比较倾斜的分片来做

Hive分区表作用

Hive分区表的作用是什么,是否越多越好,为什么?

不是的

原因:hive如果有过多的分区,由于底层是存储在HDFS上,HDFS上只有用于存储大文件,而非下文件,因为过多的分区会增加 NameNode 的负担;hive会转化成 mapreduce ,mapreduce会转化成多个task,过多的小文件的话,每个文件一个task,每个task一个JVM实例,JVM的开启和销毁会降低系统效率。所以hive的分区表不是越多越好。

如何解决数据倾斜问题

当使用spark产生了数据倾斜的情况时,请问有哪些方法可以解决这个问题呢?

原因:

1.数据倾斜导致效率低

2.suffle 小文件太多或者分片数量过大

3.map太多,reduce不够

4.单条记录开销大,导致spark变慢

5.spark的吞吐量,单一节点的吞吐量

6.每一个步骤的RDD操作的空任务和小任务

7.spark的序列化的时间较长

8.suffle本身的io时间偏长

解决方案:

1.如果有相同的RDD,使用一个RDD

2.做suffle的时候可以做一个顶聚合

3.优化序列化的问题

4.写程序的时候减少拆箱和装箱的过程

5.做资源调度,修改spark的yarn

6.大规模的改suffle 的过程,在execute 里改

7.调整数据倾斜,尽量少用这种比较倾斜的分片来做

HDFS存储小文件问题

在HDFS数据存储是常常遇到小文件问题,小文件带来的危害有哪些?你知道的解决小文件问题的方法有哪些?

危害:

  如果有大量的小文件的存在,存放的文件数目过多的话会占用很大的内存,甚至撑爆内存。

  hdfs使用于高吞吐量,不适合低时间延迟的访问,如果同时存入大量的小文件会花费很长的使时间。访问小文件,则必须从一个datanode跳转到另一个datanode,这样大大降低了读取性能。

解决方案:

  生产上设置小文件的阈值,到达阈值就对小文件进行合并。

  多Master设计,让元数据散存到不同的NameNode中。

HDFS适合大文件还是小文件,为什么

(1)HDFS不适合大量小文件的存储,因namenode将文件系统的元数据存放在内存中,因此存储的文件数目受限于 namenode的内存大小。HDFS中每个文件、目录、数据块占用150Bytes。如果存放的文件数目过多的话会占用很大的内存

(2)HDFS适用于高吞吐量,而不适合低时间延迟的访问。如果同时存入大量的小文件会花费很长的时间

(3) 流式读取的方式,不适合多用户写入,以及任意位置写入。如果访问小文件,则必须从一个datanode跳转到另外一个datanode,这样大大降低了读取性能。