Hadoop相关知识点

24.hadoop创始人 道格卡丁  hadoop底层是由 java来完成

25.hadoop三大发型版本 Apache、Cloudera、Hortonworks

26.hadoop的四个优势(4高)

高可靠性,高扩展性,高效性,高容错性

27.hadoop1.x和2.x有什么区别

Hadoop 1.x 组成                               Hadoop 2.x 组成

MapReduce(计算+资源调度)       MapReduce 计算

     (耦合性大 )                                           Yarn     资源调度

HDFS(数据存储)                           HDFS(数据存储)

Common(辅助工具)                     Common

28.HDFS NN DN SN 每个角色有什么作用

NameNode         主管,管理者

DataNode            Slave,NameNode下达命令,DataNode执行实际的操作(数据存储)

Secondary NameNode      辅助NameNode,紧急情况下可辅助恢复NameNode

NameNode(nn):存储文件的元数 据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的                                                      DataNode等;

DataNode(dn):在本地文件系统存储文件块数据,以及数据块的校验;

Secondary NameNode(2nn):用来辅助namenode,并不是namenode的热备,主要工作完成Fsimage和edits用户编辑日志的合并工作;

29.YARN RM NM AM CN 每个具体作用

1)ResourceManager(RM)作用:

(1)处理客户端请求

(2)监控 NM         (NodeManager)

(3)启动或监控AM            (ApplicationMaster)

(4)资源的分配与调度

2)NodeManager(NM)主要作用如下

(1)管理单个节点上的资源

(2)处理来自RM的命令

(3)处理来自AM的命令

3)ApplicationMaster(AM)作用如下

(1)负责数据的切分

(2)为应用程序申请资源分配给内部的任务

(3)任务的监控与容错

4)Container

Container是Yarn中资源抽象,他封装了某个节点的多维度资源,如内存,cpu,磁盘,网络等

30.一个完整的hadoop集群启动会包含那些进程? hdfs(nn,2nn,dn) yarn(rm,nm)

31.如何搭建一个hadoop集群

创建三台服务器,修改ip,主机名,关闭防火墙,修改主机映射

安装hadoop,修改hadoop配置文件,分发配置文件。设置ssh免密钥登录

32.scp和rsync 区别

rsync 文件的复制速度要比 scp 快,rsync 只对差异文件做更新,scp 是把所有文件都复制过去了

33.集群启动命令 hdfs 单独启动 群起命令 yarn 单独启动 群起命令

hadoop-daemon.sh start namenode/datanode/secondarynamenode

sbin/start-dfs.sh

yarn-daemon.sh start nodemanager/resourcemanager

sbin/start-yarn.sh

34.HDFS的优缺点

HDFS优点  :

1.高容错性

2.适合处理大数据

3.可构建在廉价机器上,通过多副本机制,提高可靠性

HDFS缺点 :

1.不适合低延时数据访问

2.无法高效的对大量小文件进行存储

3.不支持并发写入,不支持文件随机修改,支持append追加

35.HDFS块大小默认128 为什么不能太大,不能太小 和什么有关系

HDFS文件块的大小是128MB,因为磁盘的传输效率是100MB/s,如果寻址时间为10ms,当寻址时间为传输时间%1的时候为最佳

HDFS的块不能太小,太小会增加寻址时间,太大会导致程序在处理数据时,会很慢。HDFS块的大小取决与磁盘传输速率

36.HDFS的shell命令有哪些  hadoop fs -ls

hadoop fs -mkdir /文件名             创建一个hadoop集群的目录

hadoop fs -test -e /文件名             查看文件是否存在

hadoop fs -test -z/文件名              检查文件是否0字节

hadoop fs -test -d/目录名             检查目录是否存在

hadoop fs -moveFromLocal 本地文件名 /要粘贴的位置        从本地剪切粘贴到HDFS(本地文件不存在)

hadoop fs -copyFromLocal  本地文件名/要复制的位置        或     -put                 从本地拷贝到HDFS   (本地文件存在)

