Hadoop
HDFS分布式文件系统
简介:
分布式文件系统主要解决的是大数据文件的存储问题。通过HDFS可以将大文件分成多个切片,每个切片分别存放在一个计算机中。
用户通过访问一个主节点来对文件进行访问。
为了保证数据的可靠性,每个切片通常会有多份,分别存储在不同的计算机上。
相关名词:
HDFS Client:HDFS客户端。作用:文件切片,与NameNode交互,获取文件的位置信息,与DataNode交互,读取或写入文件,可以通过一些命令管理HDFS。
NameNode:集群中的主节点,负责管理元文件的大小,位置,权限等信息。主要负责管理集群中的各种元数据信息 。NameNode内存中存放着元文件的各种信息,包括时间,大小,权限,块列表等等。为了保证在服务器重启后内存中的信息还在,还有两个文件fsimage和edits。 fsimage相当于内存中数据的一个镜像文件,定时更新。 edits是一个日志文件
心跳机制:为了保证文件的可靠性,DataNode需要周期性的向NameNode发送心跳信息,告知NameNode它没有殆机。如果NameNode发现有DataNode发生殆机,会将DataNode中存放的数据块拷贝到别的DataNode上。
secondaryNameNode:辅助NameNode,分担其任务,但不是NameNode 的备份。
DataNode:集群中的从节点,用于存储数据和读取数据。DataNode会周期性的向Name Node发送心跳信息,内部的块信息和内部的缓存块信息
特点:
优点:适合存储大文件,一次写入多次读取,高稳定性,低成本
缺点:因为NameNode中存储着每一个文件的元信息,且元信息保存在内存中,所以不适合存储大量的小文件。不能对文件进行追加修改
默认切片大小128M。任何文件都必须切片。默认副本个数为3。存储策略是当前机架存两个副本,再找另外一个机架存一个副本。
MapReduce分布式计算系统
简介:
分布式计算系统主要解决的是复杂计算问题,通过mapreduce可以将一个复杂的任务分成多份
Map负责分解任务,将一个大任务分成多个小任务MapTask,小任务之间不能有依赖关系。
Reduce负责合并分解后的任务,对Map后得到的结果进行全局汇总成ReduceTask
名词:
JobTracker:接收用户的计算请求任务,并将任务分配给从节点
TaskTracker:负责执行主节点JobTracker分配的任务
ResourceManager:
NodeManager:
AppManager:
mapreduce编程规范:
使用步骤:
一个完整的MapReduce开发共分为8个步骤,其中Map阶段占两个步骤,Shuffle阶段占两个步骤,Reduce阶段占两个步骤。
Map阶段
- 设置InputFormat类,将数据切分成Key-Value对(K1, V1),输入到第二步。常用TextInputFormat,它会将文件的每一行数据作为Value,每一行开头相对于文件开头的偏移量作为Key,构建键值对。
- 自定义Map逻辑,将第一步的结果转换成另外的Key-Value(K2, V2)对,输出结果。继承Mapper类,重写map方法。
Shuffle阶段 - 对输出的键值对进行分区
- 对不同分区的数据按照相同的Key排序
- (可选)对分组过的数据初步规约,降低数据的网络拷贝
- 对数据进行分组,相同的Key和Value放入一个集合中。
Reduce阶段 - 对多个Map 的结果进行排序和合并,编写reduce函数实现自己的逻辑。继承Reducer类,重写reduce方法,将输入的Key-Value转为新的Key-Value(K3, V3)
- 设置OutputFormat处理并保存Reduce输出的Key-Value数据