大数据练习题答案(仅供参考)

上一篇练习题的答案,题目里带括号的都是批注,如果看的不清楚,可以去我的资源下载(资源里批注清楚,都是红色批出来的)

一、选择题

  1. Hadoop作者 ( C )
    A、Martin Fowler B、Kent Beck
    C、Doug cutting D、Grace Hopper
  2. Hadoop起始于以下哪个阶段? ( D )
    A、2004年,Nutch的开发者开发了NDFS。
    B、2004年,Google发表了关于MapReduce的论文。
    C、2003年,Google发布了GFS论文。
    D、2002年,Apach项目的Nutch。
  3. 在Centos7中,如果想要查看本机的主机名可以使用下面哪个命令? ( B )
    A、reboot(重启) B、hostname
    C、pwd (查看当前工作路径) D、tail(查看文件最后1kb内容)
  4. 关于大数据的价值密度描述正确的是以下哪个? ( A )
    A、大数据由于其数据量大,所以其价值密度低。
    B、大数据由于其数据量大,所以其价值也大。
    C、大数据的价值密度是指其数据类型多且复杂。
    D、大数据由于其数据量大,所以其价值密度高。
  5. Hadoop的三种安装模式不包括以下哪种? ( A )
    A、两分布式模式 B、完全分布式模式
    C、伪分布模式 D、单机模式
  6. 以下哪一项属于非结构化数据。 ( C )
    A. 企业ERP数据 B. 财务系统数据
    C. 视频监控数据 D. 日志数据
  7. 下面哪个程序负责 HDFS 数据存储 ( C )
    A. NameNode B.Jobtracker
    C. Datanode D. secondaryNameNode
  8. HDFS1.0 默认 Block Size大小是多少 ( B )
    A. 32MB B. 64MB
    C. 128MB D. 256MB
  9. Hadoop-2.x集群中的HDFS的默认的副本块的个数是?( A )
    A、3 B、2
    C、1 D、4
  10. 关于HDFS集群中的DataNode的描述不正确的是( A )
    A、一个DataNode上存储的所有数据块可以有相同的
    B、存储客户端上传的数据的数据块
    C、DataNode之间可以互相通信
    D、响应客户端的所有读写数据请求,为客户端的存储和读取数据提供支撑
  11. 关于SecondaryNameNode哪项是正确的( A )
    A、它目的是帮助NameNode合并编辑日志,减少NameNode的负担和冷启动时的加载时间
    B、它对内存没有要求(SecondaryNameNode也是在内存中合并的)
    C、它是NameNode的热备(冷备)
    D、SecondaryNameNode应与NameNode部署到一个节点(SecondaryNameNode通常与NameNode在不同的计算机上运行,因为它的内存需求与NameNode相同,这样可以减轻NameNode所在计算机的压力)
  12. 一个gzip文件大小75MB,客户端设置Block大小为64MB,请问其占用几个Block?( B )
    A、3 B、2
    C、4 D、1
  13. HDFS有一个gzip文件大小75MB,客户端设置Block大小为64MB。当运行mapreduce任务读取该文件时input split大小为 ( D )
    A、一个map读取64MB,另外一个map读取11MB
    B、128MB
    C、64MB
    D、75MB
  14. HDFS有一个LZO(with index)文件大小75MB,客户端设置Block大小为64MB。当运行mapreduce任务读取该文件时input split大小为 ( A )
    A、一个map读取64MB,另外一个map读取11MB
    B、64MB
    C、75MB
    D、128MB
  15. Client 端上传文件的时候下列哪项正确? ( B )
    A. 数据经过 NameNode 传递给 DataNode(不经过NameNode)
    B. Client 端将文件切分为 Block,依次上传
    C. Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作(Client 向 NameNode 发起文件写入的请求。NameNode 根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息。Client 将文件划分为多个 Block,根据 DataNode 的地址信息,按顺序写入到每一个DataNode 块中。)
    D. 以上都不正确
  16. HDFS是基于流数据模式访问和处理超大文件的需求而开发的,具有高容错、高可靠性、高可扩展性、高吞吐率等特征,适合的读写任务是 ( D )
    A. 一次写入,少次读
    B. 多次写入,少次读
    C. 多次写入,多次读
    D. 一次写入,多次读
  17. 配置机架感知的下面哪项正确 ( D )
    A、MapReduce会根据机架获取离自己比较近的网络数据
    B、写入数据的时候会写到不同机架的DataNode
    C、如果一个机架出问题,不会影响数据读写
    D、都正确
  18. Hadoop1.0默认的调度器策略是哪个 ( A )
    A. 先进先出调度器 B. 计算能力调度器
    C. 公平调度器 D. 优先级调度器
  19. 若不针对MapReduce编程模型中的key和value值进行特别设置,下列哪一项是MapReduce不适宜的运算。 ( D )
    A. Max B. Min
    C. Count D. Average
  20. 下列关于MapReduce说法不正确的是 ( C )
    A. MapReduce是一种计算框架
    B.MapReduce来源于google的学术论文
    C. MapReduce程序只能用java语言编写
    D. MapReduce隐藏了并行计算的细节,方便使用

