java大数据开发面试题及答案解析

TheDisguiser 2020-07-06 16:57:11 java常见问答 6593

相信大家都知道大数据,大数据是如今最热门的技术之一,很多小伙伴可能没有了解大数据面试题一般会问哪些,这次就一起来了解下吧。

一、Hadoop组成有哪些?

1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。

2)Hadoop MapReduce:一个分布式的离线并行计算框架。

3)Hadoop YARN:作业调度与集群资源管理的框架。

4)Hadoop Common:支持其他模块的工具模块(Configuration、RPC、序列化机制、日志 操作)。

二.HDSF的读写流程

HDFS读数据:首先客户端会调用FileSystem API的open方法发送请求给NameNode,NameNode将相应的Block块信息返回给客户端,客户端通过FSDate InputStream的read方法并发的读每一个block中的数据,关闭输入流,客户端将读取的block中的数据统一成一个文件

HDFS写数据:

客户端调用FileStream 的create方法请求NameNode创建一个文件,包括文件大小,拥有者相关信息,然后根据文件大小进行文件的切分为多个block,将相关信息返回客户端,客户端通过FSData OutputStream的Write方法,首先把一个Block写到一个DataNode上,每个默认有三个副本,副本上的数据不是有客户端写,而是由DataNode创建新线程,按照副本存放规则存放(其实就是第一个Data会和其他两个副本建立pipline机制,不断地向下创建副本,每个副本还要想上一个node汇报复制情况,是否复制完成,如果出现问题,重新进行复制,并且也有一个ack机制,就是检测副本肤质情况,进行汇报)

三.HBase的读写流程

Hbase的写过程:

1,Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据

2,根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息

3,找到对应的regionserver

4,把数据分别写到HLog和MemStore上一份

4,MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以总HLog上恢复)

5,当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)

Hbase的读过程:

1,Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。

2,根据namespace、表名和rowkey在meta表中找到对应的region信息

3,找到这个region对应的regionserver

4,查找对应的region

5,先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。

四、MapReduce 定义是什么?

Mapreduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析 应用”的核心框架。

Mapreduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发运行在一个 hadoop 集群上。

五、简单讲解一下MapReduce 架构

MapReduce 将计算过程分为两个阶段:Map 和 Reduce

1)Map 阶段并行处理输入数据

2)Reduce 阶段对 Map 结果进行汇总

六、说说MapReduce 有哪些优缺点

优点

1)MapReduce 易于编程。它简单的实现一些接口,就可以完成一个分布式程序,这个 分布式程序可以分布到大量廉价的 PC 机器上运行。也就是说你写一个分布式程序,跟写一 个简单的串行程序是一模一样的。就是因为这个特点使得 MapReduce 编程变得非常流行。

2)良好的扩展性。当你的计算资源不能得到满足的时候,你可以通过简单的增加机器 来扩展它的计算能力。

3)高容错性。MapReduce 设计的初衷就是使程序能够部署在廉价的 PC 机器上,这就 要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一 个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由 Hadoop 内部完成的。

4)适合 PB 级以上海量数据的离线处理。这里加红字体离线处理,说明它适合离线处 理而不适合在线处理。比如像毫秒级别的返回一个结果,MapReduce 很难做到。

缺点

MapReduce 不擅长做实时计算、流式计算、DAG(有向图)计算。

1)实时计算。MapReduce 无法像 Mysql 一样,在毫秒或者秒级内返回结果。

2)流式计算。流式计算的输入数据是动态的,而 MapReduce 的输入数据集是静态的, 不能动态变化。这是因为 MapReduce 自身的设计特点决定了数据源必须是静态的。

3)DAG(有向图)计算。多个应用程序存在依赖关系,后一个应用程序的输入为前一 个的输出。在这种情况下,MapReduce 并不是不能做,而是使用后,每个 MapReduce 作业 的输出结果都会写入到磁盘,会造成大量的磁盘 IO,导致性能非常的低下。

七、MapReduce 核心思想是什么?

1)分布式的运算程序往往需要分成至少 2 个阶段。

2)第一个阶段的 maptask 并发实例,完全并行运行,互不相干。

3)第二个阶段的 reduce task 并发实例互不相干,但是他们的数据依赖于上一个阶段的所有 maptask 并发实例的输出。

4)MapReduce 编程模型只能包含一个 map 阶段和一个 reduce 阶段,如果用户的业务逻辑非 常复杂,那就只能多个 mapreduce 程序,串行运行。

以上就是关于大数据面试题的所以内容,相信现在你对大数据面试的把握又多了不少吧,更多java面试题相关内容快关注奇QQ工具网了解详情吧。

推荐阅读:

携程java面试题分享,后台开发面试题整理

腾讯一面面试题整理,java面试题目2020

华为java面试题整理,2020年华为java面