资源描述:
《Hadoop应用开发与案例实战课后习题参考答案1-10章全书章节练习题答案题库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
习题一、选择题1.下列有关Hadoop的说法正确的是(ABCD)。A.Hadoop最早起源于NutchB.Hadoop中HDFS的理念来源于谷歌发表的分布式文件系统(GFS)的论文C.Hadoop中MapReduce的思想来源于谷歌分布式计算框架MapReduce的论文D.Hadoop是在分布式服务器集群上存储海量数据并运行分布式分析应用的一个开源的软件框架2.使用Hadoop的原因是(ABCD)。A.方便:Hadoop运行在由一般商用机器构成的大型集群上或者云计算服务上B.稳健:Hadoop致力于在一般商用硬件上运行,其架构假设硬件会频繁失效,Hadoop可以从容地处理大多数此类故障C.可扩展:Hadoop通过增加集群节点,可以线性地扩展以处理更大的数据集D.简单:Hadoop允许用户快速编写高效的并行代码3.Hadoop的作者是(B)。A.MartinFowlerB.DougCuttingC.KentBeckD.GraceHopper4.以下关于大数据特点的描述中,不正确的是(ABC)。A.巨大的数据量B.多结构化数据C.增长速度快D.价值密度高
1二、简答题1.Hadoop是一个什么样的框架?答:Hadoop是一款由Apache基金会开发的可靠的、可伸缩的分布式计算的开源软件。它允许使用简单的编程模型在跨计算机集群中对大规模数据集进行分布式处理。2.Hadoop的核心组件有哪些?简单介绍每一个组件的作用。答:核心组件有HDFS、MapReduce、YARN。HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系统)是Hadoop的核心组件之一,作为最底层的分布式存储服务而存在。它是一个高度容错的系统,能检测和应对硬件故障,可在低成本的通用硬件上运行。MapReduce是Hadoop的一个分布式计算框架,也是一种大规模数据集并行运算的编程模型,主要用于处理海量数据的运算。MapReduce主要包括map(映射)和reduce(规约)两部分。它是一个分布式运算程序的编程框架,其核心功能是将用户编写的业务逻辑代码和自带的默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。HadoopYARN是开源Hadoop分布式处理框架中的资源管理和作业调度框架,主要负责将系统资源分配给在Hadoop集群中运行的各种应用程序,并调度在不同集群节点上执行的任务3.简述Hadoop生态体系,并列举此生态体系中涉及的技术。答:当今的Hadoop已经成长为一个庞大的生态体系,随着生态体系的成长,新出现的项目也越来越多,其中不乏一些非Apache主管的项目,这些项目对Hadoop做了更好的补充或者更高层的抽象,涉及的技术有HBase、Hive、Sqoop、Pig、Flume、Oozie、ZooKeeper、kafka、Spark等。
24.简单列举几个Hadoop的应用场景。答:(1)在线旅游(2)电子商务(3)移动数据(4)能源发现(5)节约能源(6)图像处理(7)医疗保健(8)IT安全(9)欺诈检测(10)基础设施管理习题一、填空题1.Hadoop集群中的节点DataNode负责HDFS的数据存储。2.Hadoop集群中的Jobtracker程序通常与NameNode在一个节点启动。3.Hadoop的运行模式有独立(本地)运行模式、伪分布式运行模式和完全分布式运行环境。4.Hadoop集群搭建中常用的4个配置文件有hadoop-env.sh、core-site,xml、
3mapred-site,.xml和yarn-site.xml。二、操作题1.根据2.2节伪分布式安装的安装及配置步骤,在自己计算机上搭建伪分布式Hadoop集群环境,环境搭建完毕后通过命令及Web访问方式查看集群的启动情况。答:具体步骤见章节内容。2.根据2.3节完全分布式安装的安装及配置步骤,根据自己计算机的实际配置情况分析是否可以搭建至少2台节点的完全分布式Hadoop集群环境,如果配置允许则搭建完全分布式集群环境,搭建完毕后通过命令或Web访问方式查看集群的启动信息。答:具体步骤见章节内容。习题一、填空题1.由于NameNode宕机,导致无法对外提供服务,可通过搭建HDFSHA来解决。2.YARN的高可用主要是解决ResourceManager单点故障。3.由于HDFS存储数据量过大,导致NameNode内存不足,可以通过搭建联邦来解决。二、简答题1.Hadoop是如何解决高可用问题的?答:对于Hadoop集群,RM和NN都是“SinglePointofFailure
4(单点故障)”,起着“一票否决”的作用,所以Hadoop对NN和RM都提供了HA选项,采用的都是Active/Standby的措施来达到HA的要求。所谓Active/Standby是一种热备方案,这种方案中,“在位”的行使职权的Active的管理者只有一个,但有一个作为备份(即Standby)的候补管理者时刻准备着,当Active的管理者发生故障,Standby的管理者就立刻顶上,并进行业务的接管,不用临时开机和初始化。2.简述ZooKeeper的功能及其在Hadoop高可用中起到的作用。答:ZooKeeper主要用来解决分布式应用中经常遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。在Hadoop的HA集群中,使用ZooKeeper的存储功能可保存NameNode的状态信息,ZooKeeper会监听两个NameNode的工作状态,当状态发生改变时,由其协调Active与Standby状态的切换。3.YARN是如何解决高可用问题的?答:Hadoop在2.4版本之后,针对YARN引入了HA机制,也就是ResourceManager的Active/Standby。YARN的HA与HDFS的HA基本相同,但YARNHA能够支持多个Standby的ResourceManager(Hadoop2.x的HDFSHA只允许有一个Standby的NameNode,Hadoop3.x之后,允许有多个Standby的NameNode),Active和Standby的状态可以通过控制台命令手动切换,也可以自动切换。4.Hadoop联邦解决了什么问题?答:Hadoop集群启动后,NameNode在内存中保存了文件和块的映射关系,这意味着对于一个拥有大量文件的超大集群来说,由于数据量太大,NameNode的内存中可能也无法放下这么多的对应关系,内存将成为限制系统横向扩展的瓶颈。Hadoop2.x版本中引入了HDFS
5联邦机制来解决这个问题一、选择题1.数据块(block)的大小由(A)参数决定。A.dfs.blocksizeB.fs.replicationC.fs.defaultFSD.dfs.block2.创建HDFS新目录“/newdir”的命令为(D)。A.hadoopmkdir/newdirB.hadoopfsmkdir/newdirC.hadoopfs–mkdirnewdirD.hadoopfs–mkdir/newdir二、简答题简述HDFS的写数据流程。答:(1)客户端首先与NameNode建立连接,发起文件上传请求。(2)NameNode检查上传路径是否存在,目标文件是否存在,权限是否允许。若无问题则修改命名空间,并反馈允许上传。(3)客户端收到允许上传反馈后再次请求第一个Block所在的节点名。(4)NameNode根据机架感知原理选取三个节点(DataNode1、DataNode2、DataNode3)并将其反馈给客户端。(5)客户端从获取的三个节点中选取一个节点建立管道(Pipeline)连接,请求上传数据。节点1收到请求后与节点2获取连接,节点2收到请求后与节点3获取连接。(6)连接全部建立成功后,客户端开始向第一个节点传输第一个Block。该Block数据以Packet为单位进行传输。数据的校验则是以更小的Chunk单位进行的。数据在客户端本地和
6DataNode端都有读取和写入的缓存队列。每一次Packet在Pipeline上的传输都需要反向应答。直到写完预定的Block为止。节点1、节点2和节点3之间也会以同样的方式同步传输。(7)当第一个Block传输完毕后,客户端会再次发送请求到NameNode,将整个流程再次重复。三、编程题编写程序完成HDFS文件系统根目录下所有文件的列举。Configurationconf=newConfiguration();hdfs=FileSystem.get(newURI(HDFS_PATH),conf,"hadoop");Stringpath="/";FileStatus[]listStatus=hdfs.listStatus(newPath(path));for(FileStatusfs:listStatus){system.out..println(fs.getPath()));习题一、填空题1.YARN提供的调度器策略有FIFOScheduler(FIFO调度器)、CapacityScheduler(容量调度器)和FairScheduler(公平调度器).
72.YARN采用的体系架构是主从结构,其中主节点是ResourceManager,从节点是NodeManager。3.ResourceManager的两个重要组件是Scheduler和ApplicationsManager。4.在NodeManager中封装内存、CPU、磁盘、网络等资源的是Container。二、简答题1.简述共享集群模式的优点。答:(1)资源利用率高(2)运维成本低(3)数据共享2.简述ApplicationMaster的主要作用。答:(1)为运行应用向ResourceManager申请资源。(2)在Job中对Task实现调度。(3)与NodeManager通信以启动或者停止任务。(4)监控所有任务的运行情况,并在任务失败的情况下重新为任务申请资源以重启任务3.简述YARN的工作流程。
8答:(1)用户编写客户端应用程序,向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。(2)ResourceManager接到客户端应用程序的请求,会为该应用程序分配一个Container,同时ResourceManager的ApplicationManager会与该容器所在的NodeManager通信,要求它在这个Container中启动一个ApplicationMaster。(3)ApplicationMaster被创建后首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~步骤7。(4)ApplicationMaster采用轮询的方式,通过RPC协议向ResourceManager申请和领取资源。(5)一旦ApplicationMaster申请到资源,就会与该容器所在的NodeManager通信,要求它启动任务。习题一、填空题1.MapReduce执行过程中,数据都是以key、value的形式进行传递的。2.整个MapReduce作业的生命周期是由ApplicationMaster来管理的。3.整个MapReduce作业的资源分配是由ResourceManager来管理的。
9二、简答题1.简述MapReduce的执行过程。答:在map阶段,系统会将数据拆分成若干个“分片”(split),分片完成后,再将这些“分片”数据以键-值方式传递给map进行处理,map和reduce都以键-值形式作为输入和输出。作为map端的输入,默认情况下,键是字符的位移,值是当前行的数据;此键-值对会作为参数被陆续传递给map端的处理程序,直到数据全部传递完成。map方法产生输出时,经过分区和排序后将其写入磁盘。在reduce端的,reduce端会通过多个复制线程去“拉取”不同map节点输出的数据文件,并对这些数据文件进行排序和合并,合并之后的文件被传入reduce方法中,reduce方法执行后,数据将被输出到文件系统,通常是HDFS。2.简述shuffle过程。答:(1)map端当map任务产生输出时,基于效率的考虑,输出数据不会直接写到磁盘上,而是先写入一个缓冲区中,此缓冲区默认大小为100MB,当写入的数据达到缓冲区的阈值(默认为80%)时,会将缓冲区中的数据溢写(spill)到磁盘,生成一个文件,在写入磁盘文件之前,会对这部分数据进行分区,然后对每个分区中的数据按键进行排序,然后写入磁盘中。随着map任务的执行,可能会产生多个溢写文件,这些文件在任务结束执行前,会合并为一个已分区且每个分区都已排序的完整的文件,并保存在本地的磁盘中。(2)reduce端reduce端并不会等待所有map任务结束再去获取map端输出的数据,reduce端的一个线程会定期询问ApplicationMaster,一旦有map任务结束,reduce端就开始复制数据。reduce
10会启动若干复制线程,以并行的方式从各个map节点复制数据。reduce节点通常不会复制map节点整个的输出文件,而是只复制属于自己的分区数据,复制完成所有map的数据后,会将各部分数据再次进行合并,合并前会进行必要的排序,以保持数据的完整性。3.简述本地化的含义。答:map任务有本地化的局限,意思是map任务一般情况下都会运行在分片所在的节点上,这样的好处是可以不用跨节点传输数据,从而大大提高了程序运行效率。4.简述数据分片过程。答:在map阶段,系统会将数据拆分成若干个“分片”(split),这里所说的“分片”只是逻辑上的切分,并非真正物理上的切分,每个分片的大小默认就是一个块的大小。例如,假设初始设定一个块的大小为128MB,如果有两个文件,一个50MB,一个150MB,则一共会被划分成3个分片,50MB的划分成一个,150MB划分成两个,分别是128MB和22MB。5.简述YARN的MapReduce的资源分配过程。答:当MapReduce作业启动后,会通知YARN,并由YARN的ResourceManager在NodeManager的管理下分配一个容器(Container),然后在这个容器中启动ApplicationMaster进程。MapReduce作业的ApplicationMaster是一个Java程序,它的主类是MRAppMaster。ApplicationMaster启动后,首先会做一定的初始工作,然后会分析MapReduce作业的规模,如果规模足够大,则再次向ResourceManager请求容器用于map和reduce任务的执行。对于map任务,根据数据本地化的要求,会尽可能地将容器分配到数据所在节点,而reduce任务则不会考虑。默认情况下,每个map和reduce任务都被分配了1024MB的内存和一个虚拟CPU内核,容器启动后,会拉取任务所需的相关的配置信息、打包好的MapReduce的JAR
11文件以及来自分布式缓存的文件到当前节点,然后开始运行map或reduce任务。6.简述InputFormat和OutputFormat的作用。答:(1)InputFormat负责创建输入分片并将它们分割成记录(2)OutputFormat主要用于描述输出数据的格式,它能够将用户提供的key/value对写入特定格式的文件中习题一、选择题1.Writable接口中进行序列化写操作的方法为(A)。A.writeB.readFieldsC.writeFieldsD.read2.SequenceFile.Writer完成新记录的添加的方法为(C)。A.writeB.newC.appendD.add二、简答题列举Java.lang.String和Text类型的区别。答:(1)Text对象的charAt方法返回的是当前位置字符对应的Unicode编码的位置,String对象返回的是当前位置对应的字符(char类型)。三、编程题实现自定义序列化类,要求该类可以实现以下数据的序列化。
12编号姓名年龄StringStringBytepublicclassPeopleimplementsWritable{privateStringid;privateStringname;privatebyteage;@OverridepublicvoidreadFields(DataInputin)throwsIOException{id=in.readUTF();name=in.readUTF();age=in.readByte();}@Overridepublicvoidwrite(DataOutputout)throwsIOException{out.write(id.getBytes());out.write(name.getBytes());out.write(age);}
13}习题一、选择题1.Hadoop3.x是基于(C)版本的JDK进行编译的。A.JDK1.6B.JDK1.7C.JDK1.8D.JDK1.92.Hadoop2.x版本中HDFS默认的NameNoderpc监听端口号是(B),Hadoop3.x中将此默认端口号改为了(B)。A.90009820B.80209820C.500708020D.50010500703.Hadoop的NameNoderpc监听端口可以在配置文件(C)中进行配置。A.mapred-site.xmlB.hdfs-site.xmlC.core-site.xmlD.hadoop-env.sh4.以下不属于Hadoop3.x新特性的是(D)。A.引入了EC技术B.JDK进行了升级C.实现了DataNode内部负责均衡D.实现了HA集群二、填空题1.EC技术的全称是ErasureCoding,是HadoopHDFS3.x版本以上新增的功能。2.在较老版本的Hadoop集群中,NameNode是HDFS
14集群中的单点故障。每个集群只有一个NameNode,并且如果该计算机或进程不可用,则整个集群将不可用。3.Hadoop2.x版本中HDFS默认的NameNodeHTTPUI端口号是50070,Hadoop3.x版本中将此默认端口号改为了9870。三、简答题1.Hadoop3.x相比Hadoop2.x都有哪些新的特性?答:(1)Hadoop2.x版本是基于JDK1.7进行编译的,而Hadoop3.x所有的HadoopJARs都是针对JDK1.8编译的。(2)HDFS3.x很多改进采用了EC技术,且支持数据的擦除编码(3)Hadoop3.x引入了YARNTimelineService(YARN时间轴服务)v.2,创建v.2是为了应对v.1的两个主要挑战:提高时间轴服务的可伸缩性和可靠性、通过引入流和聚合来增强可用性。(4)在Hadoop3中允许用户运行多个备用的NameNode。(5)DataNode内部负载均衡(6)端口号的改变(7)Shell脚本重写(8)GPU和FPGA支持2.Hadoop3.x支持的NameNode和传统的HadoopHA架构相比有什么优势?答:在Hadoop3中允许用户运行多个备用的NameNode3.Hadoop3.x的DataNode内部负载均衡功能如何使用?
15答:Hadoop3.x通过新的内部DataNode平衡功能来处理内部负载均衡,具体是通过HDFS DiskBalancerCLI(HDFS磁盘平衡命令行接口)来实现的,实现DiskBalancer功能,首先需要创建操作计划,然后在DataNode上执行该计划。操作计划通常是由一组语句组成的,计划中描述两个磁盘之间应移动多少数据。使用磁盘平衡功能前应该注意在默认情况下,集群上未启用磁盘平衡器。要启用磁盘平衡功能,必须在hdfs-site.xml配置文件中将dfs.disk.balancer.enabled设置为true。习题一、填空题1.ClouderaManager的主要组件包括Server、Agent、Management、Database、ClouderaRepository和Clients。2.ClouderaManager提供的管理功能有批量自动化部署节点、可视化的参数配置、智能参数验证以及优化和权限管理。3.ClouderaManager提供的监控功能有服务监控、主机监控、行为监控、事件活动、报警和日志和报告。二、简答题1.简述ClouderaManager的主要特点。答:(1)大数据处理相关服务安装过程自动化,部署时间从几周缩短到几分钟。(2)提供集群范围内的主机和正在运行的服务的实时视图。
16(3)提供了单个中央控制台,方便在整个集群中进行配置更改。(4)整合了各种报告和诊断工具,可以优化集群的性能和利用率,提高服务质量,提高合规性并降低管理成本。2.分别简述service和serviceinstance的概念。答:Service(服务)是ClouderaManager中的托管功能类别,有时也被称为服务类型,这些服务运行在集群中,可能是分布式的,也可能是单节点的,如MapReduce、HDFS、YARN和Spark。ServiceInstance(服务实例)即在ClouderaManager集群中运行的服务的实例。3.分别简述role、roleinstance和rolegroup的概念。Role(角色)是指service中的一类功能,有时也被称为角色类型。例如,HDFS服务中的角色有NameNode、SecondaryNameNode、DataNode和Balancer。RoleInstance(角色实例)是指ClouderaManager中,在主机上运行的角色的实例,它通常会映射到UNIX进程中,我们可以通过jps命令对其进行查看。在ClouderaManager中,RoleGroup(角色组)是指角色实例的一组配置属性,这是一种将配置分配给一组角色实例的机制。三、上机题1.根据9.4节,完成ClodueraManager和CDH的离线部署,搭建CDH集群环境。答:见章节内容2.在ClouderaManager管理菜单中启动HDFSHA和YARNHA。
17答:见章节内容习题一、填空题1.AvroSchema的基本类型中表示空值的是null,表示8位无符号字节序列的是bytes。2.AvroSchema的复杂类型中record类型定义record名称的属性是name,限定名称的属性是namespace。3.定义AvroSchema类型的属性是type,定义JSON数组的属性是fields。二、简答题1.简述ApacheAvro的主要功能。答:(1)丰富的数据结构。(2)一种紧凑、快速的二进制数据格式。(3)容器文件,用于存储持久性数据。(4)远程过程调用。(5)与动态语言的简单集成。读取或写入数据文件,使用或实现RPC协议均不需要代码生成。代码生成是可选的优化,仅对于静态类型的语言值得实现。2.简述Avro序列化与反序列的过程。答:(1)定义Schema(2)基于定义的Schema自动创建JavaBean类
18(3)通过DatumWriter实现序列化(4)通过DatumReader实现反序列化三、上机题按照要求完成以下操作。(1)定义Student的Schema,包括sid(学号)、name(姓名)、age(年龄)属性。{"namespace":"com.inspur.hadoop.model","type":"record","name":"Student","fields":[{"name":"name","type":"string"},{"name":"age","type":"int"},{"name":"sex","type":"string"}]}(2)分别使用avro-toolsjar和maven自动创建Student.java类。java-jar/path/to/avro-tools-1.8.2.jarcompileschemastudent.avsc./(3)创建Student测试对象,并将其数据序列化到磁盘中。Studentstudent=
19Student.newBuilder().setName("Mary").setAge(19).setSex("女").build();DatumWriterstudDatumWriter=newSpecificDatumWriter(Student.class);DataFileWriterdataFileWriter=newDataFileWriter(studDatumWriter);dataFileWriter.create(stud.getSchema(),newFile("file/stud.avro"));dataFileWriter.append(student);dataFileWriter.close();(4)将上一题保存在磁盘中的文件反序列化为对象。DatumReaderstudDatumReader=newSpecificDatumReader(Student.class);DataFileReaderdataFileReader=newDataFileReader(newFile("file/users.avro"),userDatumReader);Studentstud=null;while(dataFileReader.hasNext()){stud=dataFileReader.next(stud);System.out.println(stud);
20}