大数据 hadoop 面试题

本文整理了关于Hadoop的一系列面试题目,涵盖了从安装配置到集群管理、MapReduce优化等多个方面,深入探讨了Hadoop的运作机制、数据处理流程及性能调优策略。内容包括Hadoop的安装步骤、集群中各进程的作用、Shell命令操作、数据倾斜处理、HDFS的副本策略、HBase的RowKey设计、Hadoop调度器及数据压缩算法等,全面展示了Hadoop开发和运维的知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

答:第一题:1使用root账户登录

2 修改IP

3 修改host主机名

4 配置SSH免密码登录

5 关闭防火墙

6 安装JDK

6 解压hadoop安装包

7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml

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 =FileSystem.get(conf);

if(fileSystem.exists(newPath(OUT_PATH))){}

fileSystem.delete(newPath(OUT_PATH),true);

Job job = newJob(conf,WordCount1.class.getSimpleName());

//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);

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;

for(LongWritable time :v2){

count += time.get();

}

context.write(v2, newLongWritable(count));

}

}

}

7.0 你认为用java , streaming , pipe方式开发map/reduce , 各有哪些优点

就用过 java 和 hiveQL。

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

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

8.0 hive有哪些方式保存元数据,各有哪些优点

三种:自带内嵌数据库derby,挺小,不常用,只能用于单节点

mysql常用

上网上找了下专业名称:single user mode..multiuser mode...remote user mode

9.0 请简述hadoop怎样实现二级排序(就是对key和value双排序)

第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。

第二种方法是,将值的一部分或

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值