目前面试了多家大数据开发工程师,成长了不少,也知道了不少知识,下面和你们分享一下我遇到的面试题和答案。前端
1.kafka集群的规模,消费速度是多少。mysql
答:通常中小型公司是10个节点,每秒20M左右。web
2.hdfs上传文件的流程。面试
答:这里描述的 是一个256M的文件上传过程sql
① 由客户端 向 NameNode节点节点 发出请求mongodb
②NameNode 向Client返回能够能够存数据的 DataNode 这里遵循机架感应原则数据库
③客户端 首先 根据返回的信息 先将 文件分块(Hadoop2.X版本 每个block为 128M 而以前的版本为 64M缓存
④而后经过那么Node返回的DataNode信息 直接发送给DataNode 而且是 流式写入 同时 会复制到其余两台机器tomcat
⑤dataNode 向 Client通讯 表示已经传完 数据块 同时向NameNode报告 ⑥依照上面(④到⑤)的原理将 全部的数据块都上传结束 向 NameNode 报告 代表 已经传完全部的数据块 。负载均衡
3.讲述一下mapreduce的流程(shuffle的sort,partitions,group)
首先是 Mapreduce通过SplitInput 输入分片 决定map的个数在用Record记录 key value。而后分为如下三个流程:
Map:
输入 key(long类型偏移量) value(Text一行字符串)
输出 key value
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输出时的key value是分组器分的iterable
输出 key value
输出结果保存在hdfs上而不是本地文件中
4.了解zookeeper吗?介绍一下它,它的选举机制和集群的搭建。
答:那固然是熟悉啦,ZooKeeper 是一个开源的分布式协调服务,是 Google Chubby 的开源实现。分布式应用程序能够基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。咱们公司使用的flume集群,Kafka集群等等,都离不开ZooKeeper呀。每一个节点上咱们都要搭建ZooKeeper服务。首先咱们要在每台pc上配置zookeeper环境变量,在cd到zookeeper下的conf文件夹下在zoo_simjle.cfg文件中添加datadir路径,再到zookeeper下新建data文件夹,建立myid,在文件里添加上server的ip地址。在启动zkserver.sh start便ok了。
5.spark streming在实时处理时会发生什么故障,如何中止,解决
和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。
7.说一下你对hadoop生态圈的认识。
没有固定答案,主要从hdfs底层存储,hbase数据库,hive数据仓库,flume收集,Kafka缓存,zookeeper分布式协调服务,spark大数据分析,sqoop数据互转来讲。
8.yarn的理解:
YARN是Hadoop2.0版本引进的资源管理系统,直接从MR1演化而来。
核心思想:将MR1中的JobTracker的资源管理和做业调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现。
ResourceManager:负责整个集群的资源管理和调度 ApplicationMaster:负责应用程序相关事务,好比任务调度、任务监控和容错等。 YARN的出现,使得多个计算框架能够运行在同一个集群之中。 1. 每个应用程序对应一个ApplicationMaster。 2. 目前能够支持多种计算框架运行在YARN上面,好比MapReduce、storm、Spark、Flink。
9.数据来源的方式:
1.webServer :用户访问咱们的网站,对日志进行收集,记录在反向的日志文件里 tomcat下logs
2js代码嵌入前端页面(埋点):js的sdk会获取用户行为,document会获得元素调用function,经过ngix集群进行日志收集。
10.咱们公司是作啥啥啥的,请你用大数据分析,请你想说就说啥。
这个是靠查你的思惟,无法有答案。
11.聊聊你的项目。
这是60%的时间都在这,你必定要把本身的项目了解搞清楚,数据的来源,数据的收集,数据的分析,数据的储存,数据的展现。
主要解决了啥业务。遇到了啥问题,数据的格式,有哪些优化,等等等
祝你们都能拿到一份好offer。