2020-JAVA-大数据-面试汇总_大数据java部门面试

2 京东实习二面 (主要问项目) 通过

1.自我介绍
2.介绍一下第一个大数据项目,用了哪些技术,画一下架构图
3.flume采集子系统日志,这些日志数据都包含哪些?
4.集群是怎么部署的?
5.分析使用什么进行分析的?
6.系统分析的优点和缺点都有哪些?如何改进一下?
7.实时的了解多少?

祖龙娱乐     7月24日下午5点面试   时长 73分钟  (包括答案) 通过

在电脑前苦等半小时,终于面试官上线了,一看,一下两个人,我去,心理压力好大,赶紧放松放松心情

先简单的来个自我介绍:

1  自我介绍

2  你自己搭过大数据集群吗? 那你说说搭建hadoop集群的3个xml文件

  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml   心想这简单,赶紧将3个xml说出来,并简单说了下里面都包括啥

3 正常的hadoop集群工作都会启动哪些进程?

当时回答是:namenode,datanode ,secondarynode ,

4.他们的作用分别是什么?

  • nameNode   主节点 负责维护整个Hdfs文件系统的目录树,以及每个文件所对应的block块信息(元数据)
  • DataNode  从节点  负责存储具体的文件数据,并且每个block可以在多个datanode上存储多个副本
  • secondary  nameNode  相当于一个备用的naneNode, 当nameNode死机之后,可以将secondary nameNode
  • 的数据备份到nameNode上面 ,但不能备份完整数据,它有两大功能,1 镜像备份,2 日志与镜像定期合并

5 你能详细介绍一下secondaryNode 的具体作用吗?

当然可以,这个问题我可是仔细研究过,哈哈

  • secondary  nameNode会经常向namenode发送请求,是否满足check。
  • 当条件满足时,secondary  nameNode将进行checkPoint  。
  • 这时nameNode 滚动当前正在写的edits,将刚刚滚动掉的和之前edits文件进行合并。
  • secondary  nameNode下载edis文件,然后将edits文件和自身保存的fsimage文件在内存中进行合并,
  • 然后写入磁盘并上传新的fsimage到nameNode,这时nameNode将旧的fsimage用新的替换掉。

6  看来你掌握的还不错啊,HDFS的块默认是保存几份?一个块多大?

默认保存是3份,一个块是128M。

7 之前的64M 是从哪个版本变换的?

hadoop 1.0  默认是64M, hadoop 2.0 由64M 改为128M

8 那假设现在是128M,那我在工作中想把它调为256M,那我需要调整什么,才能改变块的大小?

主要是磁盘的存储决定 块的大小,块组成的文件的大小取决于磁盘的传输速率,调整磁盘,可以改变块的大小。

9 Hdfs的读写过程你了解吗? 简单讲讲?

那我就说说写过程吧,

  • 1、客户端跟nameNode 通信,请求上传文件,nameNode检查文件,父目录是否存在,并向客户端返回是否可以上传文件
  • 2、客户端请求第一个block块该上传到哪个datanode服务器上,nameNode查询从节点之后,返回对应的danaNode 服务器
  • A,B,C等。
  • 3、客户端请求nameNode服务器,采取就近原则,选择A服务器上传数据(本质上是个RPC调用,建立PipeLine),A收到
  • 请求后,A调B,B调C,将每个pipline建立连接,然后逐级返回给客户端
  • 4 客户端开始往A上传第一个block,以Package为单位,A收到一个Package,就会传给B,B传给C,A每传一个package就会
  • 放入一个应答队列,等待应答。
  • 5、当第一个block传输完成后,客户端再次请求namenode上传第二个block。

10 挺好,那你说一下MapReduce的工作原理?

  • 1、客户端启动一个job,然后向jobTracker请求一个jobID
  • 2、 然后将运行所需要的资源文件上传到HDFS上,包括Mapreduce程序打包的jar包,配置文件,以及计算的输入划分信息等
  • 3、 这些文件全部存储在JobTracker专门创建的jobID文件夹中(jar文件会有10个副本,输入划分信息对应着jobTracker应
  • 该启动多少个Map任务)
  • 4、JobTracker将这些资源文件放入作业队列中,调度器根据调度算法对作业文件进行调度,根据输入划分信息划分Map任务
  • 并将map任务分配给TaskTracker执行。
  • 5、taskTracker每隔一段时间发送给jobTracker一个心跳,告诉它自己的运行情况,这个心跳中包含map任务完成的进度等。
  • 6.当最后一个任务完成后,jobTracker会将该任务设为成功,返回给客户端。客户端得到结果,得知任务完成便显示
  • 消息给用户。