二、判断题

  1. Hadoop 支持数据的随机读写。 (不支持) ( × )
  2. Hadoop实现了一个分布式文件系统,简称HDFS。 ( √ )
  3. 在大数据框架中,批处理系统一般不适用于对延时要示较高的场景。 ( √ )
  4. 我国的大数据产业政策一直在有序推进,工业和信息化部在2017年1月正式印发了《大数据产业发展规划》。 ( √ )
  5. hadoop2.7.3默认块的大小是64MB (128MB) ( × )
  6. HDFS系统为了容错保证数据块完整性,每一块数据都采用2份副本。 ( √ )
  7. HDFS以流的形式访问文件系统中的数据。 ( √ )
  8. NameNode 负责管理元数据信息metadata,client 端每次读写请求,它都会从磁盘(内存)中读取或会写入 metadata 信息并反馈给 client 端。 ( × )
  9. HDFS既适合超大数据集存储,也(不)适合小数据集的存储。 ( × )
  10. HDFS为海量的数据提供了存储,而MapReduce为海量的数据提供了计算。 ( √ )
  11. 如果NameNode意外终止,SecondaryNameNode会接替它使集群继续工作。( × )
  12. NameNode本地磁盘(内存)保存了Block的位置信息。 ( × )
  13. 因为HDFS有多个副本,所以NameNode是不存在单点问题的。(存在) ( × )
  14. Hadoop1.0和2.0都具备完善的HDFS HA策略。 (1.0没有) ( × )
  15. HDFS系统采用NameNode定期向DataNode发送心跳消息,用于检测系统是否正常运行。(DataNode向NameNode发送) ( × )
  16. Hadoop下使用MapRecue。用户只要继承MapReduceBase,提供分别实现Map和Reduce的两个类,并注册Job即可自动分布式运行。 ( √ )
  17. Hadoop是Java开发的,所以MapReduce只支持Java语言编写。 ( × )
  18. MapReduce 的 input split 一定是一个 block。(默认是) ( × )
  19. MapReduce适于PB级别以上的海量数据在线处理。(离线) ( × )
  20. MapReduce计算过程中,相同的key默认会被发送到同一个reduce task处理。( √ )

