程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

大数据程序员面试都有哪些常见面试题

balukai 2025-07-08 16:30:56 文章精选 3 ℃

技术面试对于每一个程序员来说,是在求职过程中都会经历的一个环节,而今天我们就给大家简单介绍一下大数据程序员面试都有哪些常见面试题。

1.kafka集群的规模,消费速度是多少。

答:一般中小型公司是10个节点,每秒20M左右。

2.hdfs上传文件的流程。

答:这里描述的是一个256M的文件上传过程

①由客户端向NameNode节点节点发出请求

②NameNode向Client返回可以可以存数据的DataNode这里遵循机架感应原则

③客户端先根据返回的信息先将文件分块(Hadoop2.X版本每一个block为128M而之前的版本为64M

④然后通过那么Node返回的DataNode信息直接发送给DataNode并且是流式写入同时会复制到其他两台机器

⑤dataNode向Client通信表示已经传完数据块同时向NameNode报告⑥依照上面(④到⑤)的原理将所有的数据块都上传结束向NameNode报告表明已经传完所有的数据块。

3.讲述一下mapreduce的流程(shuffle的sort,partitions,group)

先是Mapreduce经过SplitInput输入分片决定map的个数在用Record记录keyvalue。然后分为以下三个流程:

Map:

输入key(long类型偏移量)value(Text一行字符串)

输出keyvalue

Shuffle:、

合并(merge)map输出时先输出到环形内存,当内存使用率达到60%时开始溢出写入到文件,溢出文件都是小文件,所以就要合并他们,在这个构成中就会排序,根据key值比较排序

排序(sort)如果你自定义了key的数据类型要求你的类一定是WriteableCompartor的子类,不想继承WriteableCompartor,至少实现Writeable,这时你就必须在job上设置排序比较器job.setSortCmpartorClass(MyCompartor.class);而MyCompartor.class必须继承RawCompartor的类或子类

分区(partition)会根据map输出的结果分成几个文件为reduce准备,有几个reducetask就分成几个文件,在job上设置分区器job.setPartitionerClass(MyPartition.class)Myrtition.class要继承Partitioner这个类

分组(group)分区时会调用分组器,把同一分区中的相同key的数据对应的value制作成一个iterable,并且会在sort。在job上设置分组器。
Job.setGroupCompartorClass(MyGroup.class)MyGroup.class必须继承RawCompartor的类跟子类

上面的结果储存到本地文件中,而不是hdfs上

上面只要有完成结果,reduce就开始复制上面的结果,通过http方式

Reduce

输入key时map输出时的keyvalue是分组器分的iterable

输出keyvalue

输出结果保存在hdfs上而不是本地文件中

4.了解zookeeper吗?介绍一下它,它的选举机制和集群的搭建。

答:那当然是熟悉啦,ZooKeeper是一个开源的分布式协调服务,是GoogleChubby的开源实现。分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。我们公司使用的flume集群,Kafka集群等等,都离不开ZooKeeper呀。每个节点上我们都要搭建ZooKeeper服务。先我们要在每台pc上配置zookeeper环境变量,在cd到zookeeper下的conf文件夹下在zoo_simjle.cfg文件中添加datadir路径,再到zookeeper下新建data文件夹,创建myid,在文件里添加上server的ip地址。在启动zkserver.shstart便ok了。

5.sparkstreming在实时处理时会发生什么故障,如何停止,解决

和Kafka整合时消息无序:

修改Kafka的ack参数,当ack=1时,master确认收到消息就算投递成功。ack=0时,不需要收到消息便算成功,高效不准确。sck=all,master和server都要受到消息才算成功,准确不高效。

StreamingContext.stop会把关联的SparkContext对象也停止,如果不想把SparkContext对象也停止的话可以把StremingContext.stop的可选参数stopSparkContext设为flase。一个SparkContext对象可以和多个streamingcontext对象关联。只要对前一个stremingcontext.stop(stopsparkcontext=false),然后再创建新的stremingcontext对象就可以了。

6.mysql,mongodb,rides的端口。

面试数据库介绍的再好,不知到默认端口,也证明你没有经验。mysql:3306,mongdb:27017,rides:6379。

最近发表
标签列表