大数据 hadoop 经典面试题 | 二

版权声明:版权所有,转载请注明出处.谢谢 https://blog.csdn.net/weixin_35353187/article/details/83019259

1、简要描述如何安装配置Hadoop,只需描述,无需列出具体步骤

1、使用root账户登录。

2、修改IP。

3、修改Host主机名。

4、配置SSH免密码登录。

5、关闭防火墙。

6、安装JDK。

7、上传解压Hadoop安装包。

8、配置Hadoop的核心配置文件hadoop-evn.sh,core-site.xml,mapred-site.xml,hdfs-site.xml

9、配置hadoop环境变量

10、格式化hadoop namenode-format

11、启动节点start-all.sh

2、请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么

NameNode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量

SecondlyNameNode:主要负责checkpoint操作,也可以做冷备,对一定范围内数据做快照性备份。

DataNode:存储数据块,负责客户端对数据块的io请求

JobTracker:管理任务,并将任务分配给TaskTracter。

TaskTracker:执行JobTracker分配的任务。

3、请写出以下的shell命令

杀死一个Job:

hadoop job -list 得到job的id,然后执行hadoop job -kill jobId就可以杀死一个指定的JobId的job工作了

删除hdfs上的/tmp/aaa目录

hadoop fs -rmr /tmp/aaa

加入一个新的存储节点和删除一个节点

增加一个新的节点,在新的节点上执行:

hadoop daemon.sh start datanode

Hadooop  daemon.sh  start   tasktracker/nodemanager

下线时,要在conf目录下的excludes文件中列出要下线的datanode机器主机名,然后在主节点中执行  

hadoop   dfsadmin  -refreshnodes  下线一个datanode

删除一个节点的时候,只需要在主节点执行

 hadoop mradmin  -refreshnodes  下线一个tasktracker/nodemanager、

4、请列出你所知道的hadoop调度器,并简要说明其工作方法

Fifo schedular :                    默认,先进先出的原则

Capacity schedular :            计算能力调度器,选择占用最小、优先级高的先执行,依此类推。

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

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

就用过 java 和 hiveQL。

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

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

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

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

第二种方法是,将值的一部分或整个值加入原始key,生成一个组合key。这两种方法各有优势,第一种方法编写简单,但并发度小,数据量大的情况下速度慢(有内存耗尽的危险),

第二种方法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇文章里选择的是第二种。我们将编写一个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同一个Reducer,还将编写一个Comparator,以便数据到达Reducer后即按原始key分组。

7、请简述mapreduce中的combine和partition的作用

combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。

partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊

8、hive内部表和外部表的区别

Hive 向内部表导入数据时,会将数据移动到数据仓库指向的路径;若是外部表,数据的具体存放目录由用户建表时指定

在删除表的时候,内部表的元数据和数据会被一起删除, 

而外部表只删除元数据,不删除数据。

这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 

9、Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?

rowKey最好要创建有规则的rowKey,即最好是有序的。

经常需要批量读取的数据应该让他们的rowkey连续;

将经常需要作为条件查询的关键词组织到rowkey中;

列族的创建:

按照业务特点,把数据归类,不同类别的放在不同列族

10、用mapreduce怎么处理数据倾斜问题

让各分区的数据分布均匀

可以根据业务特点,设置合适的partition策略

如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理

11、hadoop框架怎么来优化

可以从很多方面来进行:比如hdfs怎么优化,mapreduce程序怎么优化,yarn的job调度怎么优化,hbase优化,hive优化

12、hbase内部机制是什么

Hbase是一个能适应联机业务的数据库系统

物理存储:hbase的持久化数据是存放在hdfs上

存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上

Region内部还可以划分为store,store内部有memstore和storefile

版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并

Region的split

集群管理:zookeeper  +  hmaster(职责)  + hregionserver(职责)

13、我们在开发分布式计算job的时候,是否可以去掉reduce阶段

可以,例如我们的集群就是为了存储文件而设计的,不涉及到数据的计算,就可以将mapReduce都省掉。

比如,流量运营项目中的行为轨迹增强功能部分

14、 hadoop中常用的数据压缩算法

Lzo、Gzip、Default、Snapyy

