HDFS :即 Hadoop 分布式文件系统(Hadoop Distribute File System),以分布式存储的方式存储数据。
HDFS 也是一种 Master-slave 架构,NameNode 是运行 master 节点的进程,它负责命名空间管理和文件访问控制。DataNode 是运行在 slave 节点的进程,它负责存储实际的业务数据,
Hadoop的联邦机制 为什么会出现联邦?
Hadoop的NN所使用的资源受所在服务的物理限制,不能满足实际生产需求。
联邦的实现
采用多台NN组成联邦。NN是独立的,NN之间不需要相互调用。NN是联合的,同属于一个联邦,所管理的DN作为block的公共存储
主要优点
命名空间可伸缩性—— 联合添加命名空间水平扩展。DN也随着NN的加入而得到扩展。
性能—— 文件系统吞吐量不是受单个Namenode限制。添加更多的Namenode集群扩展文件系统读/写吞吐量
隔离—— 隔离不同类型的程序,一定程度上控制资源的分配
配置
联邦的配置是向后兼容的,允许在不改变任何配置的情况下让当前运行的单节点环境转换成联邦环境。新的配置方案确保了在集群环境中的所有节点的配置文件都是相同的
引入NameServiceID概念,作为namenodes们的后缀。
1:配置属性dfs.nameservices用于datanodes们识别namenodes.
2:为每个namenode加入这个后缀
操作
创建联邦,不指定Id会自动生成
升级Hadoop为集群
扩展已有联邦
退出联邦
如何解决Hadoop数据倾斜的问题,请举例
1 提前在map进行combine,减少传输的数据量
在Mapper加上combiner相当于提前进行reduce,即把一个mapper中的相同key进行聚合,shuffle过程中传输的数据量,以及Reducer端的计算量。
如果导致数据倾斜的key 大量分布在不同mapper的时候,这种方法就不是很有效了
2 数据倾斜的key 大量分布在不同mapper
1)局部聚合加全局聚合
第一次在map阶段对那些导致了数据倾斜的key,加上1到n的随机前缀,这样本来相同的key也分到多个reducer中进行局部聚合,数量就会大大降低;
第二次mapreduce,去掉key的随机前缀,进行全局聚合。
增加reducer,提升并行度
JobConf,setNumReduceTasks(int)
实现自定义分区
根据数据分布情况,自定义散列函数,将key均匀分配到不同Reducer
Yarn调度流程
Client向RM提交应用程序,其中包括启动该应用的ApplicationMaster的必须信息,例如ApplicationMaster程序、启动ApplicationMater的命令、用户程序等
ResoucerManager启动一个container用于运行ApplicationMaster
启动中的ApplicationMaster向ResourceManager注册自己,启动成功后与RM保持心跳
ApplicationMaster向ResourceManger发送请求,申请相应的数目的container
申请成功的container,由ApplicationMaster进行初始化。container的启动信息初始化后与对应的NodeManager通信,要求NM启动container
NM启动container
container运行期间,ApplicationMaster对container进行监控。container通过RPC协议向对应的AM汇报自己的进度和状态等信息
应用运行结束后ApplicationMaster向ResouceManager注销自己,并允许属于它的container被收回;
怎么处理Hadoop宕机的问题?
如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation(单个任务可申请的最多物理内存量,默认是8192MB)。
如果写入文件过量造成NameNode宕机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。高峰期的时候用Kafka进行缓存,高峰期过去数据同步会自动跟上
了解过哪些Hadoop的参数优化
在hdfs-site.xml文件中配置多目录,最好提前配置好,否则更改目录需要重新启动集群
NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作
dfs.namenode.handler.count=20*log2(Cluster Size)
Yarn HA
Hadoop 2.4.0版本开始,Yarn实现了ResourceManager HA
由于资源使用情况和NodeManager信息可以通过NodeManager的心跳机制重新构建出来,因此要对ApplicationMaster相关的信息进行持久化存储即可
在一个典型的HA集群中,两台独立的机器配置成ResourceManger.在任意时间,有且只允许一个活动的Resourcemanager,另一个备用。切换分成两种方式
手动切换:在自动恢复不可用时,管理员可以手动切换状态,或是从Active到Standby或是从Standby到Active
自动切换:基于Zookeeper,但是区别于HDFS的HA,2个节点间无需配置额外的ZFKC守护进程来同步数据
Hadoop1.x与Hadoop2.x的区别
加入了yarn解决了资源调度的问题
加入了对zookeeper的支持实现比较可靠的高可用
HDFS的数据压缩算法?及每种算法应用的场景
gzip压缩
Bzip2压缩
Lzo压缩
Snappy压缩
为什么会产生yarn,它解决了什么问题,有什么优势?
Yarn最主要的功能解决运行用户程序与yarn框架的完全解耦。
Yarn上可以运行各种类型的分布式运算程序,比如mapreduce、storm程序、spark程序....
Yarn默认的调度器,调度器分类
Hadoop的调度器主要分为三类:
FIFO Scheduler:先进先出调度器:优先提交的,优先执行,后面提交的等待
Capcity Scheduler:容量调度器:允许创建多个任务队列,多个任务队列可以同时执行。但是一个队列内部还是先进先出
Fair Scheduler:公平调度器:第一个程序在启动时可以占用其他队列的资源(100%占用),当其他队列有任务提交时,占用资源的队列需要将资源还给该任务。还资源的时候,效率比较慢。
Hadoop优化 Mapreduce跑的慢的原因?
1:计算机性能
CPU、内存、磁盘健康、网络
2:I/O操作优化
(1)数据倾斜
(2)map和reduce数设置不合理
(3)reduce等待过久
(4)小文件过多
(5)大量的不可分块的超大文件
(6)spill次数过多
(7)merge次数过多等
Mapreduce优化方法
数据输入
map阶段
reduce阶段
IO传输
数据倾斜问题
HDFS小文件的优化方法
Hadoop中job和Task之间的区别时什么
编写好的一个程序,称之为Mapreduce程序,一个Mapreduce程序就是一个job,而一个Job里面可以有一个或多个Task,Task又可以区分为Map Task 和Reduce Task