hadoop期末复习

这篇具有很好参考价值的文章主要介绍了hadoop期末复习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考:尚硅谷-B站-hadoop3.x教程

尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放_哔哩哔哩_bilibili

1.集群部署规划主要修改那几个配置文件?

  • core-site.xml: 主要配置Hadoop核心参数,如文件系统相关的配置。
  • hdfs-site.xml: 配置HDFS参数,包括块大小、副本数量等。
  • mapred-site.xml: 配置MapReduce参数,包括作业跟踪器、任务跟踪器等。
  • yarn-site.xml: 配置YARN参数,包括资源管理器、节点管理器等。

2.集群部署规划有哪些注意事项?

NameNode和SecondaryNameNode不要安装在同一台服务器。

ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

3.集群配置常见错误及解决方案有哪些?

1)防火墙没关闭、或者没有启动YARN

INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

2)主机名称配置错误

3)IP地址配置错误

4)ssh没有配置好

5)root用户和Hadoop(自己设置的账户)两个用户启动集群不统一

6)配置文件修改不细心

7)不识别主机名称

 4.集群的启动

(1)各个模块分开启动(配置ssh是前提)

确保在hadoop的安装路径下

格式化NameNode(首次启动):hdfs namenode -format

启动HDFS:sbin/start-dfs.sh

启动YARN:sbin/start-yarn.sh

(2)各个服务组件逐一启动/停止

分别启动/停止HDFS组件:hdfs --daemon start/stop namenode/datanode/secondarynamenode
启动/停止YARN:yarn --daemon start/stop  resourcemanager/nodemanager

(3) 用脚本启动

myhadoop.sh start/stop

5.HDFS的优缺点有哪些?

优点:

1)高容错性

数据自动保存多个副本。他通过增加副本的形式,提高容错性。

某个副本丢失以后,他可以自动恢复。

2)适合处理大数据

数据规模:你能处理数据规模达到GB、TB、甚至PB级别的数据。

文件规模:能够处理百万规模以上的文件规模,数量相当之大。

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

缺点:

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

比如不能毫秒级的存储数据。

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

存储大量小文件,会占用NameNode大量的内存来存储文件目录和块信息。由于NameNode的内存是有限的,这样是不可取的。

小文件存储的寻址时间会超过读取时间,违反HDFS的设计目标。

3)不支持并发写入、文件随机修改

一个文件只能有一个写,不允许多个线程同时写。

只支持数据append(追加),不支持文件的随机修改。

6.HDFS组成架构

NameNode (nn)就是Master,个主管、管理者:

(1)管理HDFS的名称空间;

(2)配置副本策略;

(3)管理数据块 (Block) 映射信息.;

(4)处理客户端读写请求。

DataNode:就是slave, NameNode下达命令,DataNode执行实际的操作:

(1)存储实际的数据块;

(2)执行数据块的读/写操作。

Client: 就是客户端:

