Hadoop⼤数据⾯试题(全)
以下资料来源于互联⽹,很多都是⾯试者们去⾯试的时候遇到的问题,我对其中有的问题做了稍许的修改了回答了部分空⽩的问题,其中⾥⾯有些考题出的的确不是很好,但是也不乏有很好的题⽬,这些都是基于真实的⾯试来的,希望对即将去⾯试或向继续学习hadoop,⼤数据等的朋友有帮助!
前⾔
用户登录界面的代码有⼀句话叫做三⼈⾏必有我师,其实做为⼀个开发者,有⼀个学习的氛围跟⼀个交流圈⼦特别重要这是⼀个我的⼤数据交流学习531629188不管你是⼩⽩还是⼤⽜欢迎⼊驻,正在求职的也可以加⼊,⼤家⼀起交流学习,话糙理不糙,互相学习,共同进步,⼀起加油吧。
1.0 简要描述如何安装配置apache的⼀个开源hadoop,只描述即可,⽆需列出具体步骤,列出具体步骤更好。
答:第⼀题:1使⽤root账户登录
2 修改IP
3 修改host主机名
4 配置SSH免密码登录
5 关闭防⽕墙
6 安装JDK
6 解压hadoop安装包
7 配置hadoop的核⼼⽂件 hadoop-env.sh,l , l , l
8 配置hadoop环境变量
9 格式化 hadoop namenode-format
10 启动节点start-all.sh
2.0 请列出正常的hadoop集中hadoop都分别需要启动 哪些进程,他们的作⽤分别都是什么,请尽量列的详细⼀些。
答:namenode:负责管理hdfs中⽂件块的元数据,响应客户端请求,管理datanode上⽂件block的均衡,维持副本数量Secondname:主要负责做checkpoint操作;也可以做冷备,对⼀定范围内数据做快
照性备份。
Datanode:存储数据块,负责客户端对数据块的io请求
Jobtracker :管理任务,并将任务分配给 tasktracker。
Tasktracker: 执⾏JobTracker分配的任务。
Resourcemanager
Nodemanager
Journalnode
Zookeeper
Zkfc
3.0请写出以下的shell命令
(1)杀死⼀个job
(2)删除hdfs上的 /tmp/aaa⽬录
(3)加⼊⼀个新的存储节点和删除⼀个节点需要执⾏的命令
答:(1)hadoop job –list 得到job的id,然后执 ⾏ hadoop job -kill jobId就可以杀死⼀个指定jobId的job⼯作了。(2)hadoopfs -rmr /tmp/aaa
(3) 增加⼀个新的节点在新的⼏点上执⾏
Hadoop daemon.sh start datanode
Hadooop daemon.sh start tasktracker/nodemanager
下线时,要在conf⽬录下的excludes⽂件中列出要下线的datanode机器主机名
然后在主节点中执⾏ hadoop dfsadmin -refreshnodes à下线⼀个datanode
删除⼀个节点的时候,只需要在主节点执⾏
hadoop mradmin -refreshnodes ---à下线⼀个tasktracker/nodemanager
4.0 请列出你所知道的hadoop调度器,并简要说明其⼯作⽅法
答:Fifo schedular :默认,先进先出的原则
Capacity schedular :计算能⼒调度器,选择占⽤最⼩、优先级⾼的先执⾏,依此类推。
Fair schedular:公平调度,所有的 job 具有相同的资源。
5.0 请列出你在⼯作中使⽤过的开发mapreduce的语⾔
答:java,hive,(python,c++)hadoop streaming
6.0 当前⽇志采样格式为
a ,
b ,
c , d
b , b , f , e
a , a , c , f
请你⽤最熟悉的语⾔编写mapreduce,计算第四列每个元素出现的个数
答:
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());
/
/1.0读取⽂件,解析成key,value对
FileInputFormat.setInputPaths(job,newPath(INPUT_PATH));
//2.0写上⾃⼰的逻辑,对输⼊的可以,value进⾏处理,转换成新的key,value对进⾏输出job.setMapperClass(MyMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//3.0对输出后的数据进⾏分区
//4.0对分区后的数据进⾏排序,分组,相同key的value放到⼀个集合中
//5.0对分组后的数据进⾏规约
//6.0对通过⽹络将map输出的数据拷贝到reduce节点
//7.0 写上⾃⼰的reduce函数逻辑,对map输出的数据进⾏处理
job.setReducerClass(MyReducer.class);
for属于汇编指令
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>{ 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);
}
}
mysql面试题导图}
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;
for(LongWritable time :v2){
count += ();
}
context.write(v2, newLongWritable(count));
}
}
}
7.0 你认为⽤java , streaming , pipe⽅式开发map/reduce , 各有哪些优点
就⽤过 java 和 hiveQL。
Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。
HiveQL 基本都是针对 hive 中的表数据进⾏编写,但对复杂的逻辑(杂)很难进⾏实现。写起来简单。
8.0 hive有哪些⽅式保存元数据,各有哪些优点
三种:⾃带内嵌数据库derby,挺⼩,不常⽤,只能⽤于单节点
mysql常⽤
上⽹上了下专业名称:single te user mode
9.0 请简述hadoop怎样实现⼆级排序(就是对key和value双排序)
第⼀种⽅法是,Reducer将给定key的所有值都缓存起来,然后对它们再做⼀个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。
第⼆种⽅法是,将值的⼀部分或整个值加⼊原始key,⽣成⼀个组合key。这两种⽅法各有优势,第⼀种⽅法编写简单,但并发度⼩,数据量⼤的情况下速度慢(有内存耗尽的危险),
第⼆种⽅法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇⽂章⾥选择的是第⼆种。我们将编写⼀个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同⼀个Reducer,还将编写⼀个Comparator,以便数据到达Reducer后即按原始key分组。
10.简述hadoop实现jion的⼏种⽅法
Map side join----⼤⼩表join的场景,可以借助distributed cache
Reduce side join
11.0 请⽤java实现⾮递归⼆分查询
1. public class BinarySearchClass
2. {
3.
4. public static int binary_search(int[] array, int value)
5. {
6. int beginIndex = 0;// 低位下标
7. int endIndex = array.length - 1;// ⾼位下标perl脚本使用教程
8. int midIndex = -1;
9. while (beginIndex <= endIndex) {
10.
midIndex = beginIndex + (endIndex - beginIndex) / 2;//防⽌溢出
11. if (value == array[midIndex]) {
12.
return midIndex;
13. } else if (value < array[midIndex]) {
14.
endIndex = midIndex - 1;
15. } else {
16.
beginIndex = midIndex + 1;
17. }
18.
}
19. return -1;
20.
//到了,返回到的数值的下标,没到,返回-1
21. }
22.
23.
24.
//start 提⽰:⾃动阅卷起始唯⼀标识,请勿删除或增加。
25. public static void main(String[] args)
26.
{
27. System.out.println("");
28.
int[] myArray = new int[] { 1, 2, 3, 5, 6, 7, 8, 9 };
29. System.out.println("查数字8的下标:");
30.
System.out.println(binary_search(myArray, 8));
31. }
32.
//end //提⽰:⾃动阅卷结束唯⼀标识,请勿删除或增加。
33. }
12.0 请简述mapreduce中的combine和partition的作⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论