如果要对数据进行压缩,最好是将原始数据转为Sequence File  或者 Parquet File(spark)

15、mapreduce的调度模式(题意模糊,可以理解为yarn的调度模式,也可以理解为mr的内部工作流程)

appmaster作为调度主管,管理maptask和reducetask

Appmaster负责启动、监控maptask和reducetask

Maptask处理完成之后,appmaster会监控到,然后将其输出结果通知给reducetask,然后reducetask从map端拉取文件,然后处理;

当reduce阶段全部完成之后,appmaster还要向resourcemanager注销自己

16、hive底层与数据库交互原理

Hive的查询功能是由hdfs + mapreduce结合起来实现的

Hive与mysql的关系:只是借用mysql来存储hive中的表的元数据信息,称为metastore

17、hbase过滤器实现原则

可以说一下过滤器的父类(比较过滤器,专用过滤器)

过滤器有什么用途:

增强hbase查询数据的功能

减少服务端返回给客户端的数据量

18、reduce之后数据的输出量有多大(结合具体场景,比如pi)

Sca阶段的增强日志(1.5T---2T)

过滤性质的mr程序,输出比输入少

解析性质的mr程序,输出比输入多(找共同朋友)

19、datanode在什么情况下不会备份数据

在客户端上传文件时指定文件副本数量为1

20、combine出现在哪个过程

shuffle过程中

具体来说,是在maptask输出的数据从内存溢出到磁盘,可能会调多次Combiner使用时候要特别谨慎,不能影响最后的逻辑结果

21、hdfs的体系结构

集群架构:  

namenode   datanode  secondarynamenode (active namenode ,standby namenode) journalnode  zkfc

内部工作机制:

数据是分布式存储的

对外提供一个统一的目录结构

对外提供一个具体的响应者(namenode)

数据的block机制,副本机制

Namenode和datanode的工作职责和机制

读写数据流程

22、flush的过程

flush是在内存的基础上进行的,首先写入文件的时候,会先将文件写到内存中,当内存写满的时候,一次性的将文件全部都写到硬盘中去保存,并清空缓存中的文件。

23、什么是队列

是一种调度策略,机制是先进先出

24、List与Set的区别

List和Set都是接口。他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类。
最大的不同就是List是可以重复的。而Set是不能重复的。
List适合经常追加数据,插入,删除数据。但随即取数效率比较低。
Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。

25、数据的三范式

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。

第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分,第二范式(2NF)属性完全依赖于主键  [消除部分子函数依赖]

 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。第三范式(3NF)属性不依赖于其它非主属性  [消除传递依赖]

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

26、三个datanode中当有一个datanode出现错误时会怎样?

Namenode会通过心跳机制感知到datanode下线

会将这个datanode上的block块在集群中重新复制一份,恢复文件的副本数量

会引发运维团队快速响应,派出同事对下线datanode进行检测和修复,然后重新上线

27、sqoop在导入数据到mysql中,如何不重复导入数据,如果存在数据问题,sqoop如何处理?

FAILED java.util.NoSuchElementException

此错误的原因为sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。

hive默认的字段分隔符为'\001'

28、描述一下hadoop中,有哪些地方使用到了缓存机制,作用分别是什么?

Shuffle中

Hbase----客户端/regionserver

29、MapReduce优化经验

设置合理的map和reduce的个数。合理设置blocksize

避免出现数据倾斜

combine函数

对数据进行压缩

小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容)

参数优化

30、请列举出曾经修改过的/etc/下面的文件,并说明修改要解决什么问题?

/etc/profile这个文件,主要是用来配置环境变量。让hadoop命令可以在任意目录下面执行。

/etc/hosts  IP映射

/etc/sysconfig/network 

/etc/sysconfig/network-scripts/ifcfg-eth0  静态IP,默认网关,网卡

/etc/inittab

/ect/sudoers

31、mapreduce的大致流程

主要分为八个步骤

1、对文件进行切片规划

2、启动相应数量的maptask进程

3、调用FileInputFormat中的RecordReader,读一行数据并封装为k1v1

4、调用自定义的map函数,并将k1v1传给map

5、收集map的输出,进行分区和排序

6、reduce task任务启动,并从map端拉取数据

7、reduce task调用自定义的reduce函数进行处理