(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block, 然后进行上传;

(2)与NameNode交互,获取文件的位置信息;

(3)与DataNode 交互,读取或者写入数据;

(4)client提供一些命令来管理HDFS,比如 NameNode格式化;

(5)Client可以通过一些命令来访问HDFS,比如对HDFS 增删查改操作。

Secondary NameNode: 并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务

(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送 给NameNode;

(2)在紧急情况下,可辅助恢复NameNode。

7. HDFS文件块大小怎么确定的?

取决与磁盘传输速率

通常默认块大小为128MB(2.x/3.x)或64MB(1.x),可以在hdfs-site.xml中的dfs.blocksize参数中进行配置

8.HDFS的Shell操作常用命令有哪些?

命令 作用

hadoop fs -ls

显示目录信息
hadoop fs -lsr 递归列出该目录及其子目录下的所有文件和目录的详细信息

hadoop fs -mkdir

创建文件夹
hadoop fs -moveFromLocal [本地路径] [剪切路径] 从本地剪切粘贴到HDFS

hadoop fs -copyFormLocal [本地路径] [拷贝路径]

hadoop fs -put [] []

从本地拷贝到HDFS

-put与-copyFromLocal等同

hadoop fs -appendToFile [文件路径] [追加文件路径] 追加一个文件到已经存在的文件末尾

hadoop fs - copyToLocal

hadoop fs -get [HDFS文件路径] [本地路径] 

从HDFS拷贝到本地
hadoop fs -cat 显示文件内容
hadoop fs -tail 显示文件末尾1KB数据
hadoop fs -cp 从HDFS一个路径拷贝到HDFS另一个路径
hadoop fs -mv 在HDFS中移动文件
hadoop fs -rm [-r] 删除文件或文件夹(文件夹不为空,要+r), r 是递归删除
hadoop fs -setrep [数字] [HDFS中文件路径] 设置HDFS中文件的副本数量

hadop fs -du 

显示相应目录下所有文件和目录的磁盘使用情况

-s 仅显示指定路径从磁盘使用情况

-h 是以人类可读的方式显示,单位不在仅仅是字节,也有KB,MB等

 9.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步)

10.网络拓扑-节点距离计算

节点距离:两个节点到达最近的共同祖先的距离总和。

同一机架上的节点共同祖先就是机架

同一集群不同机架上的节点的共同祖先就是集群

不同集群之间的节点共同祖先网络

(如下图,只要经过机架、集群、网络都要 +1)

hadoop期末复习,hadoop,大数据,分布式

11.副本存储节点选择

hadoop期末复习,hadoop,大数据,分布式

12.HDFS的读流程

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

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

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

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

hadoop期末复习,hadoop,大数据,分布式

13.NameNode中的元数据是存储在哪里的?

内存

14.Fsimage和Edits解析

Fsimage文件:

HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息。

Edits文件:

存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中。

15.如何保证DataNode节点数据完整性

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

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

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

(4)常见的校验算法crc(32),md5(128),sha1(160)

     (5)DataNode在其文件创建后周期验证CheckSum。

16.DataNode节点掉线时限

DataNode节点掉线时限(Dead Node Detection)是指系统检测到DataNode不再响应的时间阈值。

TimeOut假定为超长时间(默认为10分钟+30秒):

TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

默认dfs.namenode.heartbeat.recheck-interval为5分钟,dfs.heartbeat.interval默认为3秒

【注意】hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为。 

<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>

<property>
    <name>dfs.heartbeat.interval</name>
    <value>3</value>
</property>

17.MapReduce是什么?

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

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

18.MapReduce优缺点

优点:

(1)MapReduce易于编程

(2)良好的扩展性

(3)高容错性

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

缺点:

1)不擅长实时计算

2)不擅长流式计算

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

19.MapReduce核心思想 

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

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

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

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

20.一个完整的MapReduce程序在分布式运行时的进程 

(1)MrAppMaster:负责整个程序的过程调度及状态协调。

(2)MapTask:负责Map阶段的整个数据处理流程。

(3)ReduceTask:负责Reduce阶段的整个数据处理流程。

 21.用户编写的程序分成那几个部分

Mapper

Reducer

Driver 

【注】22~23具体可以参考此图: 

hadoop期末复习,hadoop,大数据,分布式

 22.wordcount案例Mapper类代码解析

Mapper阶段

(1)用户自定义的Mapper要继承自己的父类

(2)Mapper的输入数据是KV对的形式(KV类型可自定义)

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

(4)Mapper的输出数据是KV对的形式(KV类型可自定义)

(5)map()方法(MapTask进程)对每一个<K,V>调用一次

 23.wordcount案例Reducer类代码解析

Reduer阶段:

(1)用户自定义的Reduer要继承自己的父类

(2)Reduer的输入数据类型对应Mapper的输出数据类型,也是KV

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

(4)ReduceTask进程对每一组相同的k的<K,V>组调用依次reduce()方法

 24.Driver驱动类代码解析

