ITPub博客

首页 > 大数据 > 数据挖掘 > 大数据面试那些事(1)

大数据面试那些事(1)

数据挖掘 作者:大数据技术前线 时间:2023-11-22 09:29:17 0 删除 编辑

来源:大数据左右手

摘录于知识星球星友问题:主要是常见面试问题,结合自己的开发经验,做出的个人回答,仅供参考。文末留言,提出不足和你的见解!

可以讲讲Flink的优化吗,具体以项目中某个例子举例一下。

优化的话:可以参考下面几点

  1. GC的配置

(1)有必要的时候调整老年代与新生代的比值 或者 更换垃圾收集器 。

(2)有必要的时候增加JVM内存。

   2. 数据倾斜

(1)需要重新设计key,以更小粒度的key使得task大小合理化。

(2)当分区导致数据倾斜时,需要考虑优化分区。避免非并行度操作,有些对DataStream的操作会导致无法并行,例如WindowAll。

(3)调用rebalance操作,使数据分区均匀。

(4)自定义分区:使用一个用户自定义的Partitioner对每一个元素选择目标task,由于用户对自己的数据更加熟悉,可以按照某个特征进行分区,从而优化任务执行。

  1. checkpoint

(1)频率不宜过高。

(2)超时时间不要过长,一般在频率一半。

(3)可使用异步。

  1. 其他配置

(1)配置JobManager内存。

(2)配置TaskManager个数。

(3)配置TaskManager Slot数。

........

  1. 其他

(1)背压的时候大家往往忽略了数据的序列化和反序列化,过程所造成的性能问题。

(2) 一些数据结构 ,比如 HashMap 和 HashSet 这种 key 需要经过 hash 计算的数据结构,在数据量大的时候使用 keyby 进行操作, 造成的性能影响是非常大的。

(3) 如果我们的下游是 MySQL,HBase这种,我们都会进行一个批处理的操作,就是让数据存储到一个 buffer 里面,在达到某些条件的时候再进行发送,这样做的目的就是减少和外部系统的交互,降低网络开销的成本。

(4) 频繁GC ,无论是 CMS 也好,G1也好,在进行 GC 的时候,都会停止整个作业的运行(SWT),GC 时间较长还会导致 JobManager 和 TaskManager 没有办法准时发送心跳,此时 JobManager 就会认为此 TaskManager 失联,它就会另外开启一个新的 TaskManager。

  1. 场景

产生背压的时候如果定位下游计算不过来,导致上游挤压严重,这个时候想着怎么去增加并行度也好或者利用多线程也好,目的就是增加计算能力。如果多线程计算,这个时候更多关注cpu核数,来分配更多的时间片,提高计算能力。

在sql优化的过程中,有没有面试说出后比较新颖的案例,而不是老一套的八股文?

有这样的一个场景,行为数据,列有150列左右,某个事件有order_id 属性,现在有个需求,要取行为事件同一个order_id最新的那条数据 

平常的做法:

  1. 开窗,按order_id partition by,按时间 order by
  2. 排序
  3. 取序号为1

如果数据量大的时候,over开窗很容易oom,那怎么优化可以达到取出最新数据呢?

  1. max(order_id + 时间 + 其他字段)
  2. 取值的时候 spit 截取,按下标取值即可

手段很多,看你怎么灵活运用。

Redis是多线程还是单线程的?为什么那么快?

首先,采用了多路复用io阻塞机制。

然后,数据结构简单,操作节省时间。

最后,运行在内存中,自然速度快 – 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。

  • 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
  • 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  • 使用多路I/O复用模型,非阻塞IO;
  • 使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

请详细解释介绍一下多路复用io阻塞机制?

  • IO:网络IO,操作系统层面指数据在内核态和用户态之间的读写操作。
  • 多路:多个客户端连接(连接就是套接字描述符,即Socket)。
  • 复用:用一个或多个连接处理,其实就是用一个服务端连接进行处理多客户端的请求。

--END--

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70027827/viewspace-2996446/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2023-03-16

  • 博文量
    215
  • 访问量
    195230