Hadoop经典面试题

1. 简单描述你对Hadoop集群SafeMode模式的理解?

集群处于安全模式,不能执行重要操作(写操作),集群属于只读状态。但是严格来说,只是保证HDFS元数据信息的访问,而不保证文件的访问。集群启动完成后,自动退出安全模式, 如果集群处于安全模式,想要完成写操作,需要离开安全模式。

1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) 
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态) 
(3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态) 
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)。 

对于全新创建的HDFS集群,NameNode启动后不会进入安全模式,因为没有Block信息。

2.什么是hive,谈谈你的理解?

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
补充 1)Hive处理的数据存储在HDFS
2)Hive分析数据底层的实现是MapReduce
3)执行程序运行在Yarn上

3.是否可以在Windows上运行Hadoop?

你最好不要这么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系统。在Hadoop安装中,Windows通常不会被使用,因为会出现各种各样的问题。因此,Windows绝对不是Hadoop的推荐系统。

4.在MapReduce处理任务时,简单描述经过哪节基本流程?

见hadoop课件mapreduce流程图

5.简答描述以下TextInputFormat怎么进行文件切分?

TextInputFormat根据文件大小将文件拆分成splits,如果单个文件较小,则每个个文件为一个split,并将文件按行分割形成<key,value>对,如果单个文件较大。超过block块默认大小的1.1倍,则会将文件切分为多个split。

这一步由MapReduce框架自动完成,其中偏移量包括了回车所占的字符数。将分割好的<key,value>对交给用户定义的map方法进行处理,生成新的<key,value>对。得到map方法输出的<key,value>对后,Mapper会将它们按照key值进行排序,并执行Combine过程,将key至相同value值累加,得到Mapper的最终输出结果。Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的<key,value>对,并作为任务的输出结果。

6.假如Namenode中没有数据会怎么样?

首先说明Namenode节点肯定不正常,集群肯定不正常得,没有数据的Namenode就不能称之为Namenode,通常情况下,Namenode肯定会有数据,并且存储的是元数据。

7.如何实现服务器之间的免密登录(便捷版),SSH采用的是什么加密?

实现免密登录步骤:
1. 在服务器生成密钥对 ssh-keygen -t rsa 三次回车
2. 发送公钥到本机 ssh-copy-id hostname(服务器主机名,一般先发给自己实现本机免密登录) 输入一次密码
3.将.ssh文件夹中的文件分别分发至集群中其他服务器(节点)
SSH SSH 为建立在应用层基础上的安全协议,采用非对称加密(rsa加密算法)

8.简单描述MapReduce不合适对哪些场景的使用,其实问得就是他得缺点?

(1).MapReduce不适合做低延迟数据访问场景的使用。
(2).MapReduce不适合处理大量小文件。
(3).MapReduce不适合处理流式计算。

9.MapReduce的基本数据类型包括哪些?

BooleanWritable ByteWritable IntWritable FloatWritable LongWritable DoubleWritable
Text MapWritable ArrayWritable

10.Hive内部表和外部表的区别?

我们再创建外部表的时候要加个关键字 external
内部表 : 当我们在hive中使用命令删除hive表时 hive所对应的hdfs的目录也会被删除, 元数据库中的数据也被删除
外部表 : 在hive中删除了外部表 而外部表所对应的hdfs目录不会被删除 元数据库被删除。

11.yarn有哪几部分组成,作用分别是什么?调度器主要有哪三种,hadoop默认的是哪一种?

由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。
ResourceManager:处理客户端请求、监控NodeManager、启动或监控ApplicationMaster、资源的分配与调度
NodeManager:管理单个节点上的资源、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令
ApplicationMaster:负责数据的切分、为应用程序申请资源并分配给内部的任务、任务的监控与容错
Container:Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
调度器:FIFO、Capacity Scheduler(容量调度器)和Fair Scheduler(公平调度器)。
Hadoop2.7.2默认的资源调度器是Capacity Scheduler(容量调度器)

12.如果需要在namenode节点群起集群,你需要如何配置?

首先确保你得集群配置是正确得,单点启动能够成功,如果要群起我们需要在etc/hadoop/Slaves文件中添加数据节点,也就是从节点,来告诉namenode群起的时候启动那些从节点(datanode)

13.简单描述Shuffle过程环形缓冲区的作用?

数据从map()输出,经过Partitioner分区操作,在进入环形缓冲区。默认情况下,环形缓冲区大小值为100MB。
当map输入的数据进入环形缓冲区的量达到80MB以上时,那么开始执行溢写过程,溢写过程中如果有其他数据进入,那么由剩余的百分之20反向写入。最终溢写文件经过合并、排序后落入本地磁盘。

14.Mapreduce执行过程中,在执行Reduce Task之前主要做哪些工作?