Driver阶段:

 相当于YARN集群的客户段,用于提交我们整个程序的YARN集群,提交的是封装于MapReduce程序相关运行参数的job对象

25.序列化注意问题 

(1)必须实现Writable接口

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

(3)重写序列化方法

(4)重写反序列化方法

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

(6)要想把结果显示在文件中,需要重写toString(),可用"\t"分开,方便后续用

(7)如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序

26、Job的提交流程

(1)源码connect()函数功能是什么?

1.创建提交job的代理

2.判断是本地运行环境还是yarn集群运行环境

(2)集群模式或者本地模式分别要提交那些内容?

集群:Jar包、job.xml文件、job路径、.split切片信息

本地模式:job.xml文件、job路径、.split切片信息

27.Maptask的开启个数由谁决定? 

Maptask的开启个数有提交job时的切片数决定,每一个切片都会交给一个MapTask。

28.在运行MapReduce程序时,输入的文件格式包括那些?

基于行的日志文件、二进制格式文件、数据库表

29.默认是按什么样的模式进行切片的?是如何读取信息的?

TextInputFormat切片机制

按行读取信息

30.FileInputFormat切片流程是什么

hadoop期末复习,hadoop,大数据,分布式

31.FileInputFormat切片机制是什么?

(1)简单地按照文件的内容长度进行切片

(2)切片大小,默认等于Block大小

(3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

32.输入数据有两个文件:

 hadoop期末复习,hadoop,大数据,分布式

如何进行切片?

 hadoop期末复习,hadoop,大数据,分布式

33.源码中计算切片大小的公式理解? 

hadoop期末复习,hadoop,大数据,分布式

maxsize(切片最大值):参数如果调得比blockSize小,则会让切片变小,而且切片大小就等于配置的这个参数的值

minsize(切片最小值):参数调得比blockSize大,则可以让切片变得比blockSize大

【注】maxsize和minsize一般只改变一个

34. CombineTextInputFormat切片机制是什么

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

CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m

注意:虚拟存储切片最大值设置最好根据实际的小文件大小情况来设置具体的值。

切片机制:

1)虚拟存储过程

将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize值比较:

(a)如果不大于设置的最大值,逻辑上划分一个块(直接切块);

(b)如果输入文件大于设置的最大值且大于两倍,那么以最大值切割一块;当剩余数据大小超过设置的最大值且不大于最大值2倍,此时将文件均分成2个虚拟存储块(防止出现太小切片)。(先按最大值凑满,剩下的不足凑成两块的时候均分

2)切片过程

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

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

35.如下几个文件如何切片?

hadoop期末复习,hadoop,大数据,分布式

36.MapReduce的工作流程?

 hadoop期末复习,hadoop,大数据,分布式hadoop期末复习,hadoop,大数据,分布式

37.Shuffle位于MapReduce流程中的哪个阶段?

Map方法之后,Reduce方法之前

shuffle过程:

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

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

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

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

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

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

(7)合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程(从文件中取出一个一个的键值对Group,调用用户自定义的reduce()方法)

注意

(1)Shuffle中的缓冲区大小会影响到MapReduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。

(2)缓冲区的大小可以通过参数调整,参数:mapreduce.task.io.sort.mb默认100M。

38.MapReduce的工作流程中出现了几次排序,分别在哪个阶段,采用的是什么类型的排序方法,并说明原因?​​​​​​​

3次排序

第一次:Map阶段环形缓冲区溢写前先按照分区编号Partition进行快速排序,然后按照key进行快速排序(升序)。
数据是乱序,数据以分区为单位聚集在一起,且同一分区内所有数据按照key有序,方便后续的排序

第二次:Map的Merge阶段对溢写的文件(key)进行归并排序(升序)
对第一次排序后的部分有序的数据进行高效排序与合并,最终得到一个大文件

第三次:Reduce的Sort阶段对key进行归并排序
由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可

39.Shuffle阶段缓冲区的大小默认是多少?

100MB