三、问答题

  1. 简述数据产生方式的变革
    ①运营式系统阶段 建立在数据库上的大量运营系统产生的结构化信息,数据产生是被动的
    ②用户原创内容阶段 大量上网用户本身就是内容的产生者,数据量急剧增加,数据产生是主动的
    ③感知式系统阶段 物联网发展,物联网的设备自动产生数据,短时间内生成更密集、更大量的数据
  2. 说说大数据与云计算、物联网的关系
    三者相辅相成
    大数据分析的很多技术来自云计算,大数据为云计算提供用武之地
    物联网产生大数据,物联网借助云计算和大数据技术实现物联网大数据的存储、分析和处理
  3. 简述hadoop的安装配置
    1.创建hadoop账户
    2.上传、安装和配置jdk
    3.上传和安装hadoop
    4.配置hadoop环境变量
    5.配置hadoop配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml)
    6.格式化名称节点(hadoop namenode -format)
    7.ssh免密登录
    8.启动hadoop
  4. 简述名称节点、数据节点、第二名称节点
    名称节点(NameNode)负责管理分布式文件系统的命名空间,由FSImage和Editlog组成
    FsImage用于维护文件系统树和文件树中所有文件和文件夹的元数据,操作日志文件Editlog记录所有针对文件的创建、删除、重命名的操作
    数据节点(DataNode)负责数据的存储和读取
    第二名称节点(SecondaryNameNode)可以完成FSImage和Editlog的合并操作,减小Editlog文件大小,缩短名称节点启动时间。同时起到了NameNode冷备的作用
  5. 简述HDFS副本放置策略
    ①如果是在集群内发起的写操作,则把第一个副本放置在发起写操作请求的数据节点上,实现就近写入数据。如果是来自集群外部的写操作请求,则从集群内部挑选一台磁盘不满、cpu不太忙的数据结点,作为第一个副本的存放地
    ②第二个副本放在与第一个副本不同的机架的数据节点上
    ③第三个副本放在与第一个副本相同的机架的其他节点上
    ④如果有更多副本,则继续从集群中随机选择数据节点进行存放
  6. 叙述HDFS读数据流程
    当客户端需要读取文件时,首先向NameNode发起读请求,NameNode收到请求后,会将请求文件的数据块在DataNode中的具体位置(元数据信息)返回给客户端,客户端根据文件数据块的位置,直接找到相应的DataNode发起读请求
  7. 叙述HDFS写数据流程
    当客户端需要写文件时,首先是向NameNode发起写请求,将需要写入的文件名、文件大小等信息告诉NameNode。NameNode会将文件信息记录到本地,同事会验证客户端的写入权限,若验证通过,会向客户端返回文件数据块能够存放在DataNode上的存储位置信息,然后客户端直接向DataNode的相应位置写入数据块。被写入的数据块的DataNode也会将数据块备份到其他DataNode上
  8. 简述MapReduce(策略、理念、工作流程)
    策略:分而治之
    理念:计算向数据靠拢
    工作流程:一个大的MapReduce作业,首先会被拆分成许多个Map任务在多台机器上并行执行,每个Map任务通常运行在数据存储的节点上。当Map任务结束后,会生成许多中间结果。这些中间结果会被分发到多个Reduce任务在多台机器上并行执行,Reduce任务会对中间结果进行汇总计算得到最后结果,并输出到分布式文件系统中。
  9. 简述hadoop2.0对hadoop1.0的HDFS和MapReduce的改进
    ①Hadoop1.0中的HDFS,单一名称节点,存在单点失效问题,在hadoop2.0中设计了HDFS HA,提供了名称节点热备份机制,即在一个集群中运行两个NameNode,一个处于活跃状态(active),一个处于备用状态(standby),两个NameNode元数据信息同步Editlog共享,只有活跃状态的NameNode对外提供读写服务,当活跃状态的NameNode崩溃,HDFS集群迅速切换到备用的NameNode
    ②Hadoop1.0中的HDFS,单一命名空间,无法实现资源隔离,在hadoop2.0中设计了HDFS联邦,管理多个命名空间,即设计了多个相互独立的名称节点,这些名称节点分别进行各自命名空间的管理,相互之间是联邦关系,不需要彼此协调。
    ③MapReduce1.0的资源管理效率底下,在hadoop2.0中设计了新的资源管理框架YARN,将原来JobTracker三大功能(资源管理、任务调度、任务监督)进行拆分,YARN包括ResourceManager、ApplicationMaster和NodeManager,由ResourceManager负责资源管理,ApplicationMaster负责任务调度和监督,NodeManager定时向ResourceManager汇报本节点上资源使用情况和各个Container的运行状态,同事接受并处理来自ApplicationMaster的Container启动/停止等请求
  10. 大数据的概念(4V特征)
    ①数据量大(Volume) 数据量大,TB,PB,乃至EB等数据量的数据需要分析处理。
    ②数据类型繁多(Variety)大数据数据类型丰富,包括结构化数据和非结构化数据,非结构化数据越来越多,包括网络日志、音频、视频、图片、地理位置信息等。
    ③处理速度快(Velocity)大数据时代很多应用都需要基于快速生成的数据给出实时分析结果
    ④价值密度低(Value)很多有价值的信息都是分散在海量数据的

四、应用题

  1. CentOS 7修改静态ip
    修改ip为192.168.1.26,网关为192.168.1.1
    ①登录虚拟机
    ②切换到root用户下
    ③切换到修改ip的目录下
    [root@master /]# cd /etc/sysconfig/network-scripts
    ④已知网络配置文件为ifcfg-ens33,修改下列文件,使其符合题意
    TYPE=“Ethernet”
    PROXY_METHOD=“none”
    BROWSER_ONLY=“no”
    BOOTPROTO=“none”
    DEFROUTE=“yes”
    IPV4_FAILURE_FATAL=“no”
    IPV6INIT=“yes”
    IPV6_AUTOCONF=“yes”
    IPV6_DEFROUTE=“yes”
    IPV6_FAILURE_FATAL=“no”
    IPV6_ADDR_GEN_MODE=“stable-privacy”
    NAME=“ens33”
    UUID=“ab60d501-535b-49f5-a76b-3336a4120f64”
    DEVICE=“ens33”
    ONBOOT=“yes”
    IPADDR=192.168.137.129 192.168.1.26
    PREFIX=24
    GATEWAY=192.168.137.2 192.168.1.1
    DNS1=202.99.192.68
    IPV6_PRIVACY=”no”
    ⑤重启网卡
    [root@master network-scripts]# systemctl restart network
    ⑥测试连通性(和192.168.1.65测试即可)
    [root@master network-scripts]# ping 192.168.1.65 -c 3
  2. 修改hadoop配置文件core-site.xml

        
