分布式:服务间出现跨机器、跨进程统称为分布式。
HDFS:分布式存储系统,解决海量数据的存储问题。
Map Reduce:分布式计算框架,基于磁盘进行迭代计算。第一代计算框架
HDFS
组件:
NameNode:使用内存存储集群中的元数据。
DateNode:负责响应客户端对数据块的读写请求,向NameNode汇报自身状态信息。
Block:是HDFS切分文件的尺度,默认是128M。
副本因子:HDFS为了防止数据丢失,允许对其进行备份,最多为3个。
组件作用:
Client:客户端
- 文件切分。文件上传HDFS时,Client会对文件进行切分,分成一个一个的Block。
- 与NameNode进行交互,获取文件的位置信息。
- 与DataNode交互,读取或写入数据
- Client提供了一些命令用来管理HDFS。如关闭和启动
NameNode:master,就是一个主管、管理者
- 管理HDFS的命名空间
- 管理数据块的映射信息
- 配置副本策略
- 处理客户端的读写请求
DataNode:Slave。NameNode下达命令,DataNode执行实际的操作
- 存储实际的数据块
- 执行数据块的读写操作
SecondaryNameNode:并非NameNode的热备,当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
- 辅助NameNode,分担其工作量
- 定期合并fsimage和edits,并推送给NameNode
1.为什么HDFS不擅长存储小文件?
答:1)HDFS是基于内存存储,小文件过多会占用namenode内存,造成block的浪费。
2)文件过小,寻址时间会大于数据的读写时间,不符合最初设计的原则(使数据的传输速度和硬盘的传输速度接近,在设计上将寻址时间最小化)。
2.SecondaryNameNode和NameNode关系?
fsimage:实质上是Hadoop文件系统元数据的一个永久检查点,其中包含了Hadoop文件系统的所有目录和id的序列化信息。(记录元数据信息)
editlog:存放和是Hadoop的所有更新操作和命令,文件系统客户端执行的所有写操作都会记录大editlog中。(记录元数据修改操作)
SecondaryNameNode:辅助NameNode在运行 期间完成对元数据的整理和备份。
3.NameNode的安全模式?
对HDFS的一种保护机制。
1)在fsimage加载初期会进入安全模式,在此期间系统不接受任何外界信息,当加载完毕后会自动离开安全模式。
2)当NameNode/DateNode空间不足时,会自动进入安全模式。
3)当系统维护时,管理员可以手动的将NameNode切换成安全模式。
4.机架Rack Aware
表示大规模集群中DateNode节点所在的物理主机所属的位置。
机架感知:可以感知到集群中的机器属于哪台机架。
5 .优点
1)高吞吐量。
2)采用流式的数据访问方式:一次写入,多次读取。
3)运用到商业硬件上:节约成本
4)高容错性
5)可扩展
5.缺点
1)延时性高
2)不适合存储大量小文件
3)不支持文件任意位置的修改
Map Reduce
组件:
ResourceManager:负责任务资源的统一调度。管理NodeManager统一资源,启动MRAppMaster。
NodeManager:用于管理本机上的计算资源。默认会将计算资源拆分成8个等份,每个等份抽象成Container。
MRAppMaster:任何一个执行的任务都会有一个MRAppMaster负责YarnChild的执行和监测。
YarnChild:真正执行任务的节点。
1.任务执行的11个步骤。
1)运行job任务。
2)获取ApplicationID|jobID
3)Copy job到HDFS(任务的切片信息,配置信息、代码片段)
4)提交任务给ResourceManager(统一资源的调度,管理NodeManager资源,启动MRAppMaster)
5)消耗一个Container资源,用于启动MRAppMaster
6)MRAppMaster初始化任务,完成任务调度前的准备工作
7)MRAppMaster查询输入切片信息、配置信息,获取任务并行度。
8)MRAppMaster连接RM获取任务资源
9)MRAppMaster连接NM消耗Container|YarnChild
10)YarnChild获取切片信息和代码片段
11)YarnChild执行任务。
2.如何书写一个job作业
1)创建job对象
2)指定输入输出格式类
3)指定输入输出格式
4)设置Map|Reduce逻辑
5)热值Map|Reducer输出key-value类型
6)Job提交