(每空2分)hadoop使用自己的序列化[1]格式为:______。•简答题,3分(17题),5分(5题)共75分1.(3分)简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。答:1使用root账户登录2修改IP3修改host主机名[2]4配置SSH免密码登录5关闭防火墙6安装JDK7解压hadoop安装包8配置hadoop的核心文件hadoop-env.sh,core-site.xml,mapred-site.xml,hdfs-site.xml9配置hadoop环境变量10格式化hadoop namenode -format11启动节点start-all.sh2.(3分)请列出正常的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用 分别都是什么,请尽量列的详细一些。答:namenode:管理集群,存储数据的原信息,并管理记录datanode中的文件信息。secondarynamenode:它是namenode的一个快照,会根据configuration中设置的值来 决定多少时间周期性的去cp一下namenode,记录namenode中的metadata及其它数据。Data node:存储数据ResourceManager:ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应 用程序(实际上是ApplicationManager)NodeManager:是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点(3分)请写出以下的shell命令(1)杀死一个job(2)删除hdfs上的/tmp/aaa目录(3)加入一个新的存储节点和删除一个节点需要执行的命令答:(1)map red job -list得到job的id,然后执行mapred job-kill jobld就可以杀死一个指 定jobId的job工作了。(2)hadoop fs -rmr /tmp/aaa或者hdfs dfs-rmr /tmp/aaa(3)增加一个新的节点在新的节点上执行hadoop-daemon.sh start datanode然后在主节点中执行hdfs dfsadmin -refreshNodes删除一个节点的时候,只需要在主节点执行hdfs dfsadmi n-refresh nodes3.(3分)请简述mapreduce中的combine和partition的作用答:combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的个数,减少reducer的输入,提高reducer的执行效率。Partition的主要作用就是指定输出到reduce的个数的。4.(3分)hdfs的体系结构答:HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若 干个DataNode组成的。其中NameNode作为主服务器,管理文件系统[3]的命名空间[4]和客户端 对文件的访问操作;集群中的DataNode管理存储的数据5.(3分)三个data node中当有一个data node出现错误时会怎样? 答:当有一个data node出现错误的时候,name node会将那个data node上的数据拷贝到其 他的节点去进行存储。6.(3分)文件大小[5]默认为64M,改为128M有什么影响?答:更改文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会增加name node的管理内存压力。7.(3分)NameNode与SecondaryNameNode的区别与联系?答:seco ndaryNameNode更像是Name node的一个冷备份[6], 当name node宕机之后,可以从9.(3分)参考下列M/R系统的场景:hdfs块大小为64MB,输入类为File In putFormat, 有3个文件的大小分别为64KB, 65MB, 127MB,Hadoop框架会把这些文件拆分为 多少块?答:64k>一个block65MB---->两个文件:64MB是一个block,1MB是一个block 127MB--->两个文件:64MB是一个block,63MB是一个block10.(5分)hadoop中RecordReader的作用是什么?答:RecorderReader是一个接口,主要是用来读取文件的输入键值对的,我们也可以自定义输入的key,value对的读取规则。属于split和map per之间的一个过程,将in putsplit输出的 行为一个转换记录,成为key-value的记录形式提供给mapper11.(3分)Map阶段结束后,Hadoop框架会处理:Partitioning, Shuffle和Sort,在这几 个阶段都发生了什么?答:Partition是对输出的key,value进行分区,可以自定义分区,按照业务需求,将map的 输出归分到多个不同的文件中将map的输出作为输入传给reducer称为shufflesort是排序的过程,将map的输出,作为reduce的输入之前,我们可以自定义排序,按照key来对map的输出进行排序12.(5分)如果没有定义partitioner,那数据在被送达reducer前是如何被分区的?答:Partiti on er是在map函数执行con text.write()时被调用。用户可以通过实现自定义的Partitioner来控制哪个key被分配给哪个Reducer。hadoop有一个默认的分区类,HashPartioer类,通过对输入的k2去hash值来确认map输出的k2,v2送到哪一个reduce中去执行。13.(3分)什么是combiner?答:comb in er就是规约[7]操作,通过对map输出的数量进行规约,可以减少reduce的数量, 提高执行效率。combiner的输入输出类型必须和mapper的输出以及reducer的输入类型一 致14.(3分)分别举例什么情况要使用combiner,什么情况不使用?答:求平均数的时候就不需要用combiner,因为不会减少reduce执行数量。在其他的时候,可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率15.(5分)简述Hadoop中replication(复本)放置策略?________Hadoop的默认布局策略是在运行客户端的节点上放第一个复本;第二个复本放在与第一个不同且随机另外选择的机架中的节点上(离架);第三个复本与第二个复本放在同一个机架上,且随机选择另一个节点。16.(5分)如何为一个hadoop任务设置mappers的数量?答:map的数量通常是由hadoop集群的DFS块大小确定的,也就是输入文件的总块数,正 常的map数量的并行规模大致是每一个Node是10~100个,对于CPU消耗较小的作业可以设置Map数量为300个左右,但是由于hadoop的没一个任务在初始化时需要一定的时间, 因此比较合理的情况是每个map执行的时间至少超过1分钟。具体的数据分片[8]是这样的,InputFormat在默认情况下会根据hadoop集群的DFS块大小进行分片,每一个分片会由一个map任务来进行处理,当然用户还是可以通过参数mapred.min.split.size参数在作业提交客户端进行自定义设置。还有一个重要参数就是mapred.map.tasks,这个参数设置的map数 量仅仅是一个提示,只有当InputFormat决定了map任务的个数比mapred.map.tasks值小时才起作用。同样,Map任务的个数也能通过 使用JobConf的conf.setNumMapTasks(int num)方法来手动地设置。这个方法能够用来增加map任务的个数,但是不能设定任务的个数小于Hadoop系统通过分割输入数据得到的值。当然为了提高集群的并发效率,可以设置一个 默认的map数量,当用户的map数量较小或者比本身自动分割的值还小时可以使用一个相 对交大的默认值,从而提高整体hadoop集群的效率。17.(3分)hdfs文件写入的流程?答:1)Client向NameNode发起文件写入的请求。2)NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。3)Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。.
(每空2分)hadoop使用自己的序列化[1]格式为:______。
•简答题,3分(17题),5分(5题)共75分
1.(3分)简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出
具体步骤,列出具体步骤更好。
答:
1使用root账户登录
2修改IP
3修改host主机名[2]
4配置SSH免密码登录
5关闭防火墙
6安装JDK
7解压hadoop安装包
8配置hadoop的核心文件hadoop-env.sh,core-site.xml,mapred-site.xml,hdfs-site.xml
9配置hadoop环境变量
10格式化hadoop namenode -format
11启动节点start-all.sh
2.(3分)请列出正常的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用 分别都是什么,请尽量列的详细一些。
答:
namenode:管理集群,存储数据的原信息,并管理记录datanode中的文件信息。secondarynamenode:它是namenode的一个快照,会根据configuration中设置的值来 决定多少时间周期性的去cp一下namenode,记录namenode中的metadata及其它数据。
Data node:存储数据
ResourceManager:ResourceManager负责集群中所有资源的统一管理和分配,它接收来
自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应 用程序(实际上是ApplicationManager)
NodeManager:是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点
(3分)请写出以下的shell命令
(1)杀死一个job
(2)删除hdfs上的/tmp/aaa目录
(3)加入一个新的存储节点和删除一个节点需要执行的命令
答:
(1)map red job -list得到job的id,然后执行mapred job-kill jobld就可以杀死一个指 定jobId的job工作了。
(2)hadoop fs -rmr /tmp/aaa或者hdfs dfs-rmr /tmp/aaa
(3)增加一个新的节点在新的节点上执行
hadoop-daemon.sh start datanode然后在主节点中执行hdfs dfsadmin -refreshNodes删除一个节点的时候,只需要在主节点执行hdfs dfsadmi n-refresh nodes
3.(3分)请简述mapreduce中的combine和partition的作用
答:
combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是
减少输出到reduce的个数,减少reducer的输入,提高reducer的执行效率。
Partition的主要作用就是指定输出到reduce的个数的。
4.(3分)hdfs的体系结构
答:
HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若 干个DataNode组成的。其中NameNode作为主服务器,管理文件系统[3]的命名空间[4]和客户端 对文件的访问操作;集群中的DataNode管理存储的数据
5.(3分)三个data node中当有一个data node出现错误时会怎样? 答:
当有一个data node出现错误的时候,name node会将那个data node上的数据拷贝到其 他的节点去进行存储。
6.(3分)文件大小[5]默认为64M,改为128M有什么影响?
答:
更改文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block
定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的
太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会
增加name node的管理内存压力。
7.(3分)NameNode与SecondaryNameNode的区别与联系?
答:
seco ndaryNameNode更像是Name node的一个冷备份[6], 当name node宕机之后,可以从
9.(3分)参考下列M/R系统的场景:hdfs块大小为64MB,输入类为File In putFormat, 有3个文件的大小分别为64KB, 65MB, 127MB,Hadoop框架会把这些文件拆分为 多少块?
答:
64k>一个block
65MB---->两个文件:64MB是一个block,1MB是一个block 127MB--->两个文件:64MB是一个block,63MB是一个block
10.(5分)hadoop中RecordReader的作用是什么?
答:
RecorderReader是一个接口,主要是用来读取文件的输入键值对的,我们也可以自定义
输入的key,value对的读取规则。属于split和map per之间的一个过程,将in putsplit输出的 行为一个转换记录,成为key-value的记录形式提供给mapper
11.(3分)Map阶段结束后,Hadoop框架会处理:Partitioning, Shuffle和Sort,在这几 个阶段都发生了什么?
答:
Partition是对输出的key,value进行分区,可以自定义分区,按照业务需求,将map的 输出归分到多个不同的文件中
将map的输出作为输入传给reducer称为shuffle
sort是排序的过程,将map的输出,作为reduce的输入之前,我们可以自定义排
序,按照key来对map的输出进行排序
12.(5分)如果没有定义partitioner,那数据在被送达reducer前是如何被分区的?
答:
Partiti on er是在map函数执行con text.write()时被调用。用户可以通过实现自定义的Partitioner来控制哪个key被分配给哪个Reducer。
hadoop有一个默认的分区类,HashPartioer类,通过对输入的k2去hash值来确认map输出的k2,v2送到哪一个reduce中去执行。
13.(3分)什么是combiner?
答:
comb in er就是规约[7]操作,通过对map输出的数量进行规约,可以减少reduce的数量, 提高执行效率。combiner的输入输出类型必须和mapper的输出以及reducer的输入类型一 致
14.(3分)分别举例什么情况要使用combiner,什么情况不使用?
答:
求平均数的时候就不需要用combiner,因为不会减少reduce执行数量。在其他的时候,
可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而
减轻reduce的压力,节省网络开销,提升执行效率
15.(5分)简述Hadoop中replication(复本)放置策略?
________
Hadoop的默认布局策略是在运行客户端的节点上放第一个复本;第二个复本放在与第
一个不同且随机另外选择的机架中的节点上(离架);第三个复本与第二个复本放在同一个
机架上,且随机选择另一个节点。
16.(5分)如何为一个hadoop任务设置mappers的数量?
答:
map的数量通常是由hadoop集群的DFS块大小确定的,也就是输入文件的总块数,正 常的map数量的并行规模大致是每一个Node是10~100个,对于CPU消耗较小的作业可以
设置Map数量为300个左右,但是由于hadoop的没一个任务在初始化时需要一定的时间, 因此比较合理的情况是每个map执行的时间至少超过1分钟。具体的数据分片[8]是这样的,
InputFormat在默认情况下会根据hadoop集群的DFS块大小进行分片,每一个分片会由一
个map任务来进行处理,当然用户还是可以通过参数mapred.min.split.size参数在作业提交
客户端进行自定义设置。还有一个重要参数就是mapred.map.tasks,这个参数设置的map数 量仅仅是一个提示,只有当InputFormat决定了map任务的个数比mapred.map.tasks值小
时才起作用。同样,Map任务的个数也能通过 使用JobConf的conf.setNumMapTasks(int num)方法来手动地设置。这个方法能够用来增加map任务的个数,但是不能设定任务的个数小
于Hadoop系统通过分割输入数据得到的值。当然为了提高集群的并发效率,可以设置一个 默认的map数量,当用户的map数量较小或者比本身自动分割的值还小时可以使用一个相 对交大的默认值,从而提高整体hadoop集群的效率。
17.(3分)hdfs文件写入的流程?
答:
1)Client向NameNode发起文件写入的请求。
2)NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。
3)Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。
.题目解答
答案
Writable 答:
.解析
本题主要考查Hadoop相关的基础知识,包括序列化格式、安装配置、集群进程、Shell命令、MapReduce组件作用、HDFS架构等内容。具体解析如下:
填空题:Hadoop使用自己的序列化格式
Hadoop默认使用Writable接口作为序列化格式,它是Hadoop自定义的高效序列化机制,用于在分布式环境中传输和存储数据。
简答题解析
- 安装配置Apache Hadoop:需完成环境准备(修改IP、主机名、SSH免密、关闭防火墙、安装JDK)、解压安装包、配置核心文件(
hadoop-env.sh、core-site.xml等)、设置环境变量、格式化NameNode、启动集群等步骤。 - Hadoop集群进程及作用:
- NameNode:管理元数据(命名空间、文件映射)和协调客户端访问。
- SecondaryNameNode:定期合并NameNode的编辑日志和镜像文件,减少NameNode重启时间(非热备份)。
- DataNode:存储实际数据块,汇报块状态给NameNode。
- ResourceManager:统一管理集群资源(内存、CPU),分配给应用程序。
- NodeManager:节点代理,管理单个节点的资源和任务执行。
- Shell命令:
- 杀死Job:
mapred job -kill <jobId>(需先通过mapred job -list获取JobID)。 - 删除HDFS目录:
hadoop fs -rmr /tmp/aaa或hdfs dfs -rmr /tmp/aaa。 - 新增/删除节点:新增节点执行
hadoop-daemon.sh start datanode,主节点执行hdfs dfsadmin -refreshNodes;删除节点类似,需先停止DataNode再刷新节点列表。
- 杀死Job:
- MapReduce中的Combiner和Partition:
- Combiner:Map阶段的局部Reduce,减少Map输出量,提升Reduce效率(仅适用于满足结合律和交换律的场景,如求和)。
- Partition:决定Map输出的key-value分配给哪个Reduce任务(默认
HashPartitioner基于key的哈希值分区)。
- HDFS体系结构:主从架构,由一个NameNode(管理元数据)和多个DataNode(存储数据)组成,支持高容错和大数据存储。
- DataNode故障处理:NameNode检测到DataNode故障后,会将故障节点上的数据块复制到其他节点,确保数据冗余。
- Block大小调整影响:Block过小时,大文件切分过多,上传慢;过大时,小文件占用Block资源,增加NameNode管理压力(需根据实际场景调整,如128M适合大文件场景)。
- NameNode与SecondaryNameNode区别:NameNode是主节点,管理元数据;SecondaryNameNode是辅助节点,定期合并编辑日志和镜像文件,非实时备份,无法替代NameNode(需配合Checkpoint机制)。
- 文件块拆分数量:HDFS块大小64MB时,64KB(1块)、65MB(2块:64MB+1MB)、127MB(2块:64MB+63MB),共5块。
- RecordReader作用:读取输入文件并转换为
key-value对供Mapper使用,负责拆分InputSplit为具体记录(可自定义实现)。 - Map阶段后处理:
- Partitioning:分区,决定数据发往哪个Reduce。
- Shuffle:将Map输出传输到Reduce节点。
- Sort:对Map输出按key排序(可选自定义排序)。
- 默认分区策略:未定义Partitioner时,使用
HashPartitioner,基于key的哈希值分配Reduce任务。 - Combiner定义:Map输出的局部聚合,减少Reduce输入量(输入输出类型需与Mapper和Reducer一致)。
- Combiner适用场景:适用于求和、最大值等满足结合律和交换律的操作;不适用于求平均(会影响结果准确性)。
- HDFS复本放置策略:
- 第一个复本:客户端所在节点(若客户端不在集群,则随机节点)。
- 第二个复本:与第一个复本不同机架的节点。
- 第三个复本:与第二个复本同机架的不同节点。
- 设置Mapper数量:默认由输入文件块数决定(每块一个Mapper),可通过
mapred.min.split.size调整块大小,或mapred.map.tasks设置提示值(仅当自动分片数较少时生效),也可通过JobConf.setNumMapTasks()手动设置(不能小于自动分片数)。 - HDFS文件写入流程:
- Client向NameNode请求写入权限,NameNode返回目标DataNode列表。
- Client将文件分块,按列表顺序写入DataNode(采用流水线复制:先写第一个DataNode,再复制到第二个、第三个)。
- DataNode完成写入后,向Client和NameNode汇报状态,Client确认后完成写入。