40.Shuffle阶段缓冲区的使用率一般达到多少比例后进行反向溢写?

80%

 41.缓冲区主要存储哪些数据?

<k,v>数据和对应的数据索引头

42.在溢写之前,需要进行排序,对什么进行排序,按照什么顺序进行排序? 

对key(键)进行排序,字典顺序排序,排序方法是快速排序

43. ReduceTask的数量大于分区数量,会出现什么样的结果?

程序会正常运行,会产生空结果

44.ReduceTask的数量大于1,但小于分区数量,会出现什么样的结果?

会报错

45.当ReduceTask的数量等于1时,分区文件不小于1时,会出现什么样的结果?

会正常运行,但只会生成一个文件

分区文件相当于就是预设的结果,reduce task 就是要运行任务,要么任务数大于结果数,要么任务数等于一

46.Partitioner<k,v>的类型与mapper的输入<k,v>还是输出<k,v>的类型相同?

mapper输出<k,v>类型相同

在 MapReduce 中,Partitioner 用于将 Mapper 输出的键值对按照键(Key)进行分区,以便后续的 Shuffle 和 Reduce 操作。Partitioner 的泛型类型 <K, V> 分别表示键和值的类型,而 Mapper 的输出键值对类型也是 <K, V>。

47.分区是在MapReduce框架中哪一个阶段进行的?

Shuffle阶段

48.默认分区是如何分配的?

hadoop期末复习,hadoop,大数据,分布式

49.自定义分区步骤是什么?

hadoop期末复习,hadoop,大数据,分布式

50.ReduceTask的数量在哪里设置,与分区的关系是什么?ReduceTask的数量小于分区数量且大于1会产生什么样的后果?

在Driver的job类的job.setNumReduceTasks(Num)

分区的数量决定了ReduceTask的数量

会有一部分数据无处安放,会Exception

51.以自定义分区为案例,解释面向对象编程中的多态

Partitioner 是一个抽象类,定义了在MapReduce中用于数据分区的方法。ProvincePartitioner
类覆写了这个方法,提供了根据手机号前三位进行分区的具体逻辑。这体现了多态,
因为ProvincePartitioner 类被当做 Partitioner 类型使用,而它的具体实现取决于它的子类。

Partitioner<Text, FlowBean> 中的泛型 <Text, FlowBean> 指定了 Partitioner 
类的类型参数。这使得 Partitioner 类能够处理键类型为 Text、值类型为 FlowBean 的数据,体现了多态.

52.MapTask和ReduceTask的数据排序是以什么标准来排的?

MapTask和ReduceTask会对数据按照key进行排序

53.对于MapTask,它会将处理的结果暂时放到哪里的?

环形缓冲区

 处理的结果暂时放到环形缓冲区中,当环形缓冲区使⽤率达到⼀定阈值后,再对缓冲区中的数据进行⼀次快速排序,并将这些有序数据溢写到磁盘上。

54.MapReduce框架中的快速排序最先在那个时候进行排序?排序是在哪里进行的?

Map环形缓冲区溢写之前

内存

55. 什么时候进行归并排序?

溢写完毕后,它会对磁盘上所有文件进行归并排序

当所有数据拷贝完毕后,Reduce Task统一对内存和磁盘上的所有数据进行一次归并排序

56.默认排序是按照什么标准进行排序的?

默认排序是按照字典顺序排序,且实现该排序的方法是快速排序。

57.如何实现自定义排序?

bean对象做为key传输,需要实现WritableComparable接口重写compareTo方法,就可以实现排序。

58.排序的类型有哪些,分别对应什么样的应用场景? 

hadoop期末复习,hadoop,大数据,分布式

59.Combiner的应用场景是什么?在那个阶段可以Combiner?如何进行自定义的Combiner

应用场景:
    Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量,Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟Reducer的输入kv类型要对应起来。

阶段:
    shuffle阶段中的溢出和和溢出后归并排序后可以Combiner

