Hadoop常见面试题整理及解答

Hadoop常见⾯试题整理及解答
Hadoop常见⾯试题整理及解答
⼀、基础知识篇:
1.把数据仓库从传统关系型数据库转到hadoop有什么优势?
答:
(1)关系型数据库成本⾼,且存储空间有限。⽽Hadoop使⽤较为廉价的机器存储数据,且Hadoop可以将⼤量机器构建成⼀个集,并在集中使⽤HDFS⽂件系统统⼀管理数据,极⼤的提⾼了数据的存储及处理能⼒。
(2)关系型数据库仅⽀持标准结构化数据格式,Hadoop不仅⽀持标准结构化数据格式,还⽀持⾮结构化(images,PDF,doc)以及半结构化( log,XML)数据格式。
(3)可以通过批处理作业和近实时(延迟在200ms~2s之间)流(Flume 和 Kafka)来获取数据。
(4)可以使⽤诸如 Spark 和 Impala 之类的⼯具在低延迟(⼩于 100 毫秒)下查询数据。
(5)可以存储海量数据。
2.请列出正常⼯作的Hadoop集中都启动了哪些进程,它们都有什么作⽤?
答:      ⼀共有NameNode、Secondary Namenode、ResourceManager、 DataNode、NodeManager五个进程。
NameNode功能:HDFS守护进程,维护和存储与HDFS⽂件系统有关元数据。
具体: 维护与⽂件系统相关元数据;管理⽤户对数据⽂件的访问;建⽴数据块与集中节点的映射关系;执⾏对⽂件系统的操作;为集中的DataNode成员提供注册服务并处理来⾃各个DataNode的周期性⼼跳;确定要复制的数据并删除超出的数据块;处理DataNode发送的块报告并维护数据块存储位置。
Secondary NameNode功能:⼀个冗余的守护进程,提供类似NameNode备份的功能。
具体: 定期检查NameNode的edits⽇志,并利⽤这些⽇志更新⾃⼰的fsimage⽂件,最后将更新后的fsimage复制到NameNode。
ResourceManager功能: YARN平台的守护进程,负责资源调度和管理,监控NodeManager。
具体:创建应⽤的第⼀个Container容器,该容器负责运⾏应⽤的ApplicationMaster;根据NodeManager发送的⼼跳信息管理DataNodes;运⾏调度器来决定集间的资源分配;管理集级的安全性;管理来⾃ApplicationMasters的资源请求;监控ApplicationMaster的状态,并在其发⽣故障时重新启动容器;在应⽤结束或过期后,解除分配的容器。
DataNode功能:⼯作节点,根据NameNode发送的指令,快速检索数据并提供读/写功能。
具体:通过在本地⽂件系统上存储数据块来提供存储功能;完成客户端对DataNodes上存储数据的读/写请求;创建和删除数据块;在集中复制数据;通过定期发送报告和⼼跳来与NameNode保持联系。
NodeManager功能:单个节点的资源管理,负责启动和管理容器。
具体:通过健康⼼跳和容器的状态通知与全局ResourceManager进⾏通信;注册并启动应⽤程序;向ApplicationManager请求启动ApplicationMaster和剩下的应⽤程序资源容器(也就是容器中运⾏的map和reduce任务);监督应⽤程序的⽣命周期;监控、管理和提供容器消耗有关资源的信息(CPU/内存);跟踪DataNodes的健康状况;监控容器资源的使⽤情况,并杀死失去控制的程序;通过聚合作业⽇志并将其保存到HDFS进⾏⽇志管理;提供针对YARN应⽤程序的辅助服务。辅助服务是为应⽤程序提供服务并由MapReduce框架⽤来进⾏其shuffle和排序操作的应⽤程序;维护节点级别的安全性。
3.⼤数据解决⽅案的关键步骤是什么?
答:提取数据、存储数据和处理数据。
4、关于 SecondaryNameNode 哪项是正确的?(C)
A.它是 NameNode 的热备
B.它对内存没有要求
C.它的⽬的是帮助 NameNode 合并编辑⽇志,减少 NameNode 启动时间
D. SecondaryNameNode 应与 NameNode 部署到⼀个节点
解析:SecondaryNameNode功能:定期检查NameNode的edits⽇志,并利⽤这些⽇志更新⾃⼰的fsimage⽂件,最后将更新后的fsimage 复制到NameNode,提⾼NameNode的启动速度,所以选项C正确。
5.讲⼀下Client读取HDFS⽂件的顺序流
1. Client向NameNode发起⽂件读取的请求。
2. NameNode返回⽂件存储的DataNode的信息。
3. Client读取⽂件信息。
6.讲⼀下Client写⼊HDFS⽂件的顺序流
1. Client向NameNode发起⽂件写⼊的请求。
2. NameNode根据⽂件⼤⼩和⽂件块配置情况,返回给Client它所管理部分DataNode的信息。
3. Client将⽂件划分为多个Block,根据DataNode的地址信息,按顺序写⼊到每⼀个DataNode块中。
端子板外部接线7.hadoop的主要端⼝都有哪些?
1. 50070:NameNode的http服务端⼝;
2. 8020:NameNode⽤于获取⽂件系统metadata信息,接收Client连接的RPC端⼝;
3. 50010:datanode服务端⼝,⽤于数据传输;
4. 8032:ResourceManager的applications manager(ASM)端⼝;
5. 8088:ResourceManage的http服务端⼝;
6. 19888:JobHistoryServer的http服务端⼝;
7. 50075:DataNode的http服务端⼝。
8.请列出Hadoop全部三种调度器并说明其⼯作⽅法。
1. FIFO调度器:先进先出调度器,是Hadoop的默认调度器,按照先到先得的策略来调度作业。
2. 容量调度器:⽀持多队列,每个队列按照预估资源利⽤率预先设置⼀定的容量,作业到来时会先进⼊⼀个剩余资源(该队列授权资源 -
该队列已⽤资源)最多的队列,然后这个队列会根据作业的优先级及提交顺序来执⾏这些作业。同时,容量调度器使⽤了预留和抢占的概念(这意味着如果需要,可能会杀死其他应⽤程序的容器,为新应⽤程序腾出空间)将资源返还给队列。
3. 公平调度器:公平调度是⼀种赋予作业(job)资源的⽅法,它的⽬的是让所有的作业随着时间的推移,都能平均的获取等同的共享资
源。所有的 job 具有相同的资源,当单独⼀个作业在运⾏时,它将使⽤整个集。当有其它作业被提交上来时,系统会将任务(task)空闲资源(container)赋给这些新的作业,以使得每⼀个作业都⼤概获取到等量的CPU时间。与Hadoop默认调度器维护⼀个作业队列不同,这个特性让⼩作业在合理的时间内完成的同时⼜不"饿"到消耗较长时间的⼤作业。公平调度可以和作业优先权搭配使⽤——优先权像权重⼀样⽤作为决定每个作业所能获取的整体计算时间的⽐例。同容量调度器类似,⽀持多队列多⽤户,每个队列中的资源量可以配置, 同⼀队列中的作业公平共享队列中所有资源。
9.简单介绍⼀下MapReduce
红黑电源隔离插座1. MapReduce是⼀个分布式计算框架。
2. 适⽤于⼤规模数据处理场景。
3. 每个job包含Map和Reduce两部分。
4. 优点:易于编程,可扩展性好,⾼容错性,⾼吞吐量。
5. 缺点:难以实时计算,不适合流式计算。
6. MapReduce执⾏过程:map→reduce
map部分:Mapper→Combiner→Partitioner
reduce部分:Shuffle and Sort→Reducer
7. 数据定义格式:
map: (K1,V1) → list (K2,V2)
reduce: (K2,list(V2)) → list (K3,V3)
10.请简述mapreduce中,combiner,partition作⽤
在MapReduce整个过程中,combiner是可有可⽆的,需要是⾃⼰的情况⽽定,如果只是单纯的对map输出的key-value进⾏⼀个统计,则不需要进⾏combiner,combiner相当于提前做了⼀个reduce的⼯作,减轻了reduce端的压⼒,Combiner只应该适⽤于那种Reduce的输⼊(key:value与输出(key:value)类型完全⼀致,且不影响最终结果的场景。⽐如累加,最⼤值等,也可以⽤于过滤数据,在map端将⽆效的数据过滤掉。
在这些需求场景下,输出的数据是可以根据key值来作合并的,合并的⽬的是减少输出的数据量,减少IO的读写,减少⽹络传输,以提⾼MR的作业效率。
Combiner相当于本地化的Reduce操作,在shuffle之前进⾏本地聚合,其输⼊和输出类型⼀致。
Partitioner⽤于在Map端对key进⾏分区,默认使⽤的是HashPartitioner,HashPartitioner先获取key的哈希值 ,然后使⽤key的哈希值对Reduce任务数求模,从⽽决定每条记录应该送到哪个Reducer处理,此外还可以⾃定义Partitioner
11.⽤ mapreduce 怎么处理数据倾斜问题
a.在加个combiner函数,加上combiner相当于提前进⾏reduce,就会把⼀个mapper中的相同key进⾏了聚合,减少shuffle过程中数据量,以及reduce端的计算量。这种⽅法可以有效的缓解数据倾斜问题,但是如果导致数据倾斜的key ⼤量分布在不同的mapper的时候,这种⽅法就不是很有效了。
b.局部聚合加全局聚合。第⼆种⽅法进⾏两次mapreduce,第⼀次在map阶段对那些导致了数据倾斜的key 加上1-n的随机前缀,这样之前相同的key 也会被分到不同的reduce中,进⾏聚合,这样的话就有那些倾斜的key进⾏局部聚合,数量就会⼤⼤降低。然后再进⾏第⼆次mapreduce这样的话就去掉随机前缀,进⾏全局聚合。这样就可以有效地降低mapreduce了。
12.datanode 在什么情况下不会备份
答:设置副本数只有1时。
13.简单谈谈hdfs数据压缩算法
答:Hadoop中常⽤的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才可以⽀持下⾯这张表,是⽐较官⽅⼀点的统计,不同的场合⽤不同的压缩算法。bzip2和GZIP是⽐较消耗CPU的,压缩⽐最⾼,GZIP不能被分块并⾏的处理;Snappy和LZO差不多,稍微胜出⼀点,cpu消耗的⽐GZIP少。
⼆、操作改错篇:
1.简要描述如何安装配置⼀个apache开源版hadoop,描述即可,列出步骤更好
1. 解压hadoop包,到指定安装⽂件夹。
2. 配置linux基本⽹络环境、jdk环境、防⽕墙环境。
3. 修改主机名,⽅便后⾯UI的访问。
4. 修改hadoop/etc/hadoop/conf下的配置⽂件,根据部署的模式和需要进⾏配置(如hadoop-env.sh,l , mapred-
5. 配置hadoop环境变量(如HADOOP_HOME,HADOOP_CONF_DIR,HADOOP_USER_NAME)
6. 格式化 hadoop namenode-format
7. 启动节点start-all.sh
2.启动hadoop报如下错误,该如何解决?
(1)error org.apache.hadoop.hdfs.server.namenode.NameNode
解决办法:不到主类,应该是配置⽂件的hadoop的安装位置配置错误,对hadoop-env.sh⽂件进⾏检查修改。
(2)org.apache.hadoop.hdfs.servermon.inconsistentFSStateException
解决办法:存储⽬录不存在,或者被删除,对namenode进⾏格式化,或重新格式化,对tmp.dir进⾏⾃⼰的设置。
(3)Directory /tmp/hadoop-root/dfs/name is in an inconsistent
解决办法:重新设置l中p.dir的值,对namenode进⾏格式化。
(4)tate storage direction does not exist or is not accessible?
解决办法:之前默认保存在tmp⽬录,每次重启都会清除这个数据,所以不到整个⽂件系统的信息,重新设置l中
3、hadoop节点的动态上线下线的⼤概操作
(1)节点上线:
关闭新增节点的防⽕墙。
在 NameNode节点的hosts⽂件中加⼊新增数据节点的hostname。
在每个新增数据节点的hosts⽂件中加⼊NameNode的hostname。
在NameNode节点上增加新增节点的SSH免密码登录的操作。
在NameNode节点上的dfs.hosts中追加上新增节点的hostname。
在其他节点上执⾏刷新操作:hdfs dfsadmin -refreshNodes。
在 NameNode 节点上,更改slaves⽂件,将要上线的数据节点hostname追加到slaves⽂件中。
启动DataNode节点。
经络油
查看NameNode的监控页⾯看是否有新增加的节点 。
(2)节点下线:
修改/l⽂件。
确定需要下线的机器,lude⽂件中配置好需要下架的机器,这个是阻⽌下架的机器去连接NameNode。
配置完成之后进⾏配置的刷新操作./bin/hadoop dfsadmin -refreshNodes,这个操作的作⽤是在后台进⾏block块的移动。
当执⾏三的命令完成之后,需要下架的机器就可以关闭了,可以查看现在集
上连接的节点,正在执⾏ Decommission,会显⽰:
Decommission Status : Decommission in progress 执⾏完毕后,会显⽰:
Decommission Status : Decommissioned
机器下线完毕,将他们从 excludes ⽂件中移除。
三、代码类:
1.请简述hadoop怎么样实现⼆级排序
有两种⽅法进⾏⼆次排序,分别为:buffer and in memory sort和 value-to-key conversion。
a.buffer and in memory sort:
主要思想是:在reduce()函数中,将某个key对应的所有value保存下来,然后进⾏排序。这种⽅法最⼤的缺点是:可能会造成out of memory。
b.value-to-key conversion:
主要思想是:将key和部分value拼接成⼀个组合key(实现WritableComparable接⼝或者调setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,
需要注意的是,⽤户需要⾃⼰实现Paritioner,以便只按照key进⾏数据划分。Hadoop显式的⽀持⼆次排序,在Configuration类中有个setGroupingComparatorClass()⽅法,可⽤于设置排序group的key值。
2、当前的⽇志采样格式为:
a,b,c,d
b,b,f,e
a,a,c,f
请⽤你最熟悉的语⾔编写⼀个map/reduce程序,计算第四列每个元素出现的个数。
public classWordCount1 {
public static final String INPUT_PATH ="hdfs://hadoop0:9000/in";
public static final String OUT_PATH ="hdfs://hadoop0:9000/out";
public static void main(String[] args)throws Exception {
Configuration conf =newConfiguration();
密封拉链FileSystem fileSystem =(conf);
ists(newPath(OUT_PATH))){}
fileSystem.delete(newPath(OUT_PATH),true);
Job job =newJob(conf,SimpleName());
//读取⽂件,解析成key,value对
FileInputFormat.setInputPaths(job,newPath(INPUT_PATH));
//对输⼊的key,value进⾏处理,转换成新的key,value对进⾏输出
job.setMapperClass(MyMapper.class);
job.setMapOutputKeyClass(Text.class);
二维码打印设备job.setMapOutputValueClass(LongWritable.class);
/
/对输出后的数据进⾏分区
//对分区后的数据进⾏排序,分组,相同key的value放到⼀个集合中
//对通过⽹络将map输出的数据拷贝到reduce节点
//对map输出的数据进⾏处理
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
FileOutputFormat.setOutputPath(job,new Path(OUT_PATH));
job.waitForCompletion(true);
}
static class MyMapper extendsMapper<LongWritable, Text, Text, LongWritable>{ @Override
protected void map(LongWritablek1, Text v1,
org.apache.hadoop.mapreduce.Mapper.Contextcontext)
棒材矫直机throws IOException,InterruptedException {
String[] split =v1.toString().split("\t");
for(String words :split){
context.write(split[3],1);
}
}
}
static class MyReducer extends Reducer<Text,LongWritable, Text, LongWritable>{ protected void reduce(Text k2,Iterable<LongWritable> v2,
org.apache.hadoop.mapreduce.Reducer.Contextcontext)
throws IOException,InterruptedException {
Long count =0L;

本文发布于:2024-09-22 23:20:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/134506.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   作业   节点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议