关于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>对,并作为任务的输出结果。

**

扫描二维码关注公众号,回复: 9106642 查看本文章

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 f o r v a l u e i n " 1 for value in " @"
do
if [ $value -gt m a x ] t h e n m a x = 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 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 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拷贝文件至本地

发布了18 篇原创文章 · 获赞 2 · 访问量 382

猜你喜欢

转载自blog.csdn.net/CH_Axiaobai/article/details/103338071