如何自定义:
    (a)自定义一个Combiner继承Reducer,重写reduce方法
    (b)在Job驱动类中设置:  
        job.setCombinerClass(XXXCombiner.class);

60.OutputFormat什么时候进行?有哪些应用场景?如何自定义OutputFormat数据输出?

在Reduce环节的最后末尾,写出数据之前。

应用场景:
    输出数据到MySQL/HBase/Elasticseach等存储框架中。

如何:
    自定义一个类继承FileOutputFormat
    改写RecordWriter,具体改写输出数据的方法write().

设置job: job.setOutputFormatClass(XXXOutputFormat.class);

61.Yarn基础架构的由那几个模块组成,功能是什么?

ResourceManager、NodeManager、ApplicationMaster和Container

hadoop期末复习,hadoop,大数据,分布式

62.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)MRAppmasterRM 申请运行MapTask资源。

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

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

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

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

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

hadoop期末复习,hadoop,大数据,分布式

63.对作业提交全过程详细解释?

1)作业提交
第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
第2步:Client向RM申请一个作业id。
第3步:RM给Client返回该job资源的提交路径和作业id。
第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
第5步:Client提交完资源后,向RM申请运行MrAppMaster。
(2)作业初始化
第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
第7步:某一个空闲的NM领取到该Job。
第8步:该NM创建Container,并产生MRAppmaster。
第9步:下载Client提交的资源到本地。
(3)任务分配
第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(4)任务运行
第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
第14步:ReduceTask向MapTask获取相应分区的数据。
第15步:程序运行完毕后,MR会向RM申请注销自己。
(5)进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。
(6)作业完成
除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

yarn: 

hadoop期末复习,hadoop,大数据,分布式

HDFS and MapReduce: 

hadoop期末复习,hadoop,大数据,分布式

64.Yarn调度器有哪些?对应的调度算法是什么?

FIFO调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。
    

容量调度器(Capacity Scheduler):
    多级队列,将集群的资源划分为多个队列,每个队列可以设置一定的容量。每个队列内使用FIFO调度算法。

公平调度器(Fair Scheduler): 
    公平分享资源,允许多个作业共享集群资源,尽量保证每个作业获得相等的资源份额。

65.Apache Hadoop3.1.3和CDH默认的资源调度器是什么?

Apache Hadoop3.1.3默认的资源调度器是容量调度器Capacity Scheduler
CDH框架默认调度器是公平调度器Fair Scheduler。

66.公平调度器和容量调度器之间的相同点和不同点?

相同点

(1) 多队列: 支持多队列多作业
(2)容量保证:管理员可为每个队列设置资源最低保证和资源使用上线
(3)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
(4)多租户:支持多用户共享集群和多应用程序同时运行,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。

不同点

(1)核心调度策略不同
容量调度器:优先选择资源利用率低的队列
公平调度器:优先选择对资源的缺额比例大的

(2)每个队列可以单独设置资源分配方式
    容量调度器: FIFO、DRF
    公平调度器: FIFO、FAIR、DRF

67、Yarn的常用命令有哪些?

列出所有
    Application: yarn application -list

根据Application状态过滤:
    yarn application -list -appStates 

Kill掉Application:
    yarn application -kill application_1612577921195_0001

查询Application日志:
    yarn logs -applicationId <ApplicationId>

查询Container日志:
    yarn logs -applicationId <ApplicationId> -containerId <ContainerId>

列出所有Application尝试的列表:
    yarn applicationattempt -list <ApplicationId>

打印ApplicationAttemp状态:
    yarn applicationattempt -status <ApplicationAttemptId>

列出所有Container:
    yarn container -list <ApplicationAttemptId>

打印Container状态:
    yarn container -status <ContainerId>

列出所有节点:
    yarn node -list -all

加载队列配置:
    yarn rmadmin -refreshQueues

打印队列信息:
    yarn queue -status <QueueName>

68、Yarn生产环境核心参数如何配置

hadoop期末复习,hadoop,大数据,分布式

69、Yarn核心参数配置案例实操