hadoop fs -copyToLocal    或     -get                                                 从HDFS下载到本地

-getmerge         合并下载  从HDFS下载到本地  

hadoop fs -cp           从HDFS的一个路径拷贝到HDFS的另一个路径

-mv       移动文件或称重命名   把HDFS的一个目录下的文件移动到另一个文件下

hadoop fs -cat  /文件路径    或   -tail          查看文件结尾              

hadoop fs -appendToFile              把一个文件追加到另一个文件末尾

-chmod        修改文件权限   r=4 w=2 x=1

-rm  -r     删除文件或者文件夹

-du          显示文件大小

-setrep      设置副本数量

37.HDFS上传文件的流程(写数据流程)

1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

2)NameNode返回是否可以上传。

3)客户端请求第一个 Block上传到哪几个DataNode服务器上。

4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6)dn1、dn2、dn3逐级应答客户端。

7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

38.HDFS下载文件流程(读数据流程)

1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

39.HDFS的副本选择策略

第一个副本在Client所处的节点上,如果客户端在集群外,随机选一个

第二个副本和第一个副本位于相同机架,随机节点

第三个副本位于不同机架,随机节点

40.2NN和NN的工作机制

1. 第一阶段:NameNode启动

(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

(2)客户端对元数据进行增删改的请求。

(3)NameNode记录操作日志,更新滚动日志。

(4)NameNode在内存中对元数据进行增删改。

2. 第二阶段:Secondary NameNode工作

(1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。

(2)Secondary NameNode请求执行CheckPoint。

(3)NameNode滚动正在写的Edits日志。

(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件fsimage.chkpoint。

(7)拷贝fsimage.chkpoint到NameNode。

(8)NameNode将fsimage.chkpoint重新命名成fsimage。

41.什么是集群安全模式

1:NameNode启动时:在NameNode启动的时候,他会加载俩个文件,一个是FSimage,一个是Edits。这个俩个文件里面保存的是HDFS运行以来保存的全部元数据信息。在刚启动集群时,NameNode需要将历史的元数据加载到内存中,然后才可以继续工作。而这个时候集群是出于安全模式,用户对集群是出于只读模式。

2:DataNode启动时:DataNode中数据的块信息不是在NameNode中持久保存,而是在启动集群时,DataNode主动将数据的块信息同步到NameNode中,而执行这个同步的过程时,集群时处于安全模式的。

安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。系统在安全模式下,会检查数据块的完整性

当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束

————————————————

42.DN工作机制

1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

4)集群运行中可以安全加入和退出一些机器。

43.DataNode节点保证数据完整性的方法

1)当DataNode读取Block的时候,它会计算CheckSum。

2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。

3)Client读取其他DataNode上的Block。

4)DataNode在其文件创建后周期验证CheckSum

44.退役节点 白名单黑名单 注意事项

不允许白名单和黑名单中同时出现同一个主机名称(如果白名单和黑名单同时出现一个主机名,我们以黑名单为主)。

45.小文件弊端,如何解决小文件弊端==>HDFS为什么不适合处理小文件,如何解决小文件过多的场景

1:大量的小文件会耗尽NameNode中的大部分内存。存储小文件所需要的磁盘容量和数据块的大小无关

2:索引文件过大,使索引速度变慢,不符合hdfs设计目标

解决办法:1:使用Hadoop archive对大量小文件进行归档处理

 2:在上传多个小文件之前,提前对小文件进行合并

 3:可以使用combinertextinputformat对小文件进行处理

 4:可以使用自定义inputformat对小文件进行合并

 5:开启jvm重用

46.MapReduce优缺点

优点:                                                

1)mapreduce易于编程

2)良好的扩展性

3)高容错性

4)适合pb级以上海量数据的离线处理

缺点:

1)不擅长实时计算

2)不擅长流式计算

3)不擅长DAG(有向图)计算

47.MapReduce编程规范Mapper、Reducer和Driver。

1.Mapper 阶段

