hadoop基本试题

以下内容纯手敲,转载请说明出处。
都是一些很基础的知识,各位看官不喜勿喷。

·······················我假装是分割线T-T····························

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.简单描述一下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>对,并作为任务的输出结果。

5.假如NameNode中没有数据会怎么样?

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

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

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

7.简单描述MapReduce不适合对哪些场景的使用?其实问的就是它的缺点。

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

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

BooleanWritable ByteWritable IntWritable FloatWritable LongWritable DoubleWritable
Text MapWritable ArrayWritable

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

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

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

yarn由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(容量调度器)。

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

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

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

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

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

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

14.简单描述一下hive中的分区表?

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

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

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

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

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

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

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

18.用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

19.根据如下要求编写对应的HQL语句(最起码要达到手写)

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

create database if not exists city with dbproperties('author'='limoumou','time'='2019-12-10');

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

drop database if exists city cascade;

3.在city数据库下创建一个外部表school,字段包含id,姓名,电话,根据班级设置分区(注意本地文件数据字段以"\t’分割的)

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

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

load data local inpath "/opt/module/hive/data/cla.txt" into table school partition(class="class");

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

select xuehao,name,phone from school where class=class;

目前就先写这么点吧,后续有时间的话继续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值