1.Hadoop
1.1简介
是什么:Hadoop是一个由Apache基金会所开发的分布式系统基础架构
有什么用:使用户可以在不了解分布式底层细节的情况下,开发分布式程序
- 屏蔽分布式底层细节,使得开发时无需考虑分布式底层的文件存储、资源调度、任务分配、结果汇总等细节
1.2优劣
- 高可靠行性:Hadoop底层维护多个数据副本,即使某个计算单元或存储出现故障,也不会导致数据的丢失
- 高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便的扩展到数以千计的节点中
- 高效性:Hadoop能够在节点间动态的移动数据,并保证各个节点的动态平衡,因此处理速度非常快
- 高容错性:Hadoop能够自动保存数据的多个副本,能够自动将失败的任务重新分配
- 低成本:Hadoop是开源的,项目的软件成本因此会大大降低
1.3核心架构
- HDFS:适合运行在通用硬件上的分布式文件系统
- MapReduce:面向大数据并行处理的计算模型、框架和平台
Hadoop生态圈:

2.HDFS
2.1 简介
是什么:Hadoop分布式文件管理系统,是被设计成适合运行在通用硬件上的分布式文件系统,基于基于流式数据模式访问及处理超大文件的目的而构建。
**有什么用:**用来管理存储在分布式集群中的文件,包括数据读取、数据写入、文件管理等
**解决了什么问题:**解决分布式环境中文件存储及管理问题,屏蔽了底层数据存储、传输、节点损坏等底层逻辑,使用户可以像使用本地文件系统一样管理和存储文件系统中的数据。
2.2 优劣点
优点
- 可以处理超大文件
- 运行在廉价的商用集群中
- 高容错性和高可靠性
- 流式数据访问,一次写入多次读取
缺点
- 不适合低延时数据访问
- 无法高效存储大量小文件
- 不支持多用户写入和随机文件修改
3.分布式文件系统
3.1 简介
是什么:分布式文件系统(Distributed File System, DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,或是若干不同的逻辑磁盘分区活卷标组合在一起而形成的完整的有层次的文件系统。
**有什么用:**DFS为分布在网络上任意位置的资源提供一个树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便
**解决了什么问题:**屏蔽了底层数据存储、传输、节点损坏等底层逻辑,使用户可以像使用本地文件系统一样管理和存储文件系统中的数据。
- 背景:传统方式管理、存储数据在大数据环境下已不适用,随着获取的数据成指数倍成长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量方式,在容量大小、容量增长速度、数据备份、数据安全等方面的表现都差强人意。
- 方案:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络。每个节点可以分布在不同的地点,通过网络进行节点间的通信和数据传输。
- 优点:用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。
- 解决问题:
- 海量数据存储问题
- 数据高可用(冗余备份)问题
- 较高的读写性能和负载均衡问题
- 支持多平台语言问题
- 高并发问题
3.2 优劣点
- 通透性:使得实际上是通过网络访问文件的动作,由程序和用户看来就像是访问本地的磁盘一样
- 容错性:即使数据中有某些节点脱机,整体来说系统仍然可以持续运行而不会有数据损失
3.3 常见分布文件系统
-
示例:GFS,HDFS,Lustre,Ceph,GridFS,mogileFS,TFS,FastDFS等
-
TFS:针对海量的非结构化数据,提供海量小文件存储,通常文件大小不超过1M
- TFS(Taobao File System)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。
- TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需要,被广泛应用在淘宝的各项应用中,采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性,同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化了文件的访问流程,一定程度上为TFS提供了良好的读写性能。
- TFS的设计目标是海量小文件的存储,所以在TFS中,将大量的小文件(实际数据文件)合并成为一个大文件,这个大文件称为块(Block), 每个Block拥有在集群内唯一的编号(BlockId),Block Id在NameServer在创建Block的时候分配, NameServer维护block与DataServer的关系。Block中的实际数据都存储在DataServer上。而一台DataServer服务器一般会有多个独立DataServer进程存在,每个进程负责管理一个挂载点,这个挂载点一般是一个独立磁盘上的文件目录,以降低单个磁盘损坏带来的影响。
-
对比:



3.4 参考资料
4.MapReduce
4.1 简介
是什么:MapReduce是一个分布式运算程序编程框架,采用分而治之的思想,将对大规模数据集的操作,分发为一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。
有什么用:简化分布式编程的复杂度,使得开发人员可以将绝大部分工作集中在业务逻辑的开发,分布式计算中的复杂性交由框架处理
**解决了什么问题:**负责处理了并行编程中的分布式存储、工作调度、负载均衡、容错均衡、容错处理、网络通信等问题。
4.2 主要计算过程
- map阶段:负责数据的过滤分发,将原始数据转化为键值对
- combiner:combiner是一个本地化的Reduce操作,是map运算的本地后续操作,主要是在map中计算出中间文件前做一个简单的合并重复键值的操作。从而达到节约后续处理及网络传输资源的目的,但是Combiner阶段有可能会影响到Reduce的最终计算结果,例如计算总数、最大值、最小值等可以使用Combiner,但是如果计算平均值时使用combiner则会导致计算结果出错。
- 每一个map都可能产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和Reduce节点之间的数据传输量,以提高网络IO性能
- 单一节点承载过重降低程序性能,程序全在Reduce上运行,导致负载过重,所以使用combiner在map端做一次聚合,降低Reduce端压力
- shuffle:将map端输出进行进一步整理并交给Reduce的过程就是Shuffle,包括Map shuffle和Reduce shuffle
- map shuffle:Map端的shuffle过程是对Map结果进行分区、排序、分割,然后将属于同一分区的输出合并在一起并写在磁盘上,最终得到一个分区有序的文件。分区有序的含义是指map输出端的键值对按分区进行排列,具有相同分区值得键值对存储在一起,每个分区中的键值对又按照key值进行圣墟排列。
- Reduce shuffle:主要为复制输出、排序合并两个阶段
- reduce:合并操作,将具有相同key值得value进行处理后再输出新的键值对作为最终结果
4.3 优缺点
优点:
- MapReduce易于编程:只需要简单的实现一些接口就可以完成分布式编程操作,程序员仅需关系具体应用层的具体计算逻辑,无需关心具体的底层细节。
- 良好的扩展性:当计算资源不满足时,可以通过简单的增加机器来扩充计算能力
- 高容错性:当一个节点宕机时,其中的计算任务可以快速的转移到其他机器上,切换过程完全由框架处理,无需人工干涉。
缺点:
- 实时计算:MapReduce无法在秒级或者毫秒级返回计算结果,如果需要大数据量的毫秒级返回,可以使用HBASE
- 流计算:流计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化,这是因为MapReduce自身的设计特点决定了数据源必须是静态的。如果需要处理流式数据可以用Storm、SparkStreaming、Flink等流计算框架。
- DAG:多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入磁盘,会造成大量的磁盘IO,导致性能非常低下,此时可以考虑用Spark等迭代计算框架。
5.Zookeeper
5.1 是什么
Zookeeper是一个分布式服务协调框架,提供分布式数据一致性的解决方案,基于Zookeeper的数据结构,Watcher,选举机制等特点,可以实现数据的发布/订阅、软负载均衡、命名服务、统一配置管理、分布式锁、集群管理等(并不仅仅应用于Hadoop领域)。
个人理解:
Zookeeper本质上可以看做是共享存储空间,但是比单纯的共享存储增加了分布式节点状态探查、数据修改通知等。用Zookeeper作为同一配置管理器来举例,由于Zookeeper可以看做是共享存储空间,所以将相关的配置文件写入Zookeeper后,分布式系统中各个节点只需访问Zookeeper就可以获取最新的配置信息,同时Zookeeper还拥有修改通知的功能,当配置信息被修改后,Zookeeper可以发送通知信息到关注该配置的节点,节点只需重新访问即可获取最新的配置信息。
- 一致性:分布式系统中状态或数据保持同步和一致
- 与事务的区别:事务需满足ACID特定,事务是一致性的一种特例,比起一致性更难达成
5.2 有什么用
- 保证更新请求顺序进行,来自同一个client的更新请求按其发送顺序一次执行
- 保证数据更新原子性,一次数据更新要么成功,要么失败
- 保证全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的
- 保证实时性,在一定时间范围内,client读到的数据是最新的
5.3 解决了什么问题
解决分布分环境下,如何保证数据的最终一致性问题
- 常见一致性解决方案
- 查询重试补偿:对于分布式应用中不确定的情况,先试用查询接口查询到当前状态,如果当前状态不一致则采用补偿接口对状态进行重试推进,或者回滚接口对业务做回滚。如支付宝发起转账请求到银行,如果一直未得到回应,则可以通过银行的查询接口查询该笔交易的状态,如果该笔交易未收到,则采取补偿的模式进行推进。
- 定时任务推送:如果重试补偿仍未成功,可能需要继续重试,需要2次、3次推送。
- TCC:Try-confirm_canccel,实际上为两阶段协议,第二阶段可以实现提交操作或者逆操作
5.4 实际应用
5.4.1 Hadoop
Hadoop中通常使用Yarn作为资源管理、任务调度框架,负责调度管理整个集群的资源,Yarn中使用ResourceManager负责整个集群资源的管理和分配,但是ResourceManager在整个Hadoop中算是单点,如果出现故障会对整个集群的调度和资源管理带来很大的影响,因此为实现其高可用性,又构建一个备份ResourceManager,当主ResourceManager出现故障时,便会启动从ResourceManager,Zookeeper在其中负责管理ResourceManager。
5.4.2 配置管理(待完善)
在分布式系统中运行程序时,通常都会需要一些配置信息,如果程序分布在不同的机器上运行,当配置文件需要改变时,如果逐台
5.5 参考资料
6. hive
6.1 简介
是什么:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
有什么用:简化开发人员使用Hadoop的操作难度,可以采用类SQL语法查询存储在HDFS中的数据,减少开发人员的学习成本,提供快速开发的能力。
解决了什么问题:使用MapReduce实现复杂查询逻辑难度太大,避免用户直接写MapReduce程序,仅需使用类SQL语法就可以查询存储在HDFS中的大规模数据
6.2 优缺点
优点:
- 可扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务
- 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
- 容错:良好的容错性,节点出现问题SQL仍可完成执行。
缺点:
- 不能像RDBMS一般实时响应,Hive查询延时大
- 不能像RDBMS做事务型查询,Hive没有事务机制
- 不能像RDBMS做行级别的变更操作(包括插入、更新、删除)
- Hive没有定长的varchar类型,字符串都是string
- Hive是读时模式,在保存表格数据时不会对数据进行校验,而是在读数据时校验不符合个数的数据,并将之设置为NULL。
6.3 注意事项
- Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
- 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
- Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
- db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
- table:在hdfs中表现所属db目录下一个文件夹
- external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径
- 普通表: 删除表后, hdfs上的文件都删了
- External:外部表删除后, hdfs上的文件没有删除, 只是把文件删除了
- partition:在hdfs中表现为table目录下的子目录
- bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中
7.Yarn
是什么:
有什么用:
解决了什么问题:
8.数据倾斜
定义:数据倾斜是指在MapReduce程序运行中,在reduce阶段某一个节点或某几个节点执行时间较之其他节点要久很多,
2584

被折叠的 条评论
为什么被折叠?



