面试题集锦--HADOOP01

1. Hadoop面试 1. 简单描述一下HDFS的系统架构,怎么保证数据安全的? 1)、存储在HDFS系统上的文件,会分割成128M大小的block存储在不同的节点上,block的副本数默认3份,也可配置成更多份...

1. Hadoop面试

1. 简单描述一下HDFS的系统架构,怎么保证数据安全的?

1)、存储在HDFS系统上的文件,会分割成128M大小的block存储在不同的节点上,block的副本数默认3份,也可配置成更多份;

2)、第一个副本一般放置在与client(客户端)所在的同一节点上(若客户端无datanode,则随机放),第二个副本放置到与第一个副本同一机架的不同节点,第三个副本放到不同机架的datanode节点,当取用时遵循就近原则;

3)datanodeblock为单位,每3s报告心跳状态,做10min内不报告心跳状态则namenode认为block已死掉,namonode会把其上面的数据备份到其他一个datanode节点上,保证数据的副本数量;

4)datanode会默认每小时把自己节点上的所有块状态信息报告给namenode

5)、采用safemode模式:datanode会周期性的报告block信息。Namenode会计算block的损坏率,当阀值<0.999f时系统会进入安全模式,HDFS只读不写。 HDFS元数据采用secondaryname备份或者HA备份

 

 

2. 简要的描述一下,客户端怎么向HDFS中存数据和读数据的,可以举例说明。

attachments-2018-03-E5i1ovsa5aaf521272a07.png

写数据详细步骤:

 

1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在

2namenode返回是否可以上传

3client会先对文件进行切分,比如一个blok128m,文件有300m就会被切分成3个块,一个128M、一个128M、一个44M请求第一个 block该传输到哪些datanode服务器上

4namenode返回datanode的服务器

5client请求一台datanode上传数据(本质上是一个RPC调用,建立pipeline),第一个datanode收到请求会继续调用第二个datanode,然后第二个调用第三个datanode,将整个pipeline建立完成,逐级返回客户端

6client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(一个packet64kb),当然在写入的时候datanode会进行数据校验,它并不是通过一个packet进行一次校验而是以chunk为单位进行校验(512byte),第一台datanode收到一个packet就会传给第二台,第二台传给第三台;第一台每传一个packet会放入一个应答队列等待应答

7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器

 

 

读数据详细过程


1) namenode通信查询元数据(block所在的datanode节点),找到文件块所在的datanode服务器

2) 挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流

3) datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)

4) 客户端以packet为单位接收,先在本地缓存,然后写入目标文件,后面的block块就相当于是append到前面的block块最后合成最终需要的文件。

 

 

attachments-2018-03-6sysdoW85aaf51f2766b2.png

 

3. 在通过客户端向hdfs中写数据的时候,如果某一台机器宕机了,会怎么处理

 

 

4. 简单描述一下HIVE的功能?用hive创建表有几种方式?hive表有几种?

功能:

Hive提供了类SQL语法的功能,可通过它来检索Hadoop存储数据,查询操作是基于MapReduce来完成的

 

Hive创建表的三种方式:

创建内部表

创建外部表

创建静态分区表

 

 

5. 请列出你所知道的hadoopspark调度器,并简要说说期工作方式

Hadoop:FIFO、Capacity Scheduler和Fair Scheduler

1、先进先出调度器(FIFO)

 

  FIFO 是 Hadoop 中默认的调度器,也是一种批处理调度器。它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业。原理图如下所示。

 

attachments-2018-03-57K3lVe05aaf51dad74cd.png

  比如,一个 TaskTracker 正好有一个空闲的 slot,此时 FIFO 调度器的队列已经排好序,就选择排在最前面的任务 job1,job1 包含很多 map task和reduce task。假如空闲资源是 map slot,我们就选择 job1 中的 map task。假如 map task0 要处理的数据正好存储在该 TaskTracker 节点上,根据数据的本地性,调度器把 map task0 分配给该TaskTracker。FIFO 调度器整体就是这样一个过程。

 

2、 容量调度器(Capacity Scheduler)

 

支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。 原理图如下所示

