大数据开发面试题有哪些?大数据开发面试题总结及答案

TheDisguiser 2020-03-23 21:23:56 java常见问答 6570

大数据相信大家都不陌生,这是近几年出现的一个热门专业,每年毕业的实习生多不胜数,这里整理了一点关于大数据专业的一些面试题,希望对大家的面试有所帮助。

1. 简述对大数据组件的理解? 

答:

Yarn:大数据组件运行的job的管理器 

Spark:分布式的利用内存进行分布式运算的大数据组件 

Hbase:基于Hadoop的大数据常用数据库 

Hive:基于Hadoop的大数据数据仓库,操作和关系型数据库(MySQL)类似

2. 了解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.shstart。

3. 默认情况下,各个节点的负载不均衡(任务数目不同),有的节点很多任务在跑,有的没有任务,怎样让各个节点任务数目尽可能均衡呢?

答: 默认情况下,资源调度器处于批调度模式下,即一个心跳会尽可能多的分配任务,这样,优先发送心跳过来的节点将会把任务领光(前提:任务数目远小于集群可以同时运行的任务数量),为了避免该情况发生,可以按照以下说明配置参数:

如果采用的是fair scheduler,可在yarn-site.xml中,将参数yarn.scheduler.fair.max.assign设置为1(默认是-1)

如果采用的是capacity scheduler(默认调度器),则不能配置,目前该调度器不带负载均衡之类的功能。

当然,从hadoop集群利用率角度看,该问题不算问题,因为一般情况下,用户任务数目要远远大于集群的并发处理能力的,也就是说,通常情况下,集群时刻处于忙碌状态,没有节点一直空闲着。

4. 如何设置单个任务占用的内存量和CPU数目?

答:对于MapReduce而言,每个作业的任务资源量可通过以下参数设置:

mapreduce.map.memory.mb:物理内存量,默认是1024

mapreduce.map.cpu.vcores:CPU数目,默认是1

需要注意的是,默认情况,各个调度器只会对内存资源进行调度,不会考虑CPU资源,你需要在调度器配置文件中进行相关设置。

5. 我们使用的是Fairscheduler,配置了多个队列,当用户提交一个作业,指定的队列不存在时,Fair Scheduler会自动创建一个新队列而不是报错(比如报错:队列XXX不存在),如何避免这种情况发生?

答:在yarn-site.xml中设置yarn.scheduler.fair.allow-undeclared-pools,将它的值配置为false(默认是true)。

6.讲述一下hdfs上传文件的流程。

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

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

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

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

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

⑤dataNode 向 Client通信 表示已经传完 数据块 同时向NameNode报告

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

7.RDD中reduceBykey与groupByKey哪个性能好,为什么?

reduceByKey:reduceByKey会在结果发送至reducer之前会对每个mapper在本地进行merge,有点类似于在MapReduce中的combiner。这样做的好处在于,在map端进行一次reduce之后,数据量会大幅度减小,从而减小传输,保证reduce端能够更快的进行结果计算。

groupByKey:groupByKey会对每一个RDD中的value值进行聚合形成一个序列(Iterator),此操作发生在reduce端,所以势必会将所有的数据通过网络进行传输,造成不必要的浪费。同时如果数据量十分大,可能还会造成OutOfMemoryError。

通过以上对比可以发现在进行大量数据的reduce操作时候建议使用reduceByKey。不仅可以提高速度,还是可以防止使用groupByKey造成的内存溢出问题。

好了,以上就是关于大数据工程师的一些常见面试题及答案,更多相关内容请持续关注本站。