1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。

2)需求分析:

1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster

平均每个节点运行10个 / 3台 ≈ 3个任务(4 3 3)

3)修改yarn-site.xml配置参数如下:

<!-- 选择调度器,默认容量 -->
<property>
	<description>The class to use as the resource scheduler.</description>
	<name>yarn.resourcemanager.scheduler.class</name>
	<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

<!-- ResourceManager处理调度器请求的线程数量,默认50;如果提交的任务数大于50,可以增加该值,但是不能超过3台 * 4线程 = 12线程(去除其他应用程序实际不能超过8) -->
<property>
	<description>Number of threads to handle scheduler interface.</description>
	<name>yarn.resourcemanager.scheduler.client.thread-count</name>
	<value>8</value>
</property>

<!-- 是否让yarn自动检测硬件进行配置,默认是false,如果该节点有很多其他应用程序,建议手动配置。如果该节点没有其他应用程序,可以采用自动 -->
<property>
	<description>Enable auto-detection of node capabilities such as
	memory and CPU.
	</description>
	<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
	<value>false</value>
</property>

<!-- 是否将虚拟核数当作CPU核数,默认是false,采用物理CPU核数 -->
<property>
	<description>Flag to determine if logical processors(such as
	hyperthreads) should be counted as cores. Only applicable on Linux
	when yarn.nodemanager.resource.cpu-vcores is set to -1 and
	yarn.nodemanager.resource.detect-hardware-capabilities is true.
	</description>
	<name>yarn.nodemanager.resource.count-logical-processors-as-cores</name>
	<value>false</value>
</property>

<!-- 虚拟核数和物理核数乘数,默认是1.0 -->
<property>
	<description>Multiplier to determine how to convert phyiscal cores to
	vcores. This value is used if yarn.nodemanager.resource.cpu-vcores
	is set to -1(which implies auto-calculate vcores) and
	yarn.nodemanager.resource.detect-hardware-capabilities is set to true. The	number of vcores will be calculated as	number of CPUs * multiplier.
	</description>
	<name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
	<value>1.0</value>
</property>

<!-- NodeManager使用内存数,默认8G,修改为4G内存 -->
<property>
	<description>Amount of physical memory, in MB, that can be allocated 
	for containers. If set to -1 and
	yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
	automatically calculated(in case of Windows and Linux).
	In other cases, the default is 8192MB.
	</description>
	<name>yarn.nodemanager.resource.memory-mb</name>
	<value>4096</value>
</property>

<!-- nodemanager的CPU核数,不按照硬件环境自动设定时默认是8个,修改为4个 -->
<property>
	<description>Number of vcores that can be allocated
	for containers. This is used by the RM scheduler when allocating
	resources for containers. This is not used to limit the number of
	CPUs used by YARN containers. If it is set to -1 and
	yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
	automatically determined from the hardware in case of Windows and Linux.
	In other cases, number of vcores is 8 by default.</description>
	<name>yarn.nodemanager.resource.cpu-vcores</name>
	<value>4</value>
</property>

<!-- 容器最小内存,默认1G -->
<property>
	<description>The minimum allocation for every container request at the RM	in MBs. Memory requests lower than this will be set to the value of this	property. Additionally, a node manager that is configured to have less memory	than this value will be shut down by the resource manager.
	</description>
	<name>yarn.scheduler.minimum-allocation-mb</name>
	<value>1024</value>
</property>

<!-- 容器最大内存,默认8G,修改为2G -->
<property>
	<description>The maximum allocation for every container request at the RM	in MBs. Memory requests higher than this will throw an	InvalidResourceRequestException.
	</description>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>2048</value>
</property>

<!-- 容器最小CPU核数,默认1个 -->
<property>
	<description>The minimum allocation for every container request at the RM	in terms of virtual CPU cores. Requests lower than this will be set to the	value of this property. Additionally, a node manager that is configured to	have fewer virtual cores than this value will be shut down by the resource	manager.
	</description>
	<name>yarn.scheduler.minimum-allocation-vcores</name>
	<value>1</value>
