Hadoop经典面试题

启动hadoop系统,使用sbin/strat-all.sh命令时,请给出启动顺序

namenode --> datanode --> secondarynamenode -->  resourcemanager -->nodeamnager

大数据的四特性 4v

1.数据量大

2.数据类型多

3.商业价值高

4.处理速度快

hadoop是什么,作用是什么,适用于什么场景

--1.hadoop是什么?
hadoop是由java编写的,在分布式服务器集群上存储海量数据并运行分析引用的开源框架,其核心部件是HDFS和MApReduce,yarn

--2.作用是什么?
1.大数据存储:分布式存储
2.分析海量数据的工具
3.ETL:数据抽取到oracle,mysql,DB2,mongdb,redis,及主流数据库

--3.使用场景?
1.实时日志处理分析 -Flume+Logstash+Kafka +Spark+Streaming
2.数据挖掘:目前比较流行的广告推荐
3.数据支持一次写入,多次读取
4.使用Hbase做数据分析

hadoop的优势有哪些方面?

1.高可靠性:hadoop底层维户多个数据副本
2.高扩展性:在集群间分配任务数据
3.高效性:在mapreduce的思想下hadoop是并行工作的,加快任务处理速度
4.高容错性:能够自动将失败的任务重新分配

hadoop的组成

1.YARN
另一种资源协调者,是hadoop的资源管理器
YARN的任务概述
任务所需要的资源:比如内存,cup,硬盘,网络等都是由YARN管理
2.MapReduce
MapReduce将计算过程分为两个阶段:Map和Reduc
map阶段进行处理输入数据
reduce阶段对map的结果进行汇总计算结果
3.HDFS
是一个文件系统,用于存储文件,通过目录树来定位文件,其次它是分布式的
使用场景:一次写入,多次读取
HDFS的优缺点
优点:
高容错性:自动保存多个副本,通过新增副本的形式,提高容错性.
数据规模:适合处理大数据.
文件规模:能够处理百万规模以上的文件规模.
缺点:
不适合低延时的数据访问.
无法高效的对小文件进行存储.
不支持并发写入和文件随机修改.

HDFS的文件块大小

hdfs中的文件在物理上是分块存储的,块的大小可以通过配置值参数来规定默认是128M,
--为什么快的大小不能设置太大,也不能设置太小?
1.设置太小,会增加寻址时间
2.设置太大,从磁盘传输数据的时间会明显的大于定位这个块开始位置所需的时间,导致处理数据时过慢
总结:HDFS的块大小取决于磁盘传输率.

MapReduce的Shuffle阶段

.MapTsk阶段五个步骤
1.read阶段:提交job任务,附带三个信息(切片信息,jar包信息,以及xml信息),去开启相应数量的MapTask读取文件
2.map阶段:系统默认的方式是TextInputFormat,通过去读行来切割数据,以便后续的数据处理(可以自定义代码进行数据处理).
3.collect阶段:map结束之后将切割完得数据输送到环形缓冲区分区和排序系统默认按照key排序,按字典顺序排序,(排序方式是快排).
4.溢写阶段:就是当环形缓冲区数据达到起大小的80%是开始溢出(默认大小是100M),将数据写入到磁盘.
5.combiner:将数据归并,在适当的时候使用combiner,可以减少网咯传输数据量,优化hadoop
的框架性能..ReduceTask4阶段
1.coyp阶段:通过远程数据拷贝方式,从MapTask中拷贝已经处理好的数据到内存(注意.MpaTask和ReduceTask很大程度上不是在同一台服务器上,这就是需要进行序列化和反序列化(bean对象)).
2.Meage阶段:合并阶段,将拷贝过来的多个小文件合并成一个大文件,到达到内存数据量的阈值时(阈值就是内存),会自动将数据写入磁盘.
3.sort阶段:按照某种需求将数据写入磁盘,与meger同时进行.
4.reduce阶段:将数据写入到指定的分区文件中.

--修改版
1.map方法之后reduce方法之前这段处理过程叫做Shuffle
2.mpa方法之后,数据首先进入到分区方法,把数据标记好分区,然后把数据发送到环形缓冲区,环形缓冲区默认大小是100m,环形缓冲区 达到80%,进行溢写,溢写前对数据进行排序,排序按照对key的索引进行字典顺序排序,排序的手段快排,溢写产生大量的溢写文件,需要对溢写文件进行归并排序,对溢写文件也可以进行cimbiner操作,前提是汇总操作,求平均值不行,最后文件按照分区存储到磁盘,等待reduce端拉取
3.每个reduce拉取map端对应分区的数据,拉取数据后行先存储到内存中,内存不够了,在存到磁盘中,拉取完所有数据后,采用归并将内存和磁盘的数据都进行排序,在进入reduce方法前,可以对数据进行分组操作.

mapreduce 中的数据倾斜

--什么是数据倾斜?
简单来说数据倾斜就是数据的key 的分化严重不均,造成一部分数据很多,一部分数据很少的局面。
--数据倾斜的解决方案
1.hive.map.aggr=true:在map中会做部分聚集操作,效率更高但需要更多的内存。
2.hive.groupby.skewindata=true:数据倾斜时负载均衡,当选项设定为true
3.增加reduce 的jvm内存,增加reduce 个数

HDFS的读写流程

.hdfs写数据的过程
1.向namnode请求上传文件/opt/data/1.txt
2.1检查目录是否可以创建文件
2.2检查权限
2.3检查目录结构(目录是否存在)
2.响应可以上传(响应给客户端)
3.请求上传第一个block(0-128M),请返回datanode
4.返回d1,d2,d3,表示采用这三个节点存储数据(返回给客户端)
5.请求建立bolck通道(这个通道会一直通到d3)
6.每个datanode答应成功
7.客户端开始往d1上传block(先从磁盘读取放到本地内存缓存),以packet(64k)为单位,d1收到一个packet就会传给d2,d2就会传给d3,d1每个packetd会放入一个应答队列等待答应
8.当一个block传输完成之后,客户端再次请求namenode上传第二个bolck的服务器(重复执行3-7),hdfs的读数据过程
1.向namenode请求下载文件
2.1检查权限
2.2检查文件block列表
2.3选出每个block的对应主机列表
3.返回主机列表给客户端
4.和每个block所在的主机建立管道(就近原则,然后在随机)
5.开始数据的读取(读取的单位packet:64K)
6.将每个block合并成一个完整的文件

MapReduce的优缺点

.优点
1.MapReduce易于编程
他简单的实现一些接口就可以完成一个分布式程序
2.良好的扩展性
可以通过简单的新增机器来扩展它的计算能力
3.高容错性
比如一台机器挂了,他可以把上面的计算任务转义到另外一个节点上运行,不至于这个任务失败
4.适合PB级别的海量数据的处理

二,缺点
1.不擅长实时计算
MapReduce无法象mysql一样在毫秒或者秒级内返回结果
2.不擅长流式计算
流式计算的数据是动态输入的,二MapReduce的数据级是静态的
3.不擅长DAG(有向无环图)计算
每个mapreduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热心市民爱抽烟屁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值