8、调用outputformat的recordwriter将结果数据输出

32、搭建hadoop集群 , master和slaves都运行哪些服务

master主要是运行我们的主节点,slaves主要是运行我们的从节点。

33、hadoop运行原理

hadoop的主要核心是由两部分组成,HDFS和mapreduce,首先HDFS的原理就是分布式的文件存储系统,将一个大的文件,分割成多个小的文件,进行存储在多台服务器上。

Mapreduce的原理就是使用JobTracker和TaskTracker来进行作业的执行。Map就是将任务展开,reduce是汇总处理后的结果。

34、mapreduce的原理

mapreduce的原理就是将一个MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。

35、HDFS存储机制

HDFS主要是一个分布式的文件存储系统,由namenode来接收用户的操作请求,然后根据文件大小,以及定义的block块的大小,将大的文件切分成多个block块来进行保存

36、如何确认hadoop集群的健康状况

有完善的集群监控体系(ganglia,nagios)

Hdfs dfsadmin –report

Hdfs haadmin –getServiceState nn1

37、hive如何调优

hive最终都会转化为mapreduce的job来运行,要想hive调优,实际上就是mapreduce调优,可以有下面几个方面的调优。

解决收据倾斜问题,减少job数量,设置合理的map和reduce个数,对小文件进行合并,优化时把握整体,单个task最优不如整体最优。按照一定规则分区。

38、HBase宕机如何处理

宕机分为HMaster宕机和HRegisoner宕机,如果是HRegisoner宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。

如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。

39、假设公司要建一个数据中心,你会如何处理?

先进行需求调查分析,设计功能划分,架构设计,吞吐量的估算,采用的技术类型,软硬件选型,成本效益的分析,项目管理,扩展性,安全性,稳定性

40、HBase写数据的原理是什么?

参考 :https://blog.csdn.net/qq_16633405/article/details/79749806

41、谈谈 hadoop1 和 hadoop2 的区别

hadoop1的主要结构是由HDFS和mapreduce组成的,HDFS主要是用来存储数据,mapreduce主要是用来计算的,那么HDFS的数据是由namenode来存储元数据信息,datanode来存储数据的。Jobtracker接收用户的操作请求之后去分配资源执行task任务

在hadoop2中,首先避免了namenode单点故障的问题,使用两个namenode来组成namenode  feduration的机构,两个namenode使用相同的命名空间,一个是standby状态,一个是active状态。用户访问的时候,访问standby状态,并且,使用journalnode来存储数据的原信息,一个namenode负责读取journalnode中的数据,一个namenode负责写入journalnode中的数据,这个平台组成了hadoop的HA就是high  availableAbility高可靠。

然后在hadoop2中没有了jobtracker的概念了,统一的使用yarn平台来管理和调度资源,yarn平台是由resourceManager和NodeManager来共同组成的,ResourceManager来接收用户的操作请求之后,去NodeManager上面启动一个主线程负责资源分配的工作,然后分配好了资源之后告知ResourceManager,然后ResourceManager去对应的机器上面执行task任务。

42、文件大小默认为 64M,改为 128M 有啥影响?

更改文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会增加namenode的管理内存压力。

43、对 Hadoop 有没有调优经验,没有什么使用心得?(调优从参数调优讲起)

dfs.block.size

Mapredure:

io.sort.mb

io.sort.spill.percent

mapred.local.dir

mapred.map.tasks & mapred.tasktracker.map.tasks.maximum

mapred.reduce.tasks & mapred.tasktracker.reduce.tasks.maximum

mapred.reduce.max.attempts

mapred.reduce.parallel.copies

mapreduce.reduce.shuffle.maxfetchfailures

mapred.child.java.opts

mapred.reduce.tasks.speculative.execution

mapred.compress.map.output & mapred.map.output.compression.codec

mapred.reduce.slowstart.completed.maps

44、以你的实际经验,说下怎样预防全表扫描

1.应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫

3.描应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描

4.in 和 not  in,用具体的字段列表代替,不要返回用不到的任何字段。in 也要慎用,否则会导致全表扫描

5.避免使用模糊查询

6.任何地方都不要使用select * from t

45、zookeeper 优点,用在什么场合

