静帆科技大数据面试题

一、Flink:
1,说说Flink的内存管理是如何做的?
Flink并不是将大量对象存在堆上,而是将对象都序列化到一个预分配的内存块上。此外,Flink 大量的使用了堆外内存。如果需要处理的数据超出了内存限制,则会将部分数据 存储到硬盘上。Flink 为了直接操作二进制数据实现了自己的序列化框架。
理论上 Flink 的内存管理分为三部分:
Network Buffers:这个是在 TaskManager 启动的时候分配的,这是一组用于缓存网络数据的内存,每个块是32K,默认分配 2048个,可以通过“taskmanager.network.numberOfBuffers” 修改。
Memory Manage pool:大量的 Memory Segment 块,用于运行时的算法(Sort/Join/Shuffle 等),这部分启动的时候就会分配。
User Code:这部分是除了 Memory Manager 之外的内存用于 User code 和 TaskManager 本身的数据结构。

2,Flink是如何做容错的?

二、Clickhouse:
1,请描述一下Clickhouse的应用场景和限制

2,Clickhouse为什么这么快?
2.1.1、硬件方面

Clickhouse会在内存中进行Group By,并使用HashTable装载数据。与此同时,CH对于CPU L3级别的缓存也特别在意,因为一次L3级别缓存的失效都会带来70~100ns,积少成多。一个32G,则可能会浪费5亿次/秒的运算。也正是因为如此,CH能在基准查询中做到1.75亿次/秒的数据扫描能力

2.1.2、算法方面

常量方面,CH使用了Volnisky算法;非常量,则使用CPU的向量化执行SIMD来优化;正则使用re2和hyperscan算法。

2.1.3、应景优化

CH会在不同的场景使用不同的算法。例如,在去重函数uniqCombined中,会根据数据量选择不同的算法:数据量比较少的时候,会选择使用Array来保存;数据量中等的时候,使用HashSet;数据量很大的时候,会使用HyperLogLog算法。

2.1.4、向量化

CH使用向量化执行。SIMD被广泛地应用于文本转换、数据过滤、数据解压和JSON转换等场景。相对于单纯使用CPU,利用寄存器暴力优化也算是一种降维打击

2.1.5、持续测试和持续改进

一个好的产品,肯定是能很好应用于各种场景的。CH由于拥有Yandex的天然优势,经常会使用真实数据来进行测试,尝试使用于各个场景。也因此获得了快速的版本更新换代,基本维持在一个月一更新。

三、kafka:
1,kafka producer如何优化打入速度

2,kafka是怎么体现消息顺序性的

四、HDFS:
1,一个DataNode宕机怎么恢复?
Datanode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。如果是长时间宕机了,那么datanode上的数据应该已经被备份到其他机器了,
那这台datanode就是一台新的datanode了,删除他的所有数据文件和状态文件,重新启动。

2,NameNde和SecondaryNameNode的区别与联系

区别:
NameNode负责管理元数据和文件信息
SecondaryNameNode主要用于定期合并Fsimage 和Edits

联系:
SecondaryNameNode中保存了一份和Namenode一致的Fsimage 和Edits 。在Namenode发生故障时,可以从SecondaryNameNode恢复数据,虽然已经不是最新的 Fsimage (SecondaryNameNode从 NameNode 下载 fsimage 和 Edits 文件的时候,新的更新操作已经写到 edit.new 文件中去了) ,但是我们可以将损失减小到最少。

Edits 日志文件存放的是HDFS所有的更改操作日志。
Fsimage 有最新的元数据和HDFS的文件和目录信息,但不包含文件块位置信息,文件块位置信息只存储在内存中。
每个NameNode启动的时候会将Fsimage和Edits 进行合并,保证内存中的元数据是最新的。当客户端对 HDFS 中的文件进行操作时,操作记录首先被记入 Edits 日志文件中,当客户端操作成功后,元数据会更新到内存。每达到触发条件,会由 SecondaryNameNode 将 NameNode 上积累的所有 Edits 和一个最新的 Fsimage 下载到本地,并加载到内存进行合并,生成一个新的 Fsimage 文件并复制到 NameNode 。

五、Hbase:
1,hbase宕机如何处理?

2,JavaAPI如何操作Hbase?

六、hive:
1,描述数据中的null在hive的底层是如何存储的?

2,Hive内部表和外部表的区别?

七、Java:
1,Java中多线程有几种实现方式,常见的线程池有几种?

2,描述下JVM 的内存模型,简述一下JVM的GC过程

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值