分布式计算平台
优点:
高可靠性
高扩展性
高效性 在各节点之间动态地移动数据,保证各个节点的动态平衡
高容错性 数据多副本;重新启动失败任务
Hadoop应用:
Yahoo 广告系统Web搜索研究
Facebook 数据分析 机器学习
百度 搜索日志分析 网页数据挖掘
淘宝 存储并处理电子商务交易的相关数据
中国移动研究院对数据进行分析并对外提供服务
Pig Chukwa Hive Hbase |
MapReduce HDFS ZooKeeper |
Common Avro |
Common:
为Hadoop其他子项目提供支持的常用工具
主要包括FileSystem、RPC和串行化库
Avro:
是用于数据序列化的系统
提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、RPC、简单的动态语言集成功能
依赖于模式(scheme),数据的读写是在模式下完成的,这样可以减少写入数据的开销,提高序列化的速度并缩减其大小
在RPC中,Avro系统的客户端和服务器端通过握手协议进行模式的交换
MapReduce:
一种编程模型,用于大数据集(1TB)的并行运算
HDFS:
分布式文件系统,具有高容错性(fault-tolerant)
高吞吐率(high-throughput)
设计目标:
检测和快速恢复硬件故障
流式数据访问 重点在于批量处理而不是用户交互式处理,数据吞吐量而不是数据访问的反应速度
简化一致模型:一次写入,多次读取
通信协议
Client和NameNode--Client Protocol
NameNode和DataNode--DataNode Protocol
Chukwa:
开源的数据收集系统,监控和分析大型分布式系统的数据
在HDFS和MapReduce框架之上搭建
显示、监视和分析数据结果,以便更好的利用所收集的结果
Hive:
建立在Hadoop之上的数据仓库
MapReduce编程模型中也可通过Hive QL查询数据
Hbase:
分布式的、面向列的开源数据库,该技术来源于Google——Bigtable
适合非结构化数据存储的数据库
基于列模式,一个数据行拥有一个可选择的键和任意数量的列
Pig:
对大型数据集进行分析、评估的平台
突出优势:它的结构能经受住高并行化的检验
底层由一个编译器组成,运行时会产生一些MapReduce程序序列
ZooKeeper:
为分布式应用设计的开源协调服务
提供同步、配置管理、分组、命名服务,减少分布式应用程序所承担的协调任务
目录树结构
J ava编写,支持Java C
Sqoop:
为高效传输批量数据而设计的一种工具,其用于Apache Hadoop和结构化数据库如关系型数据库之间的数据传输
Flume:
一种分布式的、可靠的、用于高效搜集、汇总、移动大量日志数据的服务。
Mahout:
一种基于Hadoop的机器学习和数据挖掘的分布式计算框架算法集,实现了多种MapReduce模式的数据挖掘算法。
Spark:
一个开源的数据分析集群计算框架,建立于HDFS之上,用于构建大规模、低延时的数据分析应用,采用Scala语言开发
Storm:
分布式的、容错的实时计算系统,属于流处理平台,多用于实时计算并更新数据库
也可被用于连续计算(continuous computation),对数据流做连续查询,在计算时将结果以流的形式输出给用户
Shark:
即Hive on Spark,为Spark打造的数据仓库系统,兼容HQL
Phoenix:
构建在HBase之上的SQL中间层,Java编写
Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集。
直接使用HBase API、协同处理器与自定义过滤器
对简单查询来说是毫秒
对百万级别的行来说是秒
Tez:
基于YARN之上的DAG(Directed Acyclic Graph)就算框架
把MapReduce拆分成若干子过程,同时可以把多个MapReduce任务组合成一个较大的DAG任务,减少了MapReduce中间过程文件的存储
合理组合其子过程,减少任务的运行时间
Ambari:
一个供应、管理和监视Hadoop集群的开源框架
两大核心:HDFS MapReduce
通过HDFS实现分布式存储的底层支持
通过MapReduce实现分布式并行任务处理的程序支持
HDFS:
主从结构
NameNode:管理文件系统的命名空间和客户端对文件的访问操作
DataNode:管理存储的数据
MapReduce:
JobTracker:调度一个作业的所有任务
TaskTracker:负责主节点指派的任务
JobTracker接收到提交作业和其配置信息后,将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
Hadoop上并行应用程序的开发是基于MapReduce编程模型的
MapReduce库的用户用两个函数来表达这个计算:Map和Reduce
Map函数接收一个输入的key/value对,然后产生一个中间key/value对的集合;
把具有相同key值得value集合在一起,然后传递给Reduce函数。
Reduce函数接收key和相关的value集合
每次调用Reduce函数只产生0或1个输出的value值。
MapReduce计算模型非常适合在大量计算机组成的大规模集群上并行运行。
原理:
数据分布存储
分布式并行计算:DataNode既是数据存储结点,也是计算结点
本地计算:移动计算比移动数据更经济
任务粒度:Block M个Map任务分布于N台计算机上并行运行,Reduce任务数由用户指定
数据合并:Combine,在分割之前,将中间结果有相同key的value合并
数据分割:Partition,把Map任务的中间结果按key划分为R份——reduce任务数
Reduce:Map任务的中间结果在执行完Combine、Partition之后,以文件形式存储于本地磁盘,中间结果的位置将通知JobTracker,JobTracker再通知Reduce任务到哪取中间结果。
任务管道:有R个Reduce任务就有R个最终结果,很多情况下它们无需合并,而是作为另一个计算任务的输入,这也就形成了任务管道。
将运行于大规模集群上的复杂的并行计算过程高度地抽象为两个函数:Map和Reduce。
一个Job通常把输入的数据集切分为若干独立的数据块,由Map任务并行处理。
框架对Map的输出进行排序,然后把结果输入给Reduce任务。
计算结点和存储结点在一起。
分布式文件系统 HDFS
分布式数据库 HBase
数据仓库工具 Hive
HDFS的数据管理
整个集群的单一命名空间
数据一致性:一次写入,多次读取
文件分割成多个文件块,每个文件块被分配存储到数据结点上,根据配置由复制文件块保证数据安全
三个角色:NameNode,DataNode,Client
NameNode元数据信息:路径,副本数,分块,块所在的结点
文件写入:
1.Client向NameNode发起文件写入请求;
2.NameNode根据文件大小和文件块配置情况,返回给Client所管理的DataNode的信息;
3.Client将文件划分为多个Block,根据DataNode的地址信息按顺序将其写到每一个DataNode中。
文件读取:
1.Client向NameNode发起文件读取的请求;
2.NameNode返回文件存储的DataNode信息;
3.Client从DataNode读取文件。
文件块复制:
1.NameNode发现部分文件的Block不符合最小复制数这一要求或部分DataNode失效;
2.通知DataNode相互复制Block;
3.DataNode开始直接相互复制。
文件块的位置:三个副本,本机架2个,另一机架1个
心跳检测:用心跳检测DataNode的健康状况
数据复制:场景为DataNode宕机、需平衡DataNode的存储利用率和平衡DataNode数据交互压力等情况,可使用HDFS的balancer命令配置threshold来平衡每一个DataNode的磁盘利用率。
数据校验:CRC32 写入校验信息,读入时,先校验后读入
管道性写入:写入文件到DataNode上时,首先读取一个Block,然后将其写到一个DataNode上,接着由第一个DataNode将其传递到备份的DataNode上,直到所有备份完成后,客户端才开始写下一个block。
安全模式:启动时进入/命令进入。数据不允许修改和删除。主要是为了在系统启动时检查各个DataNode上数据块的有效性,同时根据策略进行必要的复制或删除部分数据块。
Hbase的数据管理
类似于BigTable的分布式数据库
一个稀疏的、长期存储的、多维度的排序映射表,这张表的索引是行关键字、列关键字和时间戳
表中的数据都是字符串
每一行都有一个可排序的主键和任意多的列
由于列是稀疏存储的,所以同一张表中的每一行数据都可以有截然不同的列
列名字的格式是<family><label>
每一张表有一个family集合,这个集合是固定不变的,相当于表结构
label值相对于每一行来说都是可以改变的
Hbase把同一family中的数据存储在同一目录下
Hbase的写操作是锁行的,每一行是一个原子元素,可以加锁
时间戳,每次生成一个新的版本都会跟一个时间戳,可以设置保留几个版本
客户端可以获得最近版本,也可获得全部版本
三大组成部分
HBaseMaster:HBase主服务器
ZooKeeper
领导选举法(Leader Election Algorithm)
主服务器承担初始化集群的任务。当主服务器第一次启动时,会试图从HDFS获取根或根域目录,如果获取失败则创建根或根域目录,以及第一个元域目录。
下次启动时,主服务器可获得集群和集群中所有域的信息。
负责域的分配、域服务器运行状态的监视、表格管理
HRegionServer:Hbase域服务器
服务于主服务器分配的域、处理客户端的读写请求、本地缓冲回写、本地数据压缩、分割域
每个域只能由一台域服务器来提供服务
当其开始服务于某个域时,它会从HDFS文件系统中读取该域的日志和所有存储文件
同时管理操作HDFS文件的持久性存储工作
客户端与主服务器通信获取域和域服务器列表信息后,就可以直接向域服务器发送域读写请求,来完成操作。
HBase Client:
客户端与Hbase主机交换消息以查找根域的位置,这是二者的唯一交流
定位根域后,客户端获取元域信息,元域信息中包含所需用户域的域服务器地址
客户端再连接元域所在的域服务器,获得用户域所在的域服务器地址
定位用户域服务器后发出读写请求
用户域的地址将缓存在客户端中
Hive的数据管理
建立在Hadoop上的数据仓库基础架构,提供一系列工具进行数据的提取、转化、加载
是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制
Hive QL
1.元数据存储
Hive将元数据存储在RDBMS中,有三种模式可以连接到数据库
a.Single User Mode:此模式连接到一个In-Memory的数据库Derby,一般用于Unit Test。
b.Multi User Mode:通过网络连接
c.Remote Server Mode:用于非Java客户端访问元数据库,在服务器端启动一个MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer来访问元数据库
2.数据存储
无专门存储格式,无索引
只需明确列分隔符、行分隔符
Hive中所有数据都存储在HDFS中
4种数据模型:Table、 External Table、 Partition、 Bucket
3.数据交换
用户接口:客户端、Web界面、数据库接口
元数据存储:通常存储在关系数据库中,如MySQL、Derby等
解释器、编译器、优化器、执行器
Hadoop:HDFS进行存储、MapReduce进行计算
元数据包括表的名字、表的列、表的分区、表分区的属性、表的属性(外表?)、表的数据所在目录。
生成的查询计划存储在HDFS中,随后由MapReduce调用执行
带*的查询不会生成MapReduce任务
用户权限管理
用户分组管理,为更高层的HDFS访问、服务访问、Job提交和配置Job等操作提供认证和控制基础。
Hadoop上的用户和用户组由用户自己指定,如果未指定,Hadoop会调用Linux的whoami命令获取当前Linux系统的用户名和用户组,将其保存在Job的user.name和group.name两个属性中。
用户提交Job的后续认证和授权以及集群服务的访问都将基于此用户名和用户组的权限及认证信息进行。
HDFS安全策略
用户和HDFS服务之间的交互主要有两种情况:
用户机和NameNode之间的RPC交互获取待通信的DataNode位置;
客户机和DataNode交互传输数据块
MapReduce安全策略
主要涉及Job提交、Task和Shuffle三个方面