1.用户自定义的mapper类要继承自己的父类

2.Mapper的输入数据和输出数据是kv对的形式

3.Mapper中的业务逻辑写在map()方法中

MapReduce

1.用户自定义的Reduce要继承自己的父类

2.Reduce的输入数据类型是Mapper的输出数据类型

3.Reduce的业务逻辑写在reduce()方法中

Driver阶段

提交数据,提交的是封装了MapReduce程序相关运行参数的job对象

48.序列化和反序列化 hadoo序列化有什么优点

序列化就是把“内存中的对象”转成字节序列,以便于存储到磁盘(持久化)和网络传输

反序列化就是将收到的字节序列(或其他传输协议)或者磁盘的持久化数据转化成内存中的对象

序列化可以存储"活的"对象,可以将"活的"对象发送到远程计算机

hadoop序列化的优点:紧凑,快速,可扩展,互操作

49.自定义bean对象实现序列化接口步骤

(1)必须实现Writable接口

(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造

(3)重写序列化方法

(4)重写反序列化方法

(5)注意反序列化的顺序和序列化的顺序完全一致

50.MapTask并行度决定机制 数据块和数据切片

数据块:Block是HDFS物理上把数据分成一块一块。

数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。

51.切片机制 fileinputformat的切片机制什么

切片机制:针对每一个文件进行切片,而不是看作整体

切片大小默认等于块大小(128)

当文件<128的1.1时,仍看作一个切片

有多少个切片就启动多少map task

52.FileInputFormat实现类

TextInputFormat

NLineInputFormat

自定义的inputformat

KeyValueTextInputFormat

combinetextinputformat

53.CombinerTextInputFormat是如何工作?

用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。

a判断虚拟存储的文件大小是否大于setMaxInputSplitSize值,大于等于则单独形成一个切片。

(b)如果不大于则跟下一个虚拟存储文件进行合并,共同形成一个切片。

54.简述mr工作流程

1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中

2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件

3)多个溢出文件会被合并成大的溢出文件

4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序

5)ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据

6)ReduceTask会取到同一个分区的来自不同MapTask的结果文件,ReduceTask会将这些文件再进行合并(归并排序)

7)合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程

55.shuffer 具体有哪些操作 分区分组排序 环形缓冲区100 80%

key,value从map()方法输出,被outputcollector收集通过getpartitioner()方法获取分区号,在进入环形缓冲区。

默认情况下,环形缓冲区大小值为100MB。当map输入的数据进入环形缓冲区的量达到百分之80以上时,那么开始执行溢写

过程,溢写过程中如果有其他数据进入,那么由剩余的百分之20反向写入。溢写过程会根据key,value先进行分区,后进

行排序,最终maptask溢写文件经过归并排序后落入本地磁盘。

56.分区总结

1.如果ReduceTask的数量大于分区数量时,会多产生几个空文件

2.如果ReduceTask的数量大于1小于分区数量时,会有一部分数据无处安放,会报错

3.如果ReduceTask的数量等于1时,不管有多少个分区文件,都会交给这一个ReduceTask来处理,最终都只会产生一个文件

4.分区号必须从零开始,逐一累加

57.排序==> 全排序 分区排序(部分排序) 分组排序(辅助排序) 二次排序

1.partition部分排序(分区排序):MapReduce根据输入记录的键对数据集排序,保证输出的每个文件内部有序

2.全排序  :最终输出结果只有一个文件,且文件内部有序

3.GroupingComparator 分组 (辅助排序,分组排序):在Reduce端对Key进行分组

4.二次排序 : 在自定义排序过程中,如果判断条件有两个即为二次排序

58.Combiner 是什么  他有什么用 他和reduce有啥区别  combiner使用有什么注意事项

Combiner是MR程序中Mapper和Reducer之外的一种组件,Combiner组件的父类就是Reducer

Combiner的作用就是对每一个MapTask的输出进行局部汇总,以减小网络传输量

Combiner和Reducer的区别:

