大数据开发工程师面试题

一、选择题

1、哪个程序负责HDFS数据存储?

Datanode

2、HDFS中的block默认保存几份?

默认3份

3、哪个程序通常与NameNode在一个节点启动?

Jobtracker

4、HDFS默认Block Size是多少?

64MB

5、什么通常是集群的最主要瓶颈

磁盘IO

6、关于SecondaryNameNode?

它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间

7、什么可以作为集群的管理?

Puppet、Pdsh、Zookeeper

8、  Client端上传文件时候的流程

Client想NameNode发起文件写入的请求。NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode信息。Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。(NameNode->Client->分块->DataNode)  

9、Hadoop的核心配置是什么?

Hadoop的核心配置通过两个xml文件来完成:①hadoop-default.xml hadoop-site.xml。这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在了。

10、那当下如何配置?

Hadoop现在拥有3个配置文件,①core-site.xml hdfs-site.xml mapred-site.xml。这些文件都保存在conf/子目录下。

11、jps命令的用处?

这个命令可以检查Namenode、Datanode、Task Tracker、Job Tracker是否正常工作。

12、mapreduce的原理?        

Map阶段:

  • 分割:首先,输入数据集被分割称多个小块,每个小块都包含一部分数据记录。这些小块被称为分片或输入分片。
  • 映射:在这个阶段,MapReduce任务的用户指定一个映射函数(Map函数),该函数将输入数据集的每个记录转换为一组键-值对。这些键值对的生成时独立且并行进行的,每个Map任务对应一个输入分片,因此Map阶段具有高度的并行性。Map函数的输出键值对通常与问题的特性有关。
  • 分组与排序:生成的键值对将被分组,以便相同键的值能够被传递到同一个Reduce任务中,此外,这些键值对还会被按键进行排序,以便Reduce阶段更容易进行处理。

Reduce阶段:

  • 归约:在Reduce阶段,用户指定一个归约函数(reduce函数),该函数接收相同键的一组键值对,并将它们合并为一个或多个输出结果。每个Reduce任务处理一个唯一的键组,并且Reduce任务之间也可以并行运行。
  • 结果输出:最后,Reduce任务的输出结果被写入到持久化存储(如分布式文件系统)中,以供进一步分析和使用。

13、HDFS写流程

  • client链接namenode存数据
  • namenode记录一条数据位置信息(元数据),告诉client存哪儿。
  • client用hdfs的api将数据(默认是64M)存储到datanode上。
  • datanode将数据水平备份,并且备份完将反馈client。
  • client通知namenode存储块完毕。
  • namenode将元数据同步到内存中。
  • 另一块循环上面的过程。

   流程

  • client链接namenode,查看元数据,找到数据的存储位置。
  • client通过hdfs的api并发读取数据。
  • 关闭连接。

14、hadoop的Combiner的作用?

combiner是reduce的实现,在map端运行计算任务,减少map端的输出数据。

作用就是优化,但combiner 的使用场景是 mapreduce 的 map 和 reduce 输入输出一样。

15、简述hadoop安装

  • 创建hadoop账户
  • setup.改IP
  • 安装java,并修改/etc/profile文件,配置java的环境变量
  • 修改Host文件域名
  • 安装SSH,配置无密钥通信
  • 解压Hadoop
  • 配置conf文件下hadoop-env.sh、core-site.sh、mapred-site.sh、hdfs-site.sh
  • 配置hadoop的环境变量
  • Hadoop namenode-format
  • start-all

16、请列出hadoop进程名

  • namenode管理集群,并记录datanode文件信息
  • secondname:可以做冷备,对一定范围内数据做快照性备份
  • datanode:存储数据
  • Jobtracker:管理任务,并将任务分配给tasktracker
  • Tasktracker:任务执行方

17、写出下列命令

  • 杀死一个job
  • 删除hdfs上的/tmp/aaa
  • 加一个新的存储节点和删除一个计算节点需要的新集群状态命令
hadoop job -list #拿到job-id
hadoop job -kill job-id
Hadoop fs -rmr/tmp/aaa
#加新节点时:
Hadoop-daemon.sh start datanode
Hadoop-daemon.sh start tasktracker

#删除时
hadoop mradmin -refreshnodes
hadoop dfsadmin -refreshnodes

18、简述hadoop的调度器

  • FIFO schedular:默认,先进先出原则
  • Capacity schedular:计算能力调度器、选择占用最小、优先级高的先执行,依次类推。
  • Fair schedular:公平调度,所有的job具有相同的资源

19、 combiner 和 partition 的作用 

  • combiner是reduce的实现,在map端运行计算任务,减少Map端的输出数据。作用是优化,但ombiner的使用场景是map reduce的map输出结果和reduce输入输出一样。
  •   partition的默认实现是Hashpartition,是map端将数据按照reduce个数取余,进行分区,不同的reduce来copy自己的数据。partion的作用是将数据分到不同的reduce进行计算,加快计算效果。 

20、 hive内部表和外部表的区别

  • 内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除。
  • 外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表的结构

21、Hbase的rowkey怎么创建好?列族怎么创建比较好?

  • hbase存储时,数据按照row key的字典序(byte order)排序存储,设计key时,要充分排序
  • 存储这个特性,将经常一起读取的行存储放到一起,(位置相关性)一个列族在数据底层是一个文件,所以经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。

22、    用mapreduce怎么处理数据倾斜问题?

数据倾斜:map/reduce程序执行时,reduce节点大部分执行完毕,但是又一个或几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时时百倍或千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,称为数据倾斜。

解决:用hadoop程序进行数据关联时,常碰到数据倾斜的情况,这里提供一种解决方法:自己实现partition类,用key和value相加取hash值。 

 23、hadoop框架中如何优化

  • 从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。
  • 对hadoop参数进行调优,当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。
  • 从系统实现角度进行优化,这种优化难度是最大的,它是从hadoop实现机制角度,发现当前hadoop设计和实现上的缺点,然后进行源码级的修改。这方法虽然难度大,但往往效果明显。
  • linux内核参数调整

24、我们开发job时,是否可以去掉reduce阶段

可以,设置reduce数为0就好。

25、datanode在什么情况下不会备份

datanode在强制关闭或者非正常断电不会备份。

26、HDFS的体系结构

HDFS由namenode, secondraynamenode, datanode组成。为n+1模式。

  • namenode负责管理datanode和记录元数据
  • secondraynamenode负责合并日志
  • datanode负责存储数据

27、三个datanode中有一个datanode出现错误会怎么样?

这个datanode的数据会在其他的datanode上重新做备份。

28、描述一下hadoop中,有哪些地方使用了缓存机制,作用分别是什么?

在mapreduce提交job的获取id之后,会将所有文件存储到分布式缓存上,这样文件可以被所有的mapreduce共享。

29、如何确定Hadoop集群的健康状态

通过页面监控,脚本控制

30、生产环境中为什么建议使用外部表?

  • 因为外部表不会加载数据到hive,减少数据传输、数据还能共享
  • hive不会修改数据,所以无需担心数据的损坏
  • 删除表时,只删除表结构,无需删除表数据。

猜你喜欢

转载自blog.csdn.net/qq_43687860/article/details/133160096