reduce task在执行之前的工作是不断地拉取当前job里每个map task的最终的输出文件,然后将不同maptask中某一分区的数据不断地做merge,也最终形成一个文件作为reduce task的输入文件交给reduce

15.简答描述一下hive中的分区表?

Hive的分区表分为动态分区和静态分区两种模式,分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。
Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。

16.hdfs-site.xml的3个主要属性?

dfs.name.dir决定的是元数据存储的路径以及DFS的存储方式(磁盘或是远端)
dfs.data.dir决定的是数据存储的路径
fs.checkpoint.dir用于第二Namenode

17.完全分布模式有什么注意点?

完全分布式集群通常被用于生产环境,这里我们使用N台主机组成一个Hadoop集群,需要合理的搭配个服务器运行节点,Hadoop守护进程运行在每台主机之上。
这里会存在Namenode运行的主机,Datanode运行的主机,SecondaryNameNode运行的节点,以及task tracker运行的主机,我们需要设置ResourceManager运行的主机,NodeManager运行的主机。
在分布式环境下,主节点和从节点会分开。

18.Hadoop集群可以运行的3个模式?

单机(本地)模式      
伪分布式模式      
全分布式模式

19.用一句话总结Combiner的作用和意义?

Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量。

20.用shell脚本完成如下功能,求极值,根据输入数据,输出最大,最小值(达到手写的程度

read -p "请输入求值规则:" RULE
echo $RULE
if [ $RULE -eq 1 ]
then
        max=$1
        for value in "$@"
        do
                if [ $value -gt $max ]
                then
                        max=$value
                fi
        done
        echo "最大值为:" $max
elif [ $RULE -eq 0 ]
then
        mix=$1

        for value in "$@"
        do
                if [ $value -lt $mix ]
                then
                        mix=$value
                fi
        done
        echo "最小值为:" $mix
else
        echo "未知命令"
fi

21.编写一个最基本的wordcount单词统计的mapreduce(达到手写的程度,可以参照上课的代码样例)
提示信息如下map方法和reduce方法

 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {}

 protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {}
//Map端
public class WcMapper extends Mapper<LongWritable,Text,Text,IntWritable> {
    private Text word = new Text();
    private IntWritable one = new IntWritable(1);
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        String line = value.toString();
        System.out.println(line);
        String[] words = line.split(" ");
        for (String word : words) {
            this.word.set(word);
            context.write(this.word,one);  
        }
    }
}
//Reduce端
public class WcReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable total = new IntWritable();
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable value : values) {
            sum += value.get();
        }
        total.set(sum);
        context.write(key,total);
    }
}

22.根据如下要求编写对应的HQL语句(手写代码的程度)

1.创建一个名为class20的数据库(存在则创建,不存在则不创建),添加两个属性,创建人和创建时间。

create database if not exists class21 with dbproperties('author'='limoumou','createdate'='2019-11-12');

2.强制删除class20(含有表,表中有数据)的数据库。

drop database if exists class20 cascade;

3.在class20数据库下创建一个外部表students,字段包含id,姓名、成绩、学号,电话,根据班级设置分区(注意本地文件数据字段以“\t”分割的)

create table if not exists students(id int,name string,score int,xuehao string, phone string) partitioned by (classnum string) row format delimited fields terminated by "\t";

4.将本地数据路径为/opt/module/hive/data/students.txt 文件数据追加到students表中的class20分区中

load data local inpath "/opt/module/hive/data/students.txt" into table students partition(classnum="class20");

5.查询students表中class20分区内的学生的学号,姓名,电话

select xuehao,name,phone from students where classnum=class20;

23.列出常用的hdfs 命令(至少10个,并说明命令的作用)
Hadoop fs | hdfs dfs 命令分类

//本地文件 ->  HDFS

 -put   将本地数据上传至hdfs
 -copyFromLocal 将本地文件数据拷贝到hdfs
 -moveFromLocal 将本地文件数据移动到hdfs,成功后本地数据会删除
 -appendToFile 追加一个文件到已经存在的文件末尾

		 
//HDFS与HDFS之间

   -ls  查看hdfs文件目录
   -mkdir 在HDFS上创建目录
   -rm 删除文件或者文件夹
   -rmr   递归删除
   -cp  从一个目录拷贝文件至另一目录
   -mv 在HDFS目录中移动文件
   -chown  修改文件所属用户权限
   -chmod  修改文件所属读写权限
   -du -h   文件夹暂用的空间大小
   -df -h   查看系统分区情况
   -cat 查看文件
  
//HFDS -> 本地

  -get  从hdfs下载文件至本地
  -getmerge  合并hdfs目录下的文件至本地
  -copyToLocal  从hdfs拷贝文件至本地
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值