大数据时代
概念:短时间内快速产生大量多种多样的有价值的信息
大数据可以概括为5个V
数据量大(Volume)
类型多(Variety)
价值(Value)
真实性(Veracity)
一、为了解决数据量过大的问题
-
垂直扩展
在垂直扩展模型中,想要增加系统负荷就意味着要在系统现有的部件上下工夫,即通过提高系统部件的能力来实现。例如,假设你现在负责一批木材采伐的操作在这个例子中,我们假设有3辆卡车,每辆车一次可以运25根木材,计算花费1小时的情况下可以运送到指定地点等待处理的木材数量。通过这些数字我们可以算出我们系统最大的负荷量:
3辆卡车 * 25根木材 * 1小时=75根木材/小时
如果我们选择垂直扩展模型,那么我们将怎么做来使我们每小时可以处理150根木材?我们需要至少做以下两件事中的一件:
使每辆卡车的运输量增加一倍(50棵树每小时),或者使每辆卡车的运输时间减半(每辆卡车30分钟)。
3辆卡车 * 50棵树 * 1小时 = 150棵树/每小时
或者
3辆卡车 * 25棵树 * 30分钟 = 150棵树/每小时
我们没有增加系统的成员数,但是我们通过增加系统成员的生产效率来获得期望的负荷量 -
横向扩展
简单廉价的服务器或者pc端就可以
在水平扩展模型中,我们不是通过增加单个系统成员的负荷而是简单的通过增加更多的系统成员来实现。也就是说,在以上运送木材的例子中,通过增加卡车的数量来运送木材。因此,当我们需要将负荷从75棵树每小时增加到150棵树每小时,那么只需要增加3辆卡车。
6辆卡车 * 25棵树 * 1小时 = 150棵树/每小时
假如我们已经选择了垂直扩展方式,那么我们想要每小时处理150棵被砍伐的树时需要怎么做呢?我们需要做到以下两方面之一:要么使每辆卡车的运输量翻倍(50棵木材一次),要么使每辆开车的运输时间减半(30分钟)。
3辆卡车 * 50棵树 * 1小时 = 150棵树/每小时
或者
3辆卡车 * 50棵树 * 30分钟 = 150棵树/每小时
在这个例子中,系统每个成员的生产力依然没变,我们通过增加更多的卡车来提高系统的能力。
二、大数据的读写操作
-
Namenode与Datenode的关系
Namenode 老板
掌控全局 管理Datenode的信息 管理元数据
接收秘书的请求 进行读写操作
与Datenode之间进行相应的通信Datenode 员工
工作的------存储数据
汇报自己的情况
接收秘书的一个安排 -
写操作
(1).有一个大文件
(2).client会将大文件进行切块 大文件的大小默认/128M=block块数
(3)向Namenode进行汇报
for(Block block:blocks){
(4)client切下一块 128M
(5)client会向Namenode去申请资源-----Datenode的信息
(6)Namenode会返回一批负载不高的Datenode给client
(7)client会向Datenode里面发送block并且做好备份
(8)Datenode存放block块之后会向Namenode汇报情况
} -
读操作
(1)Namenode会向client发送一个请求,client接收到请求之后,会向Namenode去申请节点信息(blockid)
(2)Namenode会向client发送一些节点信息
(3)client获取到节点信息之后去Datenode上拿取数据-----jiujinyuanze -
读写扩展
读操作扩展
如 果你的系统读操作非常多,那么通过关系型数据库如mysql或者PostgreSql来垂直扩展数据存储是一个不错的 选择。结合你的关系型数据库通过使用 memcached或者CDN来构建一个健壮的缓存系统,那么你的系统将非常容 易扩展。在这种模式中,如果数据库超负荷运行,那么将更多的数据放入缓存中 来缓解系统的读压力。当没有更多的数据往缓存中放时,可以更换更快的数据存储硬件或者买更多核的处理器来获取更多的运行通道。摩尔定律使通过这种方法来垂 直扩展变得和购买更好的硬件一样简单。
写操作扩展
如 果你的系统写操作非常多,那么你可能更希望考虑使用可水平扩展的数据存储方式,比如Riak,Cassandra或者HBase。和大多数关系型数据管理 系统不同,这种数据存储随着增长增加更多的节点。由于你的系统大部分时间是在写入,所以缓存曾并不能像在读操作比较频繁的系统中起到那么大作用。很多写频 繁的系统一开始使用垂直扩展的方式,但是很快发现并不能根本解决问题。为什么?因为硬盘数和处理器数在某一点达到平衡,在这个边界上再增加一个处理器或者 一个硬盘都会是每秒钟的I/O操作数成指数性增长。相反,如果对写频繁的系统采取水平扩展策略,那么你将达到一个拐点,在这个拐点之后如果在增加一个节点 都远比使用更多的硬盘来的实惠。
三、大数据的读写操作
-
集群内提交 在提交的节点上放置block
集群外提交 选择一个负载不高的节点进行存放 -
放置在与第一个备份不同机架的任意节点上
-
放置在第二个机架的不同节点上
四、pipeline管道
- Namenode返回给client一些Datenode的信息
- client会和这些Datenode形成一个管道,并且将block切割成一个个ackPackage(64K)
- Datenode会从管道中拿取相应的数据进行存储
- 当存储完成之后,Datenode会向Namenode进行汇报