合肥工业大学2022大数据技术作业

1、如何解除Hadoop系统的安全模式?

(1)在HDFS配置文件中修改安全模式阀值
在hadoop的安装目录中的hdfs-site.xml中设置安全阀值属性,属性值默认为0.999f,如果设为1则不进行安全检查



dfs.safemode.threshold.pct

0.999f



Specifies the percentage of blocks that should satisfy

the minimal replication requirement defined by

dfs.replication.min.

Values less than or equal to 0 mean not to wait for any particular

percentage of blocks before exiting safemode.

Values greater than 1 will make safe mode permanent.



把其中的0.999f改为1f



dfs.safemode.threshold.pct

1f



Specifies the percentage of blocks that should satisfy

the minimal replication requirement defined by

dfs.replication.min.

Values less than or equal to 0 mean not to wait for any particular

percentage of blocks before exiting safemode.

Values greater than 1 will make safe mode permanent.



这样更改配置文件,将会永久性解决hadoop安全模式启动的问题

(2)直接在bash输入指令脱离安全模式

用户可以通过dfsadmin -safemode value 指令来操作安全模式,参数value的说明如下:

enter - 进入安全模式

leave - 强制NameNode离开安全模式

get - 返回安全模式是否开启的信息

wait - 等待,一直到安全模式结束。

两种方法对比:

方法一:可以一劳永逸,但是有风险。

方法二:需要在每次重启hdfs集群的时候都要输入。

2、为什么HDFS不适合低延迟数据访问?

HDFS 的设计⽬标有⼀点是:处理⼤型数据集,⾼吞吐率。由于hadoop针对高数据吞吐量做了优化,牺牲了获取数据的延迟,所以对于低延迟数据访问,不适合hadoop,对于低延迟的访问需求,HBase是更好的选择.

3、为什么HDFS无法高效存储大量小文件?

(1).小文件数量过多(例如图片)会占用批量占用namenode的内存,浪费block,因为每个储存在HDFS中的文件的元数据(包括目录树,位置信息,命名空间镜像,文件编辑信息)都会在namenode中占用150b的内存,如果namenode存储空间满了,就不能继续存储新文件了。

(2).如果有多小文件,会造成寻道时间>=读取文件时间(传输文件时间=寻道时间+读取文件时间),这与HDFS的原理想违背,hdfs的设计是为了减小寻道时间,是其远小于读取文件的时间。

4、为什么HDFS不支持多用户写入及任意修改文件?

不支持多用户写入:HDFS只支持单用户写,因为需要创建副本所以怕冲突,并且若加入多用户写入特性可能会使效率降低;

不能任意修改文件:HDFS 本来就不是适合频繁写入的文件系统, 它流式读取的方式,不适合任意位置写入;它比较适合一次写入,多次使用。

目前 Hadoop 只支持单用户写,不支持并发多用户写。可以使用 Append 操作在文件的末尾添加数据,但不支持在文件的任意位置进行修改。

5、HDFS如何解决名称节点运行期间EditLog不断变大的问题?

解决方案:利用SecondaryNameNode第二名称节点

第二名称节点是HDFS架构中的一个组成部分,用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间。(SecondaryNameNode一般是单独运行在一台机器上)

合肥工业大学2022大数据技术作业_第1张图片 

图 SecondaryNameNode的工作情况

SecondaryNameNode的工作情况:(1)SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edits.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别;(2)SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下;(3)SecondaryNameNode将下载下来的FsImage载入到内存,然后一条一条地执行EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并;(4)SecondaryNameNode执行完(3)操作之后,会通过post方式将新的FsImage文件发送到NameNode节点上(5)NameNode将从SecondaryNameNode接收到的新的FsImage替换旧的FsImage文件,同时将edits.new替换EditLog文件,通过这个过程EditLog就变小了

6、Map任务为什么要进行分区操作,如何分区?

(1).为什么需要分区操作:

假设始终使用一个分区,在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了 MapReduce 所提供的并行架构的优势。但是,如果使用一个 partitioner 来描述结果,运行多个 ruduce 任务,运行partition 时,将数据分配到每个 reduce 中,最后合并输出文件,就得到了有意义的最终结果。在将map()函数处理后得到的(key,value)对写入到缓冲区之前,需要先进行分区操作,这样就能把map任务处理的结果发送给指定的reducer去执行,从而达到负载均衡,避免数据倾斜。

(2).如何进行分区操作:

MapReduce提供默认的分区类(HashPartitioner),我们也可以自定义分区,让其继承Partitioner类,并重写getPartition()方法,让其针对不同情况返回不同数值即可。并在最后通过job设置指定分区类和reducer任务数量即可。

7、MapReduce中多个Reduce任务的结果会做进一步的处理么?为什么?

会,因为reducetask根据自己的分区号,去各个maptask机器上取相应的结果分区数据,取到同一个分区的来自不同maptask的结果文件,reducetask会将这些文件再进行合并(归并排序)形成大文件。

8.参照“第四章-MapReduce”中的图4-7、4-8和4-9,如果有两个Reduce任务,重新画出用户没有定义Combiner时的MapReduce过程示意图,并简要说明Shuffle过程。

 

你可能感兴趣的:(大数据技术,大数据,hadoop,hdfs)