一、Hadoop的概念
Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。
Hadoop特点
- 扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。
- 成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。
- 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
- 可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。
二、Hadoop的核心
HDFS :分布式文件系统(Hadoop Distributed File System)
数据块(block)
HDFS默认的最基本的存储单位是64M的数据块。
和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。HDFS体系结构
- Namenode元数据节点
- 管理整个文件系统,负责接收用户的操作请求
- 管理着整个文件系统的目录结构,所谓目录结构类似于我们Windows操作系统的体系结构
- 管理着整个文件系统的元数据信息,所谓元数据信息指定是除了数据本身之外涉及到文件自身的相关信息
- 保管着文件与block块序列之间的对应关系以及block块与DataNode节点之间的对应关系
SecondaryNamenode
合并NameNode节点中的fsimage和edits,
具体合并过程:
NameNode自己之所以不合并fsimage与edits,是为了更快的响应用户的操作请求 。文件系统命名空间映像文件(fsimage)及修改日志(edits)
当文件系统客户端(client)进行写操作时,首先把它记录在修改日志中(edit log)
元数据节点在内存中保存了文件系统的元数据信息。在记录了修改日志后,元数据节点则修改内存中的数据结构。
每次的写操作成功之前,修改日志都会同步(sync)到文件系统。
fsimage文件,也即命名空间映像文件,是内存中的元数据在硬盘上的checkpoint,它是一种序列化的格式,并不能够在硬盘上直接修改。
同数据的机制相似,当元数据节点失败时,则最新checkpoint的元数据信息从fsimage加载到内存中,然后逐一重新执行修改日志中的操作。
- Datanode
存储数据,并且在HDFS中的文件是被切分成block块来进行存储的
在HDFS中,我们真实的数据是由DataNode来负责来存储的,但是数据具体被存储到了哪个DataNode节点等元数据信息则是由我们的NameNode来存储的 。
如何向HDFS写文件?
特点:client–>namenode–>datanode Pool–>得到空闲的datanode
然后client–>datanode. datanode会自动复制两次。
HDFS是一次建立,多次读取。
如何向HDFS读文件?
- 客户端(client)用FileSystem的open()函数打开文件
- DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息。对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。
- DistributedFileSystem返回FSDataInputStream给客户端,用来读取数据。
- 客户端调用stream的read()函数开始读取数据。
- DFSInputStream连接保存此文件第一个数据块的最近的数据节点。
- Data从数据节点读到客户端(client)
- 当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
MapReduce:分布式计算框架
一种编程框架。一个程序的运行过程分为两个阶段,只有Map完成,reduce才能执行处理。
MapReuce是批处理系统,无法实时简单处理
Mapreduce是批量处理,做数据分析,不能作为实时处理。
- MapReduce体系结构
JobTracker功能
1、JobTracker负责接收用户提交给的计算任务
2、将计算任务分配给我们的TaskTracker进行执行
3、跟踪监控TaskTracker的任务task的执行状况
TaskTracker功能
执行JobTracker分配给的计算任务task
三、Yarn 资源管理系统
Yarn的体系结构
Yarn是Hadoop2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成两个独立的服务:一个是全局的资源管理器ResouceManager和每个应用程序特有的AppMaster。
在Yarn平台中,各个组件的详细功能如下:
1>ResouceManager是一个全局的资源管理器,负责整个系统的资源管理和分配,ResouceManager相当于Hadoop1.0中的JobTracker的部分职能:资源分配。
2>AppMaster负责管理单个应用程序,即负责一个Job生命周期内的所有工作,并在任务task运行失败时重新为任务申请资源进而重新启动相应的任务,AppMaster类似老的框架中的JobTracker的部分职能:任务分配与任务监控。
特别注意:每一个Job(而不是每一种)都有一个相应的APPMaster,APPMaster可以运行在除主节点ResouceManager节点以外的其它机器上,但是在Hadoop1.0中,JobTracker的位置是固定的。
3>NodeManager是每个节点上的资源和任务管理器,一方面:它会定时的向ResouceManager汇报本节点上的资源使用情况和各个Container的运行状态,另一方面:它会接受并处理来自AppMaster的container的启动、停止等各种请求。
用户的应用程序(以MapReduce程序为例)在Yarn平台上面的运行机制
1>首先,用户的应用程序通过Yarn平台的客户端程序将我们的应用程序提交给我们的YARN平台
2>YARN平台的ResouceManager接受到我们客户端提交给的应用程序后,将应用程序交给某个NodeManager,并在其上面启动一个新的进程AppMaster
3>AppMaster首先为应用程序在ResouceManager中进行注册,这样用户可以通过ResouceManager查看应用程序的执行进度
4>注册完之后,APPMaster将通过Rpc协议向ResouceManager申请资源并领取相应的资源
5>获取到资源后,APPMaster便于对应的NodeManager节点进行通信,要求其启动相应的任务
6>各个任务在执行的过程中将通过RPC协议向APPMaster汇报自己的执行进度和执行状况,以便让APPMaster可以随时掌握各个任务的执行状况,进而在任务运行失败时可以重新启动相应的任务。
7>mapper任务和reducer任务执行完之后,AppMaster向ResouceManager节点注销并关闭自己,此时资源得到回收,应用程序执行完毕。
BigTable
列式数据库,能够实现实时处理,执行事件的实时读写。无法提供事务,如果需要提供事务,需要程序约束。
数据最后要存放在文件系统上,即HDFS
- 简单介绍
Hbase
支持用户的实时读写。map可以读取hbase的数据,写入hbase上
Hbase是运行在HDFS上
如何将收集数据然后通过那么namenode存放到HDFS上?
这样才能进行分布式处理,进行MapReduce处理
数据-->序列化-->网络传输存放到HDFS上-->MapReduce-->反序列化
序列化数据收集器:(日志形式的文件)
flume(ASF)
chukwa(ASF)
scribe(facebook)
非序列化转换成序列化的工具
Avro(Protocol,Buffer,Thrift)
关系型数据库存放到HDFS上
sqoop
信息传输层
zookeeper:协调各种服务的协调运行,监控服务的运行
oozie
工作流workflow
协调map的运行
Rhadoop:用R语言完成数据统计,形成数据统计报告
R语言:开源数据分析统计的语言,实现智能决策
编程接口
翻译作业为Mapreduce,不用学习mapreduce编程。
作为一种工具。通过一种接口。简化了MapReduce程序的开发程度。
Hive 类SQL语句
写数据分析语句,不用为了完成任务就去写MapReduce语句。
Pig
编写类脚本的语言,转换成MapReduce语句。
参考:
大话hadoop:http://www.thebigdata.cn/Hadoop/32526.html
HDFS简介:http://www.csdn.net/article/2010-11-26/282582