</property>

<!-- 容器最大CPU核数,默认4个,修改为2个 -->
<property>
	<description>The maximum allocation for every container request at the RM	in terms of virtual CPU cores. Requests higher than this will throw an
	InvalidResourceRequestException.</description>
	<name>yarn.scheduler.maximum-allocation-vcores</name>
	<value>2</value>
</property>

<!-- 虚拟内存检查,默认打开,修改为关闭 -->
<property>
	<description>Whether virtual memory limits will be enforced for
	containers.</description>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>

<!-- 虚拟内存和物理内存设置比例,默认2.1 -->
<property>
	<description>Ratio between virtual memory to physical memory when	setting memory limits for containers. Container allocations are	expressed in terms of physical memory, and virtual memory usage	is allowed to exceed this allocation by this ratio.
	</description>
	<name>yarn.nodemanager.vmem-pmem-ratio</name>
	<value>2.1</value>
</property>

4)分发配置

5)重启集群(确保在安装hadoop的路径下)

$ sbin/stop-yarn.sh
$ sbin/start-yarn.sh

6)执行WordCount程序

$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

7)观察Yarn任务执行页面

http://hadoopXXX:8088/cluster/apps

70、在生产环境怎么容量调度器如何创建队列?公平调度器如何创建队列?

生产环境下怎么创建队列

(1)调度器默认就1个default队列,不能满足生产要求。

(2)按照框架:hive /spark/ flink 每个框架的任务放入指定的队列(企业用的不是特别多)

(3)按照业务模块:登录注册、购物车、下单、业务部门1、业务部门2

配置多队列的容量调度器