11 你在具体讲一下map中的一些步骤,例如partition,sort,combiner,shuffle等等。

好的,sort 主要是排序,combiner是合并,partition是分片等,

首先Mapper根据文件进行分区,sort将Mapper产生的结果按照key进行排序,combiner将key相同的记录进行

合并,partition是吧数据均衡的分配个Reducer. shuffle是Mapper将结果传给Reduce,在这期间容易发生数据倾斜等。

12 那这个数据倾斜一般是在Mapper端发生的还是Reduce中发生的?

Mapper将数据处理完传给Reduce,当Reduce进行处理时,因为一部分key的数据量过大,导致其他分区已经执行完成

而数据量过大的key执行时间过长,所以数据倾斜是发生在Reduce端的。

13,对,那发生数据倾斜是因为这个key分布不均匀,那你会怎么优化呢?

因为研究生期间研究的课题就是关于Spark的并行大数据清洗,所以对MapReduce和Spark发生数据倾斜的过程和解决方法

比较熟悉,

可以在Mapper期间将大数据量相同的key进行分散,通过添加N以内的随机数前缀,对数据较多的Key进行子扩展,

先进行局部操作,再去除随机数之后进行聚合操作,避免在进行Shuffle操作时出现数据倾斜问题。

14 那Mapper端进行combiner之后,除了速度会提升,那从Mapper端到Reduece端的数据量会怎么变?

数据量会减少,因为combiner之后,会将相同的key进行一次聚合,数据量会在这时候减少一部分

15 map 输出的数据如何超出他的那个小文件内存之后,那他是落地到磁盘还是落地到HDFS中?

落地到磁盘中,因为map,reduce操作,就是一次次的I/O请求

16  Map到Reduce默认的分区机制是什么?

这个是根据那个hash进行计算   对map中的key做hash,对reduce个数取模

17 hadoop的调优主要针对配置文件的调优你知道哪几种?

  • 思考了一下,
  • 1、因为Mapreduce运算时是在磁盘中进行的,所以 通过修改磁盘I/O,也就是设置和的预读缓冲区大小
  • 来提高hadoop里面大文件顺序读的性能。以此来提高I/O性能。
  • 2、通过修改三个配置文件的参数如 core-site.xml,mapred-site.xml,hdfs-site.xml等
  • 例如 修改core 文件里面的buffer.size,来修改读写缓冲区的大小,还有hdfs文件里面的block.size修改块的大小等
  • 都可以进行调优

18 好的,给你出个题,现在有1G的数据文件,里面有四个字段,分别是id,name,age,class,然后要按照class来分组,

id来排序,口述一下mapreduce的过程是怎么实现的?这里面会有几个map?

思考了一下,

  • 1、首先1G文件,那默认一个块是128M,所以可以分为8个块,对应的就是8个Mapper
  • 2、然后定义一个对象,将四个属性封装到对象中,实现序列化和反序列化
  • 3、定义一个类继承partitioner类,调用对象中的class属性设置分组,
  • 4  在map端对文件进行读取,然后通过Split来进行分割,调用对象的id作为key,然后进行局部sort排序,在combiner局部聚合
  • 后通过reduce来进行整体聚合。

说完之后感觉对着吧,果然,听见面试官说嗯嗯,好。觉得差不多对啦

19 嗯嗯,好,说说yarn吧,它有什么优势,能解决什么问题?

yarn集群主要分为主节点ResourceManage,从节点 NodeManage  ResourceManage负责资源的分配,将集群的资源分配给

各个应用使用,资源分配的基本单元是Container,NodeManage则是一个计算节点的管理者,负责启动应用的

所需的Conbiner,并对内部资源进行监控等。

yarn一般和mapreduce进行结合,主要是对mapreduce中的资源计算进行维护等。

答完之后,心想别问yarn吧,这块看得不是很深,哈哈,果然,面试官问了一个问题后就跳过了

20 说说Spark吧,Spark为啥比Mapreduce运行块,原因都有哪些?

1 spark是基于内存计算,mapreduce是基于磁盘运算,所以速度快

2 spark拥有高效的调度算法,是基于DAG,形成一系列的有向无环图

3 spark 是通过RDD算子来运算的,它拥有两种操作,一种转换操作,一种动作操作,可以将先运算的结果存储在

内存中,随后在计算出来

4 spark 还拥有容错机制Linage

21 什么是RDD?

RDD就是弹性分布式数据集,可以理解为一种数据结构,拥有多种不同的RDD算子

22 你都知道哪些RDD算子?

比如转换操作,有map().fliter() flatMap(),distinct()等  动作操作  有 collect ,reduce 等

23. 你知道reduceBykey 和groupBykey有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值