极大方便分布式应用的开发;(轻量,成本低,性能好,稳定性和可靠性高)

46、把公钥追加到授权文件的命令?该命令是否在 root 用户下执行?

ssh-copy-id

哪个用户需要做免密登陆就在哪个用户身份下执行

47、你们提交的 job 任务大概有多少个?这些 job 执行完大概用多少时间?(面试了三家,都问这个问题)

没统计过,加上测试的,会与很多

Sca阶段,一小时运行一个job,处理时间约12分钟

Etl阶段,有2千多个job,从凌晨12:00开始次第执行,到早上5点左右全部跑完

48、在hadoop中定义的主要公用InputFormat中,哪个是默认值?

FileInputFormat

49、 两个类TextInputFormat和KeyValueInputFormat的区别是什么?

TextInputFormat主要是用来格式化输入的文本文件的,KeyValueInputFormat则主要是用来指定输入输出的key,value类型的

50、在一个运行的hadoop任务中,什么是InputSplit?

InputSplit是InputFormat中的一个方法,主要是用来切割输入文件的,将输入文件切分成多个小文件,然后每个小文件对应一个map任务

51、 Hadoop框架中文件拆分是怎么调用的?

InputFormat  -->  TextInputFormat  --> RecordReader  --> LineRecordReader  --> LineReader

52、参考下列M/R系统的场景:hdfs块大小为64MB,输入类为FileInputFormat,有3个文件的大小分别为64KB, 65MB, 127MB

会产生多少个maptask   4个    65M这个文件只有一个切片《原因参见笔记汇总TextInputformat源码分析部分》

53、如果没有自定义partitioner,那数据在被送达reducer前是如何被分区的?

hadoop有一个默认的分区类,HashPartioer类,通过对输入的k2去hash值来确认map输出的k2,v2送到哪一个reduce中去执行。

54、分别举例什么情况要使用 combiner,什么情况不使用?

求平均数的时候就不需要用combiner,因为不会减少reduce执行数量。在其他的时候,可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率

55、Hadoop中job和tasks之间的区别是什么?

Job是我们对一个完整的mapreduce程序的抽象封装

Task是job运行时,每一个处理阶段的具体实例,如map task,reduce task,maptask和reduce task都会有多个并发运行的实例

56、hadoop中通过拆分任务到多个节点运行来实现并行计算,但某些节点运行较慢会拖慢整个任务的运行,hadoop采用全程机制应对这个情况?

Speculate 推测执行

57、有可能使hadoop任务输出到多个目录中吗?如果可以,怎么做?

自定义outputformat或者用multioutputs工具

58、如何为一个hadoop任务设置mappers的数量?

Split机制

59、如何为一个hadoop任务设置要创建reduder的数量?

可以通过代码设置

具体设置多少个,应该根据硬件配置和业务处理的类型来决定

60、MapReduce 2.0”与“YARN”是否等同,尝试解释说明

MapReduce 2.0  --à mapreduce + yarn

61、谈谈你对反射机制的理解及其用途?

java中的反射,首先我们写好的类,经过编译之后就编程了.class文件,我们可以获取这个类的.class文件,获取之后,再来操作这个类。这个就是java的反射机制。

62、ArrayList、Vector、LinkedList 的区别及其优缺点?

ArrayList 和Vector是采用数组方式存储数据, Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!

63、HashMap、HashTable 的区别及其优缺点?

HashMap和HashTable:Hashtable的方法是同步的,而HashMap的方法不是,Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。HashMap是一个线程不同步的,那么就意味着执行效率高,HashTable是一个线程同步的就意味着执行效率低,但是HashMap也可以将线程进行同步,这就意味着,我们以后再使用中,尽量使用HashMap这个类。

64、RPC 原理?

1.调用客户端句柄;执行传送参数

2.调用本地系统内核发送网络消息

3. 消息传送到远程主机

4. 服务器句柄得到消息并取得参数

5. 执行远程过程

6. 执行的过程将结果返回服务器句柄

7. 服务器句柄返回结果,调用远程系统内核

8. 消息传回本地主机

9. 客户句柄由内核接收消息

10. 客户接收句柄返回的数据

猜你喜欢

转载自blog.csdn.net/weixin_35353187/article/details/83019259