<!--HDFS 的默认访问路径(NameNode的访问地址)-->
                fs.defauleFs </name>
                hdfs://node1:9000</value>
        </property>
        
<!--Hadoop数据文件的存放目录-->
                hadoop.tmp.dir</name>
                /opt/hadoop-2.5</value>
        </property>
</configuration>

修改hadoop配置文件hdfs-site.xml


	
<!--文件在HDFS系统中的副本数 3-->
		dfs.replication</name>
		3</value>
	</property>
	
<!--NameNode节点数据在本地文件系统的存放位置-->
		dfs.namenode.name.dir</name>
		file:/opt/media/hadoop-2.6.0/dfs/name</value>
	</property>
	
<!--DataNode节点数据在本地文件的存放位置-->
		dfs.datanode.data.dir</name>
		file:/opt/medis/hadoop-2.6.0/dfs/data</value>
	</property>
</configuration>

五、编程题

1已知Linux系统为CentOs7系统,已知hadoop启动目录/simple/hadoop2.7.3/sbin,请依次写出命令。启动hadoop、查看hadoop进程是否全部启动、递归查看当前HDFS有那些文件、在HDFS的根目录创建input目录、在本地/simple目录下创建文件data.txt并上传到HDFS的/input目录下、将集群上的/input/data.txt下载到/appdata(该目录已存在)、最后关闭hadoop

[root@master /]#cd /simple/hadoop2.7.3/sbin
[root@master sbin]#start-all.sh
[root@master sbin]#jps
[root@master sbin]#hadoop fs -ls -R /
[root@master sbin]#hadoop fs -mkdir /input
[root@master sbin]#cd /simple
[root@master simple]#touch data.txt
[root@master simple]#hadoop fs -put data.txt /input
[root@master simple]#hadoop fs -get /input/data.txt /appdata
[root@master simple]#cd /simple/hadoop2.7.3/sbin
[root@master sbin]#stop-all.sh
  1. 已知当前hadoop已全部正常启动,且HDFS的根目录下不存在hdfstest的目录,用到的ip和端口写192.168.1.26:9000
    使用java api,在HDFS的根目录下,创建名为hdfstest的目录
import org.apache.hadoop.fs.FileSystem;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class MakeDir{
     
	public static void main(String[] args)throws IOException,InterruptedException{
     
		FileSystem fs = FileSystem.get(new URI("hdfs://192.168.1.26:9000"), new Configuration(), "root");
		Boolean flag = fs.mkdirs(new Path("/hdfstest"));
		System.out.println(flag?"创建成功":"创建失败");
	}
}
  1. MapReduce计算平均成绩,数据(已写好,计算即可)存放在hdfs的/input/data.txt里,用到的ip和端口写192.168.1.26:9000,当前hadoop已正常启动
    第一列为编号,第二列为成绩,用”\t”分隔,数据样式如下所示:
    9000 98
    9001 99
    9002 67
    9003 45
    9004 45
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import java.io.IOException;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.fs.Path;

public class Score {
     

	public static class Map extends Mapper<LongWritable,Text,Text,LongWritable>{
     
		private Text newkey = new Text("k");
		private LongWritable newvalue = new LongWritable();
		public void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{
     
			String lines = value.toString();
			String Arr[] = lines.split("\t");
			Long score = Long.parseLong(Arr[1]);
			newvalue.set(score);
			context.write(newkey,newvalue);
		}
	}
	
	public static class Reduce extends Reducer<Text,LongWritable,Text,Text>{
     
		private Text newkey = new Text("sum");
		private Text newvalue = new Text();
		public void reduce(Text key,Iterable<LongWritable> values,Context context) throws IOException,InterruptedException{
     
			long sum = 0;
			double count = 0;
			for(LongWritable value:values) {
     
				sum += value.get();
				count++;
			}
			newvalue.set((sum/count)+"");
			context.write(newkey,newvalue);
		}
	}
	
	public static void main(String[] args) throws Exception{
     
		Job job = Job.getInstance(new Configuration());
		job.setJarByClass(Score.class);
		job.setMapperClass(Map.class);
		job.setReducerClass(Reduce.class);
		
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(LongWritable.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(Text.class);
		
		FileInputFormat.setInputPaths(job,new Path("hdfs://192.168.1.26:9000/input/data1.txt"));
		FileOutputFormat.setOutputPath(job,new Path("hdfs://192.168.1.26:9000/output"));
		System.exit(job.waitForCompletion(true)?0:1);
	}
}

答案仅供参考,如果有错误,可以在评论区指正或者私信也行

你可能感兴趣的:(hadoop,hdfs,mapreduce)