1. namenode的重要性是什么?
namenode的作用在Hadoop中非常重要。它是Hadoop的大脑,主要负责管理系统上的分配块,还为客户提出请求时的数据提供特定地址
2. 当NameNode关闭时会发生什么?
如果NameNode关闭,文件系统将脱机。
3. 是否可以在不同集群之间复制文件?如果是的话,怎么能做到这一点?
是的,可以在多个Hadoop集群之间复制文件,这可以使用分布式复制来完成。Distcp是一个Hadoop复制工具,主要用于执行MapReduce作业来复制数据。 Hadoop环境中的主要挑战是在各集群之间复制数据,distcp也将提供多个datanode来并行复制数据。
4. 什么是检查点?
对文件数据的修改不是直接写回到磁盘的,很多操作是先缓存到内存的Buffer中,当遇到一个检查点Checkpoint时,系统会强制将内存中的数据写回磁盘,当然此时才会记录日志,从而产生持久的修改状态。因此,不用重放一个编辑日志,NameNode可以直接从FsImage加载到最终的内存状态,这肯定会降低NameNode启动时间
5. 什么是机架感知?
这是一种决定如何根据机架定义放置块的方法。Hadoop将尝试限制存在于同一机架中的datanode之间的网络流量。为了提高容错能力,名称节点会尽可能把数据块的副本放到多个机架上。综合考虑这两点的基础上Hadoop设计了机架感知功能。
6. 投机性执行
如果一个节点正在执行比主节点慢的任务。那么就需要在另一个节点上冗余地执行同一个任务的一个实例。所以首先完成的任务会被接受,另一个可能会被杀死。这个过程被称为“投机执行”。
7. 是否可以在Windows上运行Hadoop?
可以,但是最好不要这么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系统。在Hadoop安装中,Windows通常不会被使用,因为会出现各种各样的问题。因此,Windows绝不是Hadoop推荐系统。
8. 主动和被动“名称节点”是什么?
在HA(高可用性)架构中,我们有两个NameNodes - Active“NameNode”和被动“NameNode”。
活动“NameNode”是在集群中运行的“NameNode”。
被动“NameNode”是一个备用的“NameNode”,与“NameNode”有着相似的数据。
当活动的“NameNode”失败时,被动“NameNode”将替换群集中的活动“NameNode”。因此,集群永远不会没有“NameNode”,所以它永远不会失败。
9. 如果 NameNode 意外终止,SecondaryNameNode 会接替它使集群继续工作
错误,SecondaryNameNode是帮助恢复,而不是替代,如何恢复,可以查看
10. Block Size 是不可以修改的
它是可以被修改的Hadoop 的基础配置文件是 hadoop-default.xml,默认建立一
个 Job 的时候会建立 Job 的 Config,Config 首先读入hadoop-default.xml 的配置,然
后再读入 hadoop-site.xml 的配置(这个文件初始的时候配置为空),hadoop-site.xml 中主要配置需要覆盖的hadoop-default.xml 的系统级配置
11. 请列出你所知道的hadoop调度器,并简要说明其工作方法
--1.先进先出调度器(FIFO)
--Hadoop 中默认的调度器,也是一种批处理调度器。它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业
--2.容量调度器(Capacity Scheduler)
--支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制
--3.公平调度器(Fair Scheduler)
--公平调度是一种赋予作业(job)资源的方法,它的目的是让所有的作业随着时间的推移,都能平均的获取等同的共享资源。所有的 job 具有相同的资源,当单独一个作业在运行时,它将使用整个集群。当有其它作业被提交上来时,系统会将任务(task)空闲资源(container)赋给这些新的作业,以使得每一个作业都大概获取到等量的CPU时间。与Hadoop默认调度器维护一个作业队列不同,这个特性让小作业在合理的时间内完成的同时又不"饿"到消耗较长时间的大作业。公平调度可以和作业优先权搭配使用——优先权像权重一样用作为决定每个作业所能获取的整体计算时间的比例。同计算能力调度器类似,支持多队列多用户,每个队列中的资源量可以配置, 同一队列中的作业公平共享队列中所有资源。
12. 请简述mapreduce中,combiner,partition作用?
在MapReduce整个过程中,combiner是可有可无的,需要是自己的情况而定,如果只是单纯的对map输出的key-value进行一个统计,则不需要进行combiner,combiner相当于提前做了一个reduce的工作,减轻了reduce端的压力,
Combiner只应该适用于那种Reduce的输入(key:value与输出(key:value)类型完全一致,且不影响最终结果的场景。比如累加,最大值等,也可以用于过滤数据,在 map端将无效的数据过滤掉。
在这些需求场景下,输出的数据是可以根据key值来作合并的,合并的目的是减少输出的数据量,减少IO的读写,减少网络传输,以提高MR的作业效率。
1.combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量.
2.combiner最基本是实现本地key的归并,具有类似本地reduce,那么所有的结果都是reduce完成,效率会相对降低。
3.使用combiner,先完成的map会在本地聚合,提升速度.
--partition意思为分开,分区。它分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。其实可以理解归类。也可以理解为根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理
partition的作用就是把这些数据归类。每个map任务会针对输出进行分区,及对每一个reduce任务建立一个分区。划分分区由用户定义的partition函数控制,默认使用哈希函数来划分分区。
HashPartitioner是mapreduce的默认partitioner。计算方法是
which reducer=(key.hashCode() &Integer.MAX_VALUE) % numReduceTasks,得到当前的目的reducer
13. hadoop的优化
1)优化的思路可以从配置文件和系统以及代码的设计思路来优化
2)配置文件的优化:调节适当的参数,在调参数时要进行测试
3)代码的优化:combiner的个数尽量与reduce的个数相同,数据的类型保持一致,可以减少拆包与封包的进度
4)系统的优化:可以设置linux系统打开最大的文件数预计网络的带宽MTU的配置
5)为 job 添加一个 Combiner,可以大大的减少shuffer阶段的maoTask拷贝过来给远程的reduce task的数据量,一般而言combiner与reduce相同。
6)在开发中尽量使用stringBuffer而不是string,string的模式是read-only的,如果对它进行修改,会产生临时的对象,二stringBuffer是可修改的,不会产生临时对象。
转载地址:https://mp.weixin.qq.com/s?__biz=Mzg2MTA1ODcyNg==&mid=2247484009&idx=1&sn=65ad5a43912ecbbaf0d898bac040a394&chksm=ce1da1a0f96a28b6be43f6400699df11be424112c08cfb10ae1571fdc690237c7c0be8edfb53&mpshare=1&scene=1&srcid=0409YSLSd7AthICnaHyP6BP0&pass_ticket=cHOjt0lQWGCK80MYTq1GZmaETWjF322dDaJxzhLjlzlXrBHVeY0uNWCmdFfMa66O#rd