Combiner是在每一个MapTask所在的节点运行

Reducer是接收所有的MapTask的运行结果

Combiner能够应用的前提是不能影响最终的业务逻辑,Combiner的输出kv应该跟Reducer的输入kv对应起来

59.OutputFormat接口实现类

文本输出 TextOutputFormat

SequenceFileOutputFormat

自定义OutputFormat

60.为什么不适用rj,而是用mj

因为rj的合并操作是在Reduce阶段完成的,Reduce端处理压力太大,容易产生数据倾斜

61.常见的hadoop压缩方式有哪些 他们有什么优缺点

Gzip压缩  优点 压缩率高 速度快  缺点 不支持split   Hadoop自带

Bzip2压缩  优点 压缩率高    缺点 压缩速度慢   Hadoop自带    支持 split

Lzo压缩 优点  压缩速度快,合理压缩率 缺点 需要安装(大文件)不支持split

Snappy压缩  优点 压缩速度快,合理压缩率 缺点 (map到reduce大文件)需安装不支持split

62.YARN的工作机制

Yarn工作机制详解

(1)MR程序提交到客户端所在的节点。

(2)YarnRunner向ResourceManager申请一个Application。

(3)RM将该应用程序的资源路径返回给YarnRunner。

(4)该程序将运行所需资源提交到HDFS上。

(5)程序资源提交完毕后,申请运行mrAppMaster。

(6)RM将用户的请求初始化成一个Task。

(7)其中一个NodeManager领取到Task任务。

(8)该NodeManager创建容器Container,并产生MRAppmaster。

(9)Container从HDFS上拷贝资源到本地。

(10)MRAppmaster向RM 申请运行MapTask资源。