(1)配置capacity-scheduler.xml
(2)分发配置文件
(3)重启Yarn或者执行yarn rmadmin -refreshQueues刷新队列,就可以看到两条队列
(4)提交任务方式:

    向Hive队列提交任务
        [hadoop@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -D mapreduce.job.queuename=hive /input /output
    注: -D表示运行时改变参数值

    Driver中声明:
        conf.set("mapreduce.job.queuename","hive");

配置多队列的公平调度器

(1)配置yarn-site.xml
(2)配置fair-scheduler.xml
(3)分发配置并重启Yarn
(4)测试提交任务:

    提交任务时指定队列
        [hadoop@hadoop101 hadoop-3.1.3]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi -Dmapreduce.job.queuename=root.test 1 1

    提交任务时不指定队列
        [hadoop@hadoop101 hadoop-3.1.3]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 1 1

71、如何实现Tool接口,进而实现命令行动态传参?

(1)新建Maven项目YarnDemo.pom
(2)新建com.atguigu.yarn包名
(3)创建类WordCount并实现Tool接口
(4)新建WordCountDriver
(5)在HDFS上准备输入文件,假设为/input目录,向集群提交该Jar包
    yarn jar YarnDemo.jar com.atguigu.yarn.WordCountDriver wordcount /input /output文章来源地址https://www.toymoban.com/news/detail-763264.html

到了这里,关于hadoop期末复习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据--分布式存储 Hadoop

    Hadoop指Apache这款开源框架,它的核心组件有: HDFS(分布式文件系统):解决海量数据存储 MAPREDUCE(分布式运算编程框架):解决海量数据计算 YARN(作业调度和集群资源管理的框架):解决资源任务调度 目前主流的hadoop框架已经迭代更新到hadoop3.x的版本了,本篇的介绍也是

    2024年01月17日
    浏览(40)
  • 大数据之Hadoop分布式数据仓库HBase

    HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统。 要想明白为什么产生 HBase,就需要先了解一下 Hadoop 存在的限制?Hadoop 可以通过 HDFS 来存储结构化、半结构甚至非结构化的数据,它是传统数据库的补充,是海量数据存储的最佳方法,它针对大文件的存储,

    2024年02月02日
    浏览(45)
  • (大数据开发随笔9)Hadoop 3.3.x分布式环境部署——全分布式模式

    分布式文件系统中,HDFS相关的守护进程也分布在不同的机器上,如: NameNode守护进程,尽可能单独部署在一台硬件性能较好的机器中 其他的每台机器上都会部署一个DataNode进程,一般的硬件环境即可 SecondaryNameNode守护进程最好不要和NameNode在同一台机器上 守护进程布局 Name

    2023年04月16日
    浏览(42)
  • 大数据学习02-Hadoop分布式集群部署

    操作系统:centos7 软件环境:jdk8、hadoop-2.8.5 1.下载VMware,建议支持正版 2.安装到Widows目录下任意位置即可,安装目录自定义。打开VMware,界面如下: 3.创建虚拟机 创建虚拟机—选择自定义 这一步按照默认的配置就好 选择系统,安装程序光盘映像文件iso,这里需要下载cenos镜像

    2024年02月16日
    浏览(51)
  • 大数据Hadoop完全分布式及心得体会

    Hadoop是一个 分布式系统 基础技术框架,利用hadoop,开发用户可以在不了解分布式底层细节的情况下,开发分布式程序,从而达到充分利用集群的威力高速运算和存储的目的;而在本学期中,我们的专业老师带我们学习了Hadoop框架中最 核心 的设计: MapReduce 和 HDFS 。 MapReduc

    2024年02月08日
    浏览(37)
  • 大数据 | 实验零:安装 Hadoop 伪分布式系统

    👀 前言 :本篇是个人配置环境的总结,基于指导书,补充了许多在配置过程中出现的问题的解决细节。希望能帮到你😄。 Vmware workstation pro 16 Ubuntu 20.04 JDK 1.8 Hadoop 3.2.2 下边资源是本篇博客会用到的相关文件 (建议直接下载,相关代码直接对应的下述文件, 下载完先不要动

    2023年04月17日
    浏览(36)
  • 《Hadoop大数据技术》实验报告(1)Hadoop的伪分布式安装和配置

    《Hadoop大数据技术》实验报告(1) 班级 学号 姓名 Hadoop的伪分布式安装和配置 一、实验目的 1、理解Hadoop伪分布式的安装过程; 2、学会JDK的安装和SSH免密码配置; 3、学会Hadoop的伪分布式安装和配置。 二、实验内容 在linux平台中安装Hadoop,包括JDK安装、SSH免密码配置和伪分

    2023年04月23日
    浏览(56)
  • 大数据内容分享(九):Hadoop-生产集群搭建(完全分布式)

    目录 Hadoop运行模式——完全分布式 1、准备3台虚拟机(关闭防火墙、配置静态IP 和 主机名称) 2、安装JDK 和 Hadoop 并配置JDK和Hadoop的环境变量 3、配置完全分布式集群 4、集群配置 1)集群部署规划 2)配置文件说明 3)配置集群 5、集群启动 与 测试 1)workers的配置 2)启动集

    2024年02月21日
    浏览(88)
  • 分布式计算 第五章 大数据多机计算:Hadoop

    5.2.1 从硬件思考大数据 从硬件角度看,一台或是几台机器似乎难以胜任大数据的存储和计算工作。 • 大量机器的集群构成数据中心 • 使用高速互联网络对大量机器进行连接以确保数据传递 • 综合考量数据中心的散热问题、能耗问题,以及各方面成本 • 集群中硬件发生故

    2024年02月05日
    浏览(45)
  • hadoop完全分布式集群搭建(超详细)-大数据集群搭建

    本次搭建完全分布式集群用到的环境有: jdk1.8.0 hadoop-2.7.7 本次搭建集群所需环境也给大家准备了,下载链接地址:https://share.weiyun.com/dk7WgaVk 密码:553ubk 本次完全分布式集群搭建需要提前建立好三台虚拟机,我分别把它们的主机名命名为:master,slave1,slave2 一.配置免密登陆 首先

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包