attachments-2018-03-IHTx3eTq5aaf51ca090a8.png

  比如我们分为三个队列:queueA、queueB和queueC,每个队列的 job 按照到达时间排序。假如这里有 100 个slot,queueA 分配 20% 的资源,可配置最多运行 15 个task,queueB 分配 50% 的资源,可配置最多运行 25 个task,queueC 分配 30% 的资源,可配置最多运行 25 个task。这三个队列同时按照任务的先后顺序依次执行,比如,job11、job21和job31分别排在队列最前面,是最先运行,也是同时运行。

 

3、公平调度器(Fair Scheduler)

 

同计算能力调度器类似,支持多队列多用户,每个队列中的资源量可以配置,同一队列中的作业公平共享队列中所有资源。原理图如下所示

attachments-2018-03-VKtRSEJd5aaf51acf2736.png

比如有三个队列:queueA、queueB和queueC,每个队列中的 job 按照优先级分配资源,优先级越高分配的资源越多,但是每个 job 都会分配到资源以确保公平。在资源有限的情况下,每个 job 理想情况下获得的计算资源与实际获得的计算资源存在一种差距, 这个差距就叫做缺额。在同一个队列中,job的资源缺额越大,越先获得资源优先执行。作业是按照缺额的高低来先后执行的,而且可以看到上图有多个作业同时运行

 

Spark:FIFO、Fair

 

 

6. 描述hbase存储架构和读写过程

attachments-2018-03-9M7naCVV5aaf514fcfd28.png

HBase的架构图上可以看出,HBase中的存储包括HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFileHLog等

HBase中的每张表都通过行键按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过256M就要被分割成两个,这个过程由HRegionServer管理,而HRegion的分配由HMaster管理。


读数据流程:

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

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

3,找到这个region对应的regionserver

4,查找对应的region

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

 

写数据流程:

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,(这里同时进行版本的合并和数据删除。)

6,当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由Hmaster分配到相应的HRegionServer,实现负载均衡

 

 

7. 描述yarn的资源管理

ResourceManagerRM)和每个从属节点(NM)构成数据计算框架。 ResourceManager拥有在系统中的所有应用程序之间仲裁资源的最终权力。NodeManager是每个机器的架构代理,负责监视容器的资源使用情况(cpu,内存,磁盘,网络)并将其报告给ResourceManager / Scheduler

 

8. Hadoop优化有哪些方面

1)  从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。

 

2)  Hadoop参数进行调优。当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。

 

3从系统实现角度进行优化。这种优化难度是最大的,它是从hadoop实现机制角度,发现当前Hadoop设计和实现上的缺点,然后进行源码级地修改。该方法虽难度大,但往往效果明显。

 

 

9. HDFS和一般文件系统有何差别?哪些是HDFS能做但是一般文件系统做不了的?哪些是HDFS无法做到但是一般文件系统能做到的?原因是什么?

区别:HDFS是一个分布式的文件存储系统,其维护的目录树为抽象的,在本地磁盘并不存在,并且每个文件是有多个副本的,每台机器上有的只是文件的一部分数据。

 

多个文件副本;存储海量数据;文件的权限管理;

 

文件内容的修改,HDFS是不支持的,因为文件在HDFS是分块的,修改起来代价太高;

 

 

10. 大量数据求topN(写出mapreduce的实现思路)

这个模式同时使用了mapperreducermapper任务找出其本地的top K,然后所有独立的top K集合在reducer中做最后的top K运算。因为在mapper中输出的数据记录最多是K条,而K通常相对较小,所以我们只需要一个reducer来处理最后的运算。

 

11. 如何理解分布式服务?分布式服务需要有哪些功能组件?列举

通常调用都是一对一的,而分布式的调用是一对多的,就是被调用端提供了多个相同的服务,此谓分布式服务器。

分布式服务需要一个统一的协调服务器,能够对调用这提供实时的准确的元数据信息。

 

 

12. 有两个数据源,一个记录的是广告投放给用户的日志,一个记录用户访问日志,另外还有一个固定的用户基础表记录用户基本信息(比如学历,年龄等等)。现在要分析广告投放对与哪类用户更有效,请采用熟悉的技术描述解决思路。另外如果两个数据源都是实时数据源(比如来自kafka),他们数据在时间上相差5分钟,需要哪些调整来解决实时分析问题?

对广告投放日志进行分析,统计出广告投放在各类用户的投放数量分布,可选择将的用户基础表数据进行广播。

 