(11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。

                (13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。

(14)ReduceTask向MapTask获取相应分区的数据。

(15)程序运行完毕后,MR会向RM申请注销自己

63.资源调度器 默认的调度器

Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler容量调度器和Fair Scheduler公平调度器。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。

64.MapReduce 跑的慢的原因

计算机性能方面: CPU 内存 磁盘健康 网络

IO方面1:map和reduce数设置不合理

2.数据倾斜

3.小文件过多

4.spill次数过多

5.Map运行时间太长,reduce等待太久

6.Map和Reduce数设置不合理

7.大量不可分割的超大文件

8.merge次数过多

65.MR优化方法有哪些

数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数(具体优化方法)

数据输入:1.合并小文件 2.采用 CombineTextInputFormat来作为输入,解决输入端大量小文件场景

Map阶段:1.减少溢写(spill)次数 2.减少合并次数

Reducde:1.合理设置Map和Reduce数 2.设置Map,Reduce共存 3.规避使用Reduce 4.设置合理Reduce端的Buffer

IO传输:1.采用数据压缩的方式 2.使用SequenceFile二进制文件

数据倾斜问题:

1.抽样和范围分区2.自定义分区 3.Combine 4.采用Map Join 尽量避免Reduce join

常用的调优参数;资源和容器相关参数

27.hadoop的TextInputFormat作用是什么?如何自定义实现?

InputFormat会在map操作之前对数据进行两方面的预处理:

gitSplits,返回的是InputSplit数组,对数据进行split切片,每一个切片都需要一个map任务去处理。

getRecordReader,返回的是RecordReader对象,将每个切片中的数据转换为<k,v>对的格式传递给map。

常用的InputFormat是TextInputFormat,使用的是LineRecordReader对每个分片进行键值对的转换,以偏移量作为键,以内容作为值。自定义类实现InputFormat接口,重写createRecordReader和isSplitable方法,在createRecordReader中可以自定义分隔符。

28.HDFS 在读取文件的时候,如果其中一个块突然损坏了怎么办?

客户端读取完 DataNode 上的块之后会进行 checksum 验证,也就是把客户端读取到本地的块与 HDFS 上的原始块进行校验,如果发现校验结果不一致,客户端会通知NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读。

29..HDFS 在上传文件的时候,如果其中一个 DataNode 突然挂掉了怎么办

客户端上传文件时与 DataNode 建立 pipeline 管道,管道正向是客户端向DataNode 发送的数据包,管道反向是 DataNode 向客户端发送 ack 确认,也就是正确接收到数据包之后发送一个已确认接收到的应答,当 DataNode 突然挂掉了,客户端接收不到这个 DataNode 发送的 ack 确认

,客户端会通知 NameNode,NameNode 检查该块的副本与规定的不符, NameNode 会通知 DataNode 去复制副本,并将挂掉的 DataNode 作下线处理,不再让它参与文件上传与下载

30.Hadoop性能调优你知道哪些?

调优可以通过系统配置、程序编写和作业调度算法来进行。

调优的大头:

mapred.map.tasks、mapred.reduce.tasks设置mapreduce任务数(默认都是1)

mapred.tasktracker.map.tasks.maximum每台机器上的最大map任务数

mapred.tasktracker.reduce.tasks.maximum每台机器上最大的reduce任务数

mapred.reduce.slowstart.completed.maps配置reduce任务在map任务达到百分之几的时候开始进入。

mapred.compress.map.output,mapred.output.compress配置压缩项,消耗cpu提升网络和磁盘io

合理利用combiner

这几个参数要看实际节点的情况进行配置,reduce任务是在33%的时候完成copy,要在这之前完成map任务,(map可提前完成)。

31.一个 mr 作业跑的比较慢,如何来优化。至少给出 6 个方案。

mr跑的慢可能有很多原因,如:数据倾斜、map和reduce数设置不合理、reduce等待过久、小文件过多、spill 次数过多、 merge 次数过多等。

1.解决数据倾斜:数据倾斜可能是partition不合理,导致部分partition中的数据过多,部分过少。可通过分析数据,自定义分区器解决。

2.合理设置map和reduce数:两个都不能设置太少,也不能设置太多。太少,会导致task等待,延长处理时间;太多,会导致 map、 reduce 任务间竞争资源,造成处理超时等错误。

3.设置map、reduce共存:调整slowstart.completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少 reduce 的等待时间。

4.合并小文件:在执行mr任务前将小文件进行合并,大量的小文件会产生大量的map任务,增大map任务装载次数,而任务的装载比较耗时,从而导致 mr 运行较慢。

5.减少spill次数(环形缓冲区,调大环形缓冲区的内存,从而接收更多数据):通过调整io.sort.mb及sort.spill.percent参数值,增大触发spill的内存上限,减少spill 次数,从而减少磁盘 IO。

6.减少merge次数(mapreduce两端的合并文件的数目):通过调整io.sort.factor参数,增大merge的文件数目,减少merge的次数,从而缩短mr处理时间。

32.Hadoop会有哪些重大故障,如何应对?至少给出 5个。

1.namenode 单点故障:通过 zookeeper 搭建 HA 高可用,可自动切换 namenode。

2.ResourceManager单点故障:可通过配置YARN的HA,并在配置的namenode上手动启动ResourceManager作为Slave,在 Master 故障后,Slave 会自动切换为Master。

3.reduce阶段内存溢出:是由于单个reduce任务处理的数据量过多,通过增大reducetasks数目、优化partition 规则使数据分布均匀进行解决。

4.datanode内存溢出:是由于创建的线程过多,通过调整linux的maxuserprocesses参数,增大可用线程数进行解决。

5.集群间时间不同步导致运行异常:通过配置内网时间同步服务器进行解决。

33.你认为 hadoop 有哪些设计不合理的地方。

1.不支持文件的并发写入和对文件内容的随机修改。

2.不支持低延迟、高吞吐的数据访问。

3.存取大量小文件,会占用 namenode 大量内存,小文件的寻道时间超过读取时间。

4.hadoop 环境搭建比较复杂。

5.数据无法实时处理。

6.mapreduce 的 shuffle 阶段 IO 太多。

7.编写 mapreduce 难度较高,实现复杂逻辑时,代码量太大。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值