《Hadoop系统搭建及项目实践》课后习题答案.docx
- 文档编号:12289101
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:25
- 大小:38.32KB
《Hadoop系统搭建及项目实践》课后习题答案.docx
《《Hadoop系统搭建及项目实践》课后习题答案.docx》由会员分享,可在线阅读,更多相关《《Hadoop系统搭建及项目实践》课后习题答案.docx(25页珍藏版)》请在冰豆网上搜索。
《Hadoop系统搭建及项目实践》课后习题答案
项目1Hadoop基础知识
1.Hadoop是由哪个项目发展来的?
答:
2002年,开源组织Apache成立开源搜索引擎项目Nutch,但在Nutch开发过程中,始终无法有效地将计算任务分配到多台计算机上。
2004年前后,Google陆续发表三大论文GFS、MapReduce和BigTable。
于是Apache在其Nutch里借鉴了GFS和MapReduce思想,实现了Nutch版的NDFS和MapReduce。
但Nutch项目侧重搜索,而NDFS和MapReduce则更像是分布式基础架构,因此,2006年,开发人员将NDFS和MapReduce移出Nutch,形成独立项目,称为Hadoop。
2.Hadoop主要有哪些版本?
答:
目前Hadoop的发行版除了Apache的开源版本之外,还有华为发行版、Intel发行版、Cloudera发行版(CDH)、Hortonworks发行版(HDP)、MapR等,所有这些发行版均是基于ApacheHadoop衍生出来的。
ApacheHadoop版本分为两代,第一代Hadoop称为Hadoop1.0,第二代Hadoop称为Hadoop2.0。
第一代Hadoop包含三个大版本,分别是0.20.x,0.21.x和0.22.x,其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x增加了NameNodeHA等新的重大特性。
第二代Hadoop包含两个版本,分别是0.23.x和2.x,它们完全不同于Hadoop1.0,是一套全新的架构,均包含HDFSFederation和YARN两个系统,相比于0.23.x,2.x增加了NameNodeHA和Wire-compatibility两个重大特性。
3.简要描述Hadoop的体系结构,分析1.x与2.x版本间的区别。
答:
Hadoop2.x相比Hadoop1.x最大的变化是增加了YARN组件,YARN是一个资源管理和任务调度的框架,主要包含三大模块:
ResourceManager(RM)、NodeManager(NM)和ApplicationMaster(AM)。
其中,ResourceManager负责所有资源的监控、分配和管理;ApplicationMaster负责每一个具体应用程序的调度和协调;NodeManager负责每一个节点的维护。
对于所有的applications,RM拥有绝对的控制权和对资源的分配权。
而每个AM则会和RM协商资源,同时和NodeManager通信来执行和监控task。
4.简要描述分布式系统的优点有哪些。
答:
分布式系统的主要优点是:
(1)经济:
微处理机提供了比大型主机更好的性能价格比
(2)速度:
分布式系统总的计算能力比单个大型主机更强
(3)固有的分布性:
一些应用涉及空间上分散的机器
(4)可靠性:
如果一个机器崩溃,整个系统还可以运转
(5)渐增:
计算能力可以逐渐增加
项目2Hadoop安装与配置
1.练习安装VMware和CentOS?
略。
参考第19页至第27页
2.练习下载并安装Hadoop系统?
略。
参考第30页至第40页
3.简要描述配置伪分布Hadoop和分布式Hadoop的主要区别。
略。
4.练习启动和停止Hadoop?
答:
运行sbin目录下的start-all.sh完成hadoop的启动,运行stop-all.sh停止Hadoop。
项目3HDFS技术
1.HDFS的特点有哪些?
答:
HDFS的优点包括
(1)适合大数据处理:
(2)高容错性(3)适合批处理(4)通过移动计算而不是移动数据(5)采用流式文件访问(6)可构建在廉价机器上;
HDFS的缺点包括:
(1)低延时数据访问很吃力
(2)小文件存储并不擅长(3)不能完成并发写入和文件随机修改。
2.HDFS是如何读取数据的?
答:
HDFS数据读取使用HDFS提供的客户端开发库进行读取。
(1)程序向远程的Namenode发起RPC请求;
(2)Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的datanode地址;(3)客户端拿到block的位置信息后调用FSDataInputStreamAPI的read方法并行的读取block信息,block默认有3个副本,所以每一个block只需要从一个副本读取就可以。
客户端开发库会选取离客户端最接近的datanode来读取block。
(4)读取完当前block的数据后,关闭与当前的datanode连接,并为读取下一个block寻找最佳的datanode;返回给客户端。
(5)当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。
(6)读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读取。
3.元数据节点、数据节点和辅助元数据节点的功能分别是什么?
答:
元数据节点NameNode是管理者,负责管理文件系统名字空间和控制外部客户机的访问。
DataNode的功能包括:
(1)保存Block,每个块对应一个元数据信息文件。
(2)启动DataNode线程的时候会向NameNode汇报Block信息;(3)通过向NameNode发送心跳保持与其联系(3秒一次),如果NameNode10分钟没有收到DataNode的心跳,则认为其已经丢失,并将其上的Block复制到其他DataNode。
辅助元数据节点SecondaryNameNode,会周期性的将EditsLog文件中记录对HDFS的操作合并到一个FsImage中文件中,然后清空EditsLog文件。
NameNode的重启就会加载最新的一个FsImage文件,并重新创建一个EditsLog文件来记录HDFS操作
4.HDFSShell的命令格式是什么样的?
答:
文件系统shell包含各种shelllike命令,可以直接和HDFS文件系统进行交互,就像对其它系统的支持一样。
所有的FSshell命令使用的都是URI路径作为参数。
URI格式是scheme:
//authority/path。
URI的scheme是hdfs,表示分布式HDFS系统,scheme是file,表示本地系统。
项目4MapReduce技术
1.简述MapReduce的执行过程?
答:
MapReduce作业的执行过程是:
(1)在客户端启动一个作业。
(2)向JobTracker请求一个JobID。
(3)将运行作业所需要的资源文件复制到HDFS上,包括MapReduce程序打包的jar文件、配置文件和客户端计算所得的计算划分信息。
(4)JobTracker接收到作业后,将其放在一个作业队列里,等待作业调度器对其进行调度,当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分信息为每个划分创建一个map任务,并将map任务分配给TaskTracker执行。
(5)TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行。
当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。
当JobTracker查询状态时,它将得知任务已完成,便显示一条消息给用户。
2.简述MReduce的输入格式?
答:
使用MapReduce编程,只需定义好map和reduce函数输入和输出
Hadoop根据输入文件的格式RecordReader来解析文件中的
InputFormat是一个接口,定义了输入文件如何被Hadoop分块。
getSplit(JobContextcontext)方法负责将一个大数据在逻辑上拆分成一个或多个InputSplit。
createRecordReader(inputSplit,TaskAttemptContextcontext)方法根据InputSplit定义的方法,返回一个能够读取分片记录的RecordReader。
设置MapReduce的输入格式可以在驱动类中使用Job对象的setInputFormat()方法完成。
3.简述shuffile的过程?
shuffle过程实际上是个数据处理过程,即Map输出结果进行分区、分组、排序和归纳,然后作为输入传给reducer。
(1)分区:
用于划分键值空间。
Partitioner负责控制Map输出结果key的分割。
key(或者一个key子集)被用于产生分区。
(2)分组:
reduce方法每次接收的是一组具有相同key的value值,所以每个reduce方法每次只能对相同key所对应的值进行计算。
但有时用户会期望不同的key所对应的value值能在一次reduce方法调用时进行操作,这时就需要用户进行自定义分组的操作了。
(3)排序:
排序(sort)是MapReduce计算过程的核心部分。
用户可以根据自己的需求自定义排序形式,也可以使用默认的字典排序。
自定义排序时需要继承WritableComparator类,重写compare方法,对于接收key的类型,可通过当前类构造方法的super来指定。
(4)归纳:
一台可以存在很多Map任务,同时不同的Map任务也可能存在于不同机器上,而相对Map较少的Reduce任务,会从多个已经分好区、排好序的Map任务输出中拖拽至本地Reduce所在JVM相应的分区中。
拖拽回来的数据由于来自多个不同的Map输出,所以通常会存在相同的Key的
这个过程并不是等待所有Map任务完成才进行,而是通过参考合并因子属性值进行多轮归并操作,最后一趟归并可能来自内存也可能来自磁盘。
在Reduce函数中,默认每次处理一组具有相同key的value值,最终将计算结果输出至文件系统中。
项目5HadoopI/O操作
1.简述SequenceFile和MapFile的存储过程?
答:
SequenceFile完成新记录的添加操作API为fileWriter.append(key,value);SequenceFile的格式是由一个header跟随一个或多个记录组成。
前三个字节是一个BytesSEQ代表着版本号,同时header也包括key的名称,valueclass,压缩细节,metadata,以及Syncmarkers。
Syncmarkers的作用在于可以读取任意位置的数据。
(2)MapFile是排序后的SequenceFile,其目录结构由data和index两部分组成。
index作为文件的数据索引,在MapFile被访问的时候,索引文件会被加载到内存,通过索引映射关系可迅速定位到指定Record所在文件位置。
2.简述数据块检测程序的流程?
答:
数据块检测程序原理是在DataNode节点上开启一个后台线程,用来定期验证存储在其之上的所有块,防止物理介质出现损减情况儿造成数据损坏。
DataBlockScanner被DataNode节点用来检测它所管理的所有Block数据块的一致性,因此,对已DataNode节点上的每一个Block,它都会每隔scanPeriodms利用Block对应的校验和文件来检测该Block一次,看看这个Block的数据是否已经损坏。
DataBlockScanner在其内部使用了日志记录器来持久化保存每一个Block上一次扫描的时间,DataNode节点在启动之后通过日志文件来恢复之前所有Block的有效时间。
另外,DataNode对Block的验证还会在向某一个客户端传送Block的时候来更行该Block的扫描时间(REMOTE_READ方式),这是因为DataNode向客户端传送一个Block的时候要必须校验该数据块。
3.Hadoop中都有哪些压缩格式?
答:
HDFS常见的压缩格式为GZIP、BZIP2、LZO、Snappy和LZ4。
gzip格式是同时使用了LZ77算法和哈夫曼编码的一个无损数据压缩算法。
它是一个标准压缩算法,压缩和解压缩可以在自由、通用的压缩库zlib上找到。
bzip2是JulianSeward开发并按照自由软件/开源软件协议发布的数据压缩算法及程序。
bzip2比传统的gzip或者zip的压缩效率高。
LZO是Lempel-Ziv-Oberhumer的缩写。
该算法是无损压缩算法,参考实现程序是线程安全的,如果LZO文件已经预处理过程中被索引了,那么LZO文件是可切分的。
LZ4是面向字节的LZ77压缩方案,是无损数据压缩算法。
他的压缩率稍逊于LZO,但它的压缩速度和解压缩速度比LZO要快。
4.Hadoop序列化的目的是什么?
序列化就是将结构化的数据转化为字节流,以便进行网络传输或磁盘存储。
通过序列化,把一个对象经I/O流传输到目标位置。
项目6HBase技术
1.简述HBase体系架构?
HBase采用Master/Slave架构搭建集群。
由一个HMaster服务器带多个HRegionServer服务器组成。
HMaster负责管理所有的HRegionServer,每个HRegionServer负责存储许多Hregion(HBase逻辑表的分块)。
HBase使用Zookeeper存放集群的元数据和状态信息,同时实现HMaster的容错处理。
(1)Hmaster是HBase集群的主节点,主要负责HBase中Table和Region的管理工作,它会通知每个HRegionServer要维护哪些HRegion。
在HBase集群中可以启动多个HMaster,一般情况下会启动两个HMaster,非活动的HMaster会定期和活动HMaster通信以获取最新状态,从而保证自己是实时更新的。
(2)HRegion是HBase集群上分布式存储和负责均衡的最小单位,与HDFS中文件块的概念类型。
HBase使用表(Table)来组织和管理数据,当表的大小超过阈值时,HBase会根据RowKey(行的主键)按字典顺序将表水平切割成多个HRegion。
(3)HRegionServer一般和DataNode在同一台机器上,以实现数据的本地性。
一般情况下,一台机器上只运行一个HRegionServer。
HRegionServer负责数据的读写服务,用户通过HRegionServer可以实现对数据的访问,同时HRegionServer还管理本地Region和Table中的数据。
(4)ZooKeeper存储了HBase中两张特殊的数据表的位置,分别是-ROOT-(根数据表)和.META.(元数据表)
2.HBase中表、行、列族分别是什么?
HBase中表是在schema定义时被预先声明的。
HBase中的行是逻辑上的行,物理上模型上行是按列族(colomnfamily)分别存取的。
HBase中的列被分组为列族。
列族的所有列成员具有相同的前缀。
3.练习HBase的安装过程?
略参考第112页至第115页
4.使用HBaseAPI完成创建表和删除表的操作?
packagecom.simple.create{
publicstaticvoidmain(String[]args)throwsIOException{
//1.配置文件设置
//创建用于客户端的配置类实例
Configurationconfig=HBaseConfiguration.create();
//设置连接zookeeper的地址
//hbase客户端连接的时zookeeper
config.set(“hbase.zookeeper.quorum”,”127.0.0.1:
2181”);
//2.表描述相关信息
//创建表描述器并命名表明为account1
HTableDescriptortableDesc=newHTableDescriptor(TableName,valueOf(”account1”));
//创建列族描述器并命名一个列族名为baseInfo
HColumnDescriptorcolumnDesc1=newHColumnDescriptor(“baseinfo”);
//设置列族的最大版本数
columnDesc1.setMaxVersions(5);
HColumnDescriptorcolumnDesc2=newHColumnDrscriptor(“contacts”);
columnDesc2.setMaxversions(3);
tableDesc.addFamily(columnDesc1):
tableDesc.addFamily(columnDesc2):
//3.实例化HBaseAdmin、创建表
//根据配置文件创建HBaseAdmin对象
HBaseAdminhbaseAdmin=newHBaseAdmin(config);
hbaseAdmin.createTable(tableDesc);
//释放资源
hbaseAdmin.close();
}
}
项目7ZooKeeper技术
1.简述ZooKeeper的特征和架构。
(1)ZooKeeper的数据模型。
ZooKeeper拥有一个层次的命名空间。
这就是一个文件系统,只不过文件系统中的文件还可以具有目录的功能。
另外,指向节点的路径必须用规范的绝对路径来表示,并用斜线“/”来分割。
(2)ZooKeeper会话及状态。
ZooKeeper客户端通过句柄ZooKeeper服务建立一个会话。
这个会话一旦创建,句柄将以CONNECTING状态开始启动。
客户端尝试连接到其中一个ZooKeeper服务器,如果连接成功,它的状态将变为CONNECTED。
一般情况下只有这两种状态。
如果一个可恢复的错误发生,如会话终结或认证失败,或者应用程序明确地关闭了句柄,句柄将会转入关闭状态。
为了创建一个客户端会话,应用程序必须提供一个由主机(IP和主机名)和端口所组成的连接字符串,这个字符串标识了要连接的目标主机及主机端口。
ZooKeeper客户端将选择服务器列表中的任意一个服务器并尝试连接。
如果连接失败,那么客户端将自动尝试连接服务器列表中的其他服务器,直到连接成功。
(3)ZooKeeperwatches。
ZooKeeper可以为所有的读操作设置watch,这些读操作包括exists()、getChildren()及getData()。
watch事件是一次性的触发器,当watch的对象状态发生改变时,将会触发此对象上所设置的watch对应的事件。
(4)ZooKeeperACL。
ZooKeeper使用ACL来对Znode进行访问控制。
ACL的实现和UNIX文件访问许可非常相似。
它使用许可位来对一个节点的不同操作进行运行或禁止的权限控制。
但是,和标准UNIX不同的是,ZooKeeper节点有user、group和world三种标准模式,且没有节点所有者的概念。
(5)ZooKeeper的一致性保证。
ZooKeeper的读写速度非常快。
另外,在进行读操作时,ZooKeeper依然能够为旧数据提供服务。
这些都是由ZooKeeper所提供的一致性保证的。
2.简述ZooKeeperd的工作原理和数据模型。
ZooKeeper的核心是原子广播,这个机制保证了各个Server之间的同步。
实现这个机制的协议称为Zab协议。
Zab协议有两种模式,它们分别是恢复模式和广播模式。
当服务器启动或在Leader崩溃后,Zab就进入恢复模式,当Leader被选举出来,且大多数Server完成了和Leader的状态同步以后,恢复模式就结束了。
状态同步保证了Leader和Server具有相同的系统状态。
一旦Leader与多数的Follower进行了状态同步,它就可以开始广播消息,即进入广播状态。
这时当一个Server加入ZooKeeper服务中时,它会在恢复模式下启动,发现Leader,并和Leader进行状态同步。
待到同步结束,它也参与消息广播。
ZooKeeper服务一直维持在Broadcast状态,直到Leader崩溃或失去大部分的Follower支持。
广播模式需要保证提议(proposal)被按顺序处理,因此,ZooKeeper采用了递增的事务id号(zxid)来保证。
所有的提议(proposal)都在被提出时加上了zxid。
实现中zxid是一个64位的数字,高32位是epoch,用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch;低32位是个递增计数。
当Leader崩溃或Leader失去大多数的Follower时,zk进入恢复模式,恢复模式需要重新选举出一个新的Leader,让所有的Server都恢复到一个正确的状态。
3.简述搭建ZooKeeper环境的过程,尝试配置伪分布系统和分布式系统。
略参考第132页至第134页
4.简述ZooKeeper的命令有哪些。
略参考第135页至第139页
项目8分布式数据仓库技术Hive
1.简述Hive的优点和局限。
答:
Hive具有如下特点。
(1)Hive框架的优点。
①更友好的接口:
操作接口采用类SQL的语法,提供快速开发的能力。
②更低的学习成本:
避免了写MapReduce,减少开发人员的学习成本。
③可扩展性、横向扩展:
为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS
作为存储系统)。
一般情况下,不需要重启服务,Hive就可以自由地扩展集群的规模,还支
持用户自定义函数。
④延展性:
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
⑤良好的容错性:
可以保障即使有节点出现问题,SQL语句仍可完成操作。
⑥统一的元数据管理:
metastore包括数据库、表、字段分区等详细信息。
(2)Hive存在的局限性。
①Hive不支持记录级别的更新、插入和删除等操作,但是用户可以通过查询生成新表
或将查询结果导入文件中(本项目选择的hive-2.3.2版本支持记录级别的插入操作)。
②Hive的查询延时很高,因为MapReduceJob的启动过程消耗很长时间,所以不能用
在交互查询系统中。
③Hive不支持事务,Hive主要用来做OLAP(联机分析处理),而不是OLTP(联机事务
处理)。
Hive并不适合那些需要低延迟的应用,因此,Hive的最佳使用场合是大数据集的批处
理作业。
2.简述Hive服务组成。
答:
Hive内部自带了许多服务,可以在运行时用--service选项来明确指定使用什么服务。
如果需要查询Hive内部有多少服务,可以用--servicehelp选项来查看帮助。
通过查询可以看到输出项ServiceList里面显示出Hive支持的服务列表,列表里有beeline、cli、help、hiveburninclient、hiveserver2、hiveserver、hwi、jar、lineage、metastore、metatool、orcfiledump、rcfilecat、schemaTool、version共15个内置服务。
3.练习Hive的安装过程。
答:
Hive安装的前提条件为:
(1)一台配置好Hadoop环境的虚拟机。
(2)存在Hadoop账户。
Hive安装步骤如下:
(1)从Hive的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hadoop系统搭建及项目实践 Hadoop 系统 搭建 项目 实践 课后 习题 答案