当前位置:文档之家› hadoop面试题

hadoop面试题

Hadoop就业面试宝典1.0简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。

答:1使用root账户登录2 修改IP3 修改host主机名4 配置SSH免密码登录5 关闭防火墙6 安装JDK7 解压hadoop安装包8 配置hadoop的核心文件hadoop-env.sh,core-site.xml , mapred-site.xml ,hdfs-site.xml9 配置hadoop环境变量10 格式化hadoop namenode-format11 启动节点start-all.sh2.0 请;列出正常的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别都是什么,请尽量列的详细一些。

答:namenode:管理集群,存储数据的原信息,并管理记录datanode中的文件信息。

Secondname:可以做冷备,对一定范围内数据做快照性备份。

Datanode:存储数据Jobtracker :管理任务,并将任务分配给tasktracker。

Tasktracker: 执行JobTracker分配的任务。

3.0请写出以下的shell命令(1)杀死一个job(2)删除hdfs上的/tmp/aaa目录(3)加入一个新的存储节点和删除一个节点需要执行的命令答:(1)hadoop job –list 得到job的id,然后执行hadoop job -kill jobId就可以杀死一个指定jobId的job工作了。

(2)hadoop fs -rmr /tmp/aaa(3) 增加一个新的节点在新的几点上执行Hadoop daemon.sh start datanodeHadooop daemon.sh start tasktracker然后在主节点中执行hadoop dfsadmin -refreshnodes删除一个节点的时候,只需要在主节点执行hadoop mradmin -refreshnodes4.0请列出你所知道的hadoop调度器,并简要说明其工作方法答:Fifo schedular :默认,先进先出的原则Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。

Fair schedular:公平调度,所有的job 具有相同的资源。

5.0请列出你在工作中使用过的开发mapreduce的语言答:java,hive6.0当前日志采样格式为a ,b ,c , db , b , f , ea , a , c , f请你用最熟悉的语言编写mapreduce,计算第四列每个元素出现的个数Static final String答:public class WordCount1 {public static final String INPUT_PA TH = "hdfs://hadoop0:9000/in";public static final String OUT_PATH = "hdfs://hadoop0:9000/out";public static void main(String[] args) throws Exception {Configuration conf = new Configuration();FileSystem fileSystem = FileSystem.get(conf);if(fileSystem.exists(new Path(OUT_PA TH))){}fileSystem.delete(new Path(OUT_PA TH),true);Job job = new Job(conf,WordCount1.class.getSimpleName());//1.0读取文件,解析成key,value对FileInputFormat.setInputPaths(job,new Path(INPUT_PA TH));//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);job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);FileOutputFormat.setOutputPath(job, new Path(OUT_PA TH));job.waitForCompletion(true);}static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>{ @Overrideprotected void map(LongWritable k1, Text v1,org.apache.hadoop.mapreduce.Mapper.Context context)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.Context context)throws IOException, InterruptedException {Long count = 0L;for(LongWritable time : v2){count += time.get();}context.write(v2, new LongWritable(count));}}}7.0你认为用java ,streaming ,pipe方式开发map/reduce ,各有哪些优点就用过java 和hiveQL。

Java 写mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。

HiveQL 基本都是针对hive 中的表数据进行编写,但对复杂的逻辑很难进行实现。

写起来简单。

8.0 hive有哪些方式保存元数据,各有哪些优点三种:内存数据库derby,挺小,不常用。

本地mysql。

常用远程端mysql。

不常用上网上找了下专业名称:single user mode..multi user mode...remote user mode9.0 请简述hadoop怎样实现二级排序第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer 内排序。

但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。

第二种方法是,将值的一部分或整个值加入原始key,生成一个合成key。

这两种方法各有优势,第一种方法可能会更快一些(但有内存耗尽的危险),第二种方法则是将排序的任务交给MapReduce框架,更符合Hadoop/Reduce的设计思想。

这篇文章里选择的是第二种。

我们将编写一个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同一个Reducer,还将编写一个Comparator,以便数据到达Reducer后即按原始key分组。

10.简述hadoop实现jion的几种方法利用dataJoin来实现mapreduce的jion问题。

11.0 请用java实现非递归二分查询1.public class BinarySearchClass2.{3.4. public static int binary_search(int[] array, int value)5. {6. int beginIndex = 0;// 低位下标7. int endIndex = array.length - 1;// 高位下标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. //找到了,返回找到的数值的下标,没找到,返回-121. }22.23.24. //start 提示:自动阅卷起始唯一标识,请勿删除或增加。

25. public static void main(String[] args)26. {27. System.out.println("Start...");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 //提示:自动阅卷结束唯一标识,请勿删除或增加。

相关主题