对这种有时间差的可以使用窗口函数操作,后者使用中间存储介质如Redis

 

 

13. 请列出正常工作的hadoop集群中hadoop都分别启动哪些进程,它们的作用分别是什么,尽可能写的全面些。

1) NameNode: HDFS的守护进程,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理

2) Secondary NameNode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。

3) DataNode:负责把HDFS数据块读写到本地的文件系统。

4) JobTracker:负责分配task,并监控所有运行的task

5) TaskTracker:负责执行具体的task,并与JobTracker进行交互。

 

14. 请列出常用的一些hadoop调度器,并简要说明其工作方法。

三种调度器有:默认调度器FIFO,计算能力调度器Capacity Scheduler,公平调度器Fair Scheduler

1) 默认调度器FIFO

hadoop中默认的调度器,采用先进先出的原则

2) 计算能力调度器Capacity Scheduler

选择占用资源小,优先级高的先执行

3) 公平调度器Fair Scheduler

同一队列中的作业公平共享队列中所有资源

 

15. Hadoopnamenode 宕机了该怎么解决?如果是一个datanode宕机了,该怎么恢复?

分情况说明。

Namenode宕机后,可从secondaryname恢复数据

设置checkpoint

 

datanode宕机了,可以直接重启

 

16. 线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hivelog表中,将每天产生的业务日志在压缩之后loadhivelog表时,最好使用的压缩算法是哪个,并说明其原因。

TextFile 默认格式,加载速度最快,可以采用Gzipbzip2等进行压缩,压缩后的文件无法split,即并行处理

SequenceFile 压缩率最低,查询速度一般,三种压缩格式NONERECORDBLOCK

RCfile 压缩率最高,查询速度最快,数据加载最慢,最好此种压缩。

 

17.当使用sqoop或者kettle导入线上业务库数据到hive数据仓库时,如果hive数据仓库中的表字段用\t分割,行用\n分割,在业务库中的字段宝行这两个字符时如何处理?

 

 

19. 请说明什么情况下使用combiner,什么情况下不会使用?

Combiner适用于对记录汇总的场景(如求和),但是,求平均数的场景就不能使用Combiner

 

20. HadoopjobTasks之间的区别是什么?

job是工作的入口,负责控制、追踪、管理任务,也是一个进程

    包含map taskreduce task

Tasksmapreduce里面的步骤,主要用于完成任务,也是线程

 

21. Hadoop中通过拆分任务到多个节点运行来实现并行计算,但某些节点运行较慢会拖慢整个任务的运行,hadoop次啊用何种机制面对这个情况?

答案:结果查看监控日志,得知产生这种现象的原因是数据倾斜问题

解决:

(1)调整拆分mapper的数量(partition数量)

(2)增加jvm

(3)适当地将reduce的数量变大

 

22. API中的什么特性带来可以使map reduce任务可以以不同语言(如perl,ruby,awk等)实现的灵活性?

用可执行文件作为MapperReducer,接受的都是标准输入,输出的都是标准输出

 

23.hadoop中定义的主要公用InputFormats中,哪一个是默认值A

A. TextInputFormatB.KeyValueInputFormatCSequenceFileInputFormat

 

24. 两个类TextInputFormat KeyValueInputFormat的区别是什么?

TextInputFormat读取文本文件中的所有行,提供了行的偏移作为Mapper的键,实际的行作为mapper的值。

KeyValueInputFormat读取文本文件,解析所有行到中,首个空格前的字符是mapperkey,行的其余部分则是mapper的值。

 

25. 在一个运行的hadoop任务中,什么是InputSplit?

当一个hadoop job 运行时,它将输入文件拆分成块,分配每个块给各个mapper处理。这称为Input Split

 

26. hadoop框架中文件拆分是怎么被调用的。

通过运行输入格式类中的getInputSplit()方法。

你可能感兴趣的文章

相关问题

3 条评论

请先 登录 后评论
不写代码的码农
majia

8 篇文章

作家榜 »

  1. majia 8 文章
  2. 刘娜娜 6 文章
  3. 在下选择隐性埋名 4 文章
  4. 上神白浅 3 文章
  5. 李家兴 2 文章
  6. 小马甲 2 文章
  7. 刘东鑫 1 文章
  8. 崔楷文 1 文章