一、hadoop核心框架
1、什么叫大数据?有什么特点?
海量数据,无法用传统工具收集、管理,计算能力要求很高的数据
特点:4V
Volume:流量大
Velocity:速度快
Variety:多样化
Value:价值密度低
理论来自于Google的bigtable论文
2、Hadoop:大数据开源框架
Apache公司的顶级开源项目,为了解决大数据分布式存储与大数据分布式计算的问题,
而产生的一种开源框架。
大数据分布式与传统分布式的区别
传统分布式:比较依赖于每一个节点的运行速度,哪台节点慢提升哪台节点的性能。
大数据分布式:使用空间换时间的方式,提升性能。
核心组件:
分布式存储框架:hdfs
分布式计算框架:mapreduce
分布式管理框架:yarn(hadoop2.x)
二、Hdfs
1、本质上一个文件系统,但是是分布式文件系统,存储的大文件分成多个block块,
存储在不同的节点上,同时在其他节点有多个备份,数据安全性较高,适宜处理很大的文件(GB~PB)
2、写文件的流程:
Client端发送写请求给namendoe,namenode读取fsimage和edits的信息,查看是否可写;
如可写,要计算写入文件的切块信息,同时生成元数据信息,写入edits,同步传回给
client端:client端先在元数据中最近的datanode进行写入,由这个datanode往其他的
datanode扩散请求,全部写入完成后,所有datanode向namenode报告写入完成的信息:
namenode确认写入edits,否则会把edits删除。
由secondaryNamenode负责edits和fsimage的合并
3、读文件的流程:
Client端发送读请求给namenode,namenode读取fsimage和edits的元数据信息,根据
client端发送的地址,返回元数据信息给client端,client端根据元数据信息去最近的
datanode读取数据,由这个datanode扩散请求。
4、常用命令:
(1)客户端命令:hdfs dfs
Hdfs dfs-mkdir 创建目录
Hdfs dfs-rmr 删除目录
Hdfs dfs-lsr 递归查看目录
Hdfs dfs-put 本地目录 hdfs目录
Hdfs dfs-copyToLocal hdfs的目录 本地目录
Hdfs dfs-appendToFile 追加的文件 要追加的文件
(2)管理命令:hdfsadmin
(3)Oev和oiv查看edits log和fsimage
5、Namenode、datanode、secondaryNamenode三者的工作职能
Namenode管理元数据,与客户端交互,管理datanode和secondaryNamenode
Datanode负责读写数据,定时发送心跳给namenode
secondaryNamenode辅助namenode合并fsimage和edits log、负责数据管理备份
6、java API
Configuration conf;对象获取对应的配置信息
FileSystem fs;由conf对象创建对应的文件系统
由文件系统执行各种增删改查等操作
三、Yarn
1、从hadoop2.0开始引入,主要的目的是分担mapreduce在管理方面的压力,另外可以
使用其他计算框架代替mapreduce
2、ResourceManager和NodeManager
所有的job请求由resourceManager管理,同时管理nodeManager
NodeManager主要执行resourceManager的任务,管理容器的生命周期
发送心跳给resourceManager,管理datanode资源损耗情况
3、Yarn的运行机制
Client端发送计算任务的时候,ResourceManager接受请求,创建APPManager,APPManager
反馈jobId和hdfs目录给client端,client端上传具体的jar包和临时数据以及目标数据信息;
ResourceManager向namenode获取元数据信息;创建ResourceSchedular,根据元数据信息生
成大概的shedule文件,得到需要几个datanode的资源,以及每个datanode有几个数据块会涉及;
由资源消耗低的nodeManager来创建APPMaster来具体负责shedule的运作。
APPMaster先去hdfs目录上获取具体的jar包及临时文件等信息,计算各datanode具体所需要的
资源,并且上报到ResourceSchedular,更新shedule文件,同时向APP Manager申请资源权限:
APPMaster获取权限后,根据shedule文件向对应NodeManager发送创建Container的任务,
各Container对应创建taskTraker,并从hdfs下载jar包及临时文件,创建MapTask和ReduceTask
等具体任务,开始执行jar包。执行过程中不停反馈各阶段进度,并反馈心跳给NodeManager。
执行完成后结果逐步反馈会Client端。Namenode把对应的edits写入。
四、Mapreduce
1、Mapreduce的版本变化
Hadoop1.0的时候负责大数据计算和job任务的管理
Job任务的管理通过jobTraker和taskTraker来处理
Hadoop2.0的时候专注于大数据分布式计算的功能
2、Mapreduce的机制
把要执行的功能通过jar包的形式分发到各节点,由各节点来执行jar包的功能
传统分布式计算是把其他节点的数据集中到计算节点,由计算节点统一执行
3、Mapreduce的工作流程
接受任务,对应文本分片,切分分片成行,形成键值对<偏移量,一行的内容>,
进入map阶段,setup中加载缓存文件,map中读取一行的内容进行业务处理,通过
键值对写出,进入环形缓冲区,80%溢写。开始shuffle阶段,partition(即对map
输出的key进行hash之后对节点数取余的结果),partition的结果进行排序(快排)
保证小文件的分区内有序,归并到大文件,保证分区内有序。根据partition的结
果向对应节点分发分区内容,一个节点归并成一个大文件,保证分区内有序。根据
key分组,每个key对应的组进入reducer,对应业务流程走完,一个节点的一个文件
,由各个reducer依次写数据
4、Java API
TestMapper extends Mapper<LongWritable,Text,…,…>{
Map(LongWritable key,Text value,Context){
对value做处理
context.write(…,…);
}
}
TestReducer extends Reducer<…,…,…,…>{
reduce(…key,lterable<…>values,Context context);
…
}
TestDriver{
Main{
Configuration conf;模仿一个hadoop配置实例
Job job=getInstance(conf);模拟向这个hadoop
对driver、mapper和reducer等的配置
对输出格式的映射
对输入输出文件地址的映射
运行
}
}