大数据技术栈——Hadoop概述
1 引例
Hadoop是专为离线和大规模数据分析而设计的,上图Hadoop整体技术框架描述。(为了方便学习,会先介绍Map Reduce与HDFS)
2 MapReduce
MapReduce是Google提出的大规模并行计算解决方案,应用于大规模廉价集群上的大数据并行处理(Map Reduce1.0运行模型如下)。
MapReduce以key/value的分布式存储系统为基础,采用“分而治之”的思想,是一种并行编程模型,将计算阶段分为两个阶段:Map阶段(分)和Reduce阶段(治)。
原理:利用一个输入(key,value)对的集合产生一个输出的(key,value)对的集合。
map阶段:被分配了map任务的worker程序读入数据片段,解析出(key,value)对,传给用户定义的Map函数,Map函数生出中间对,缓存在内存中。
Reduce阶段:该阶段由Reduce函数把Map阶段具有相同key值的中间结果收集到相同Reduce结点进行合并处理,并将结果写入本地磁盘。最终结果通过合并Reduce任务的输出得到。
3 HDFS
HDFS:Hadoop distribute file system,Hadoop分布式存储文件系统。HDFS是一个主/从(Master/Stave)体系结构,如下图所示。
实质上,或者从用户的角度来看,就跟传统的文件系统是一样的,可以通过路径地址访问文件数据。假如客户端要访问一个文件:
首先,客户端从NameNode中获得组成该文件的数据块列表信息,即可知晓数据块被存在哪些DataNode上。
然后,客户端根据信息,找到指定的数据块,读取文件数据。
4 Hadoop
Hadoop是一个能够对大量数据进行分布式处理的软件框架,实现了Google的MapReduce编程模型和框架,能够把应用程序分割成许多小的工作单元,并把这些工作单元放到任意集群节点上执行。
Hadoop两大核心技术:Map Reduce、HDFS将在下文中详细介绍。
NameNode:负责记录文件是如何分割成数据块的,以及这些数据块都被存储都哪些数据节点上。另外,一般NameNode是集群上的一个单点,NameNode所在的服务器不存储数据信息,但是如果宕机,整个系统就无法运行。
DateNode:与NameNode进行通信,将HDFS的数据块读写到文件系统上。
Secondary NameNode: 可以理解为NameNode的备份,用来监控HDFS的状态,只是与Name Node进行通信,并保存HDFS元数据的快照。
Job Tracker: 根据用户请求,决定哪些文件被处理,并且为不同的task分配节点。另外,Job Tracker一般运行在Master节点上。
Task Tracker:与Job Tracker交互,负责执行独立的task。
5 HBase
5.1 逻辑模型
HBase是以表的形式存储数据,每个表由行和列组成,每个列都是一个特定的列族(Column Family)。
表中由行和列确定的存储单元成称为一个元素(cell),每个元素都是由时间戳来标识。以一个产品的升级过程在做说明。
行键是数据行在表中的唯一标识,并作为检索记录的主键。
通过列族和限定符可以唯一确定一个存储。
时间戳对应着每次操作所对应的时间。
5.2 物理模型
HBase是按照列存储的稀疏行/列矩阵,物理模型如下所示。
查找结果,如果没有指明时间,则会默认按照最新时间进行返回。
5.3 Region服务器
HBase因为可以理解成一个可扩展的无限大的表。每个表最初只有一个Region,当表中数据无线扩大时,Region就会分割形成两个Region。另外,一般Region是HBase作分布式存储和负载均衡的最小单位,所以一个表拥有的多个Region可能会在不同服务器上。
6 Hive
Hive是一个构建在Hadoop上的数据仓库平台,目的是为了在HDFS上构建数据仓库来存储结构化的数据,使Hadoop上的数据操作与传统的SQL结合,让我们能够执行查询等操作。
7 Pig
Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。使用Pig可以简化Map Reduce任务的开发,并完成对数据进行排序、过滤、求和、关联等擦偶哦。
(可以理解成:Pig相当于一个Hadoop的客户端。)
8 ZooKeeper
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
8.1 ZooKeeper的特性
顺序一致性:从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中去。
原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即整个集群要么都成功应用了某个事务,要么都没有应用。
单一视图:无论客户端连接的是哪个 Zookeeper 服务器,其看到的服务端数据模型都是一致的。
可靠性:一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直被保留,除非有另一个事务对其进行了变更。
实时性:Zookeeper 保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。
8.2 ZooKeeper的设计目标
简单的数据结构:Zookeeper 使得分布式程序能够通过一个共享的树形结构的名字空间来进行相互协调,即Zookeeper 服务器内存中的数据模型由一系列被称为ZNode的数据节点组成,Zookeeper 将全量的数据存储在内存中,以此来提高服务器吞吐、减少延迟的目的。
可以构建集群:Zookeeper 集群通常由一组机器构成,组成 Zookeeper 集群的而每台机器都会在内存中维护当前服务器状态,并且每台机器之间都相互通信。
顺序访问:对于来自客户端的每个更新请求,Zookeeper 都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序。
高性能:Zookeeper 和Redis一样全量数据存储在内存中,100%读请求压测QPS 12-13W。
来源:oschina
链接:https://my.oschina.net/u/4343506/blog/4513762