码迷,mamicode.com
首页 > 其他好文 > 详细

大数据科普①(我家科普就长这样)

时间:2015-10-24 17:27:28      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:

IBM用4V(Volume大容量、Velocity高速率、Variety多形式、Value高价值)来描述大数据。

IBM用4V(Volume大容量、Velocity高速率、Variety多形式、Value高价值)来描述大数据。

技术分享
技术分享

在大数据背景下,数据规模已经由GB级别跨越到PB级别,单机已无法存储与处理如此规模的数据量,只能依靠大规模集群来对这些数据进行存储和处理,所以系统可扩展性成为衡量系统优劣的重要指标。

数据量衡量单位:
1024KB=1MB;
1024MB=1GB;
1024GB=1TB;
1024TB=1PB;
1024PB=1EB;
1024EB=1ZB

(传统并行数据库系统)Scale Up 纵向扩展:不增加机器数量,而是通过改善单机硬件资源配置来解决问题。

(目前主流的大数据存储与计算系统)Scale Out横向扩展:通过增加机器数目来获得水平扩展能力。

Shard/Partition数据分片:将数据进行切分并分配到各个机器中。

Routing数据路由:数据分片后,如何能找到某条记录的存储位置。

对于海量数据,通过数据分片实现系统的水平扩展,而通过数据复制来保证数据的高可用性。
为了保证数据在故障常发的环境下仍然可用,需要将同一份数据复制存储在多处来获得保证。数据复制同时还能增加读操作的 效率,客户端可以从多个备份 数据中选择物理距离较近的进行读取,既增加了读操作的并发性又提高了单次读的读取效率。
技术分享

1.1数据分片与路由的抽象模型

技术分享
上图可看作是一个二级映射关系。
第一级映射是key-partition映射,将其数据记录映射到数据分片空间,这往往是多对一的映射关系,即一个数据分片包含多条记录数据。
第二级映射是paritionn-machine映射,其将数据分片映射到物理机器中,这一般也是多对一映射关系,即一台物理机容纳多个数据分片。

在做数据分片时,根据key-partition映射关系将大数据水平切割成众多数据分片,然后再按照partition-machine映射关系将数据分片放置到对应的物理机器上。而在做数据路由时,如要查找某条记录的值Get(key),首先根据key-partition映射找到对应的数据分片,然后再查找partition-machine关系表,就可以知道具体哪台物理机器存储哪条数据,之后即可从相应物理机读取key的对应value内容。

哈希分片和范围分片策略都可以映射到这个抽象模型上。对应哈希分片来说,因为其主要通过哈希函数建立key-partition映射关系,所以只支持“点查询”(Point Query):根据某个记录的主键(key)获得记录内容。而无法支持“范围查询”(Range Query):指定记录的主键范围一次读取多条满足条件的记录。

  • 采用哈希分片的系统:Dynamo、Cassandra、Riak、Voldmort、Membase等
  • 采用范围分片的系统:Google的BigTable、微软的Azure等
  • 同时提供两种方式:Yahoo的PNUTS系统

哈希分片(Hash Partition)

1.Round Robin

就是俗称的哈希取模法,是实际中非常常用的数据分片的方法。设有技术分享台物理机,通过下面哈希函数实现数据分片:

技术分享
对物理机进行从0到K-1的编号,对于以key为主键的某个记录,H(key)的数值即是存储该数据的物理机编号。
优点:实现简单
缺点:缺乏灵活性,若新增一台物理机到分布式存储系统,那么哈希函数就变成:
技术分享
这样之前已分配的所有数据与存储该数据的物理机之间的映射关系就会被打乱。

2.虚拟桶(Virtual Buckets)

Membase(现更名为Conchbase)是一个内存分布式NoSQL数据库,对于数据分片管理,其提出了虚拟桶的实现方式:
技术分享
Membase在待存储记录和物理机之间引入了虚拟桶层,所有记录首先通过哈希函数映射到对应的虚拟桶。记录和虚拟桶是多对一的映射关系,即一个虚拟桶包含多条记录信息;第二层映射是虚拟桶和物理机之间的映射关系,同样多对一映射,一个物理机可以容纳多个虚拟桶,其具体实现方式是通过查表来实现的,即Membase通过内存表来管理这层映射关系。
Membase的虚拟桶层其实就是“数据分片”层,一个虚拟桶即一个数据分片。key-partition映射采用哈希函数,partition-machine映射则采用表格管理。
优点:当加入新机器时,将某些虚拟桶从原先分配的机器重新分配给新机器,只需要修改partition-machine映射表中受影响的个别条目就能实现扩展,具有较强的灵活性。

3.一致性哈希(Consistent Hashing)

分布式哈希表(DHT)是P2P(Peer-to-Peer)网络(对等联网)和分布式存储中常见的一项技术,是哈希表的分布式扩展,即考虑在多机分布环境,每台机器负责承载部分数据的情形下,如何通过哈希方式来对数据进行增/删/改/查等数据操作的方法。DHT只是一种技术概念,具体的实现方式有很多种,一致性哈希是其中的一种实现方式。
技术分享
上图是将哈希空间表示为长度为5的二进制数值(m=5)的“一致性哈希算法示意图。因为m=5,所以其哈希空间可以表达的数值范围为0~31,”一致性哈希“算法将哈希数值空间按照大小组成一个首尾相接的环状序列。对于每台机器,可以根据其IP和端口号经过哈希函数映射到哈希数值空间,这样不同的机器就成了环状序列中的不同节点,而这台机器则负责存储落在一段有序哈希空间内的数据,如N14节点就存储主键经过哈希后落在6~14范围内的键值数据,而N5节点就存储30~31以及0~5范围内的键值数据。同时,每个机器节点记录环中的前趋节点和后继节点地址位置,使之成为一个真正的有向环。

  1. 路由问题
    通过以上方式,可以将海量数据分布到集群中的不同机器节点中,实现数据分片功能。在P2P环境下意味着没有中心管理节点,那么如何根据数据记录的主键以及哈希函数H来定位到记录内容呢?
    一种高效率的查找方式,可以在每个机器节点配置路由表(Finger Table),路由表存储m条路由信息(m为哈希空间的二进制数值比特位长度,上面例子m=5),其中第i项(技术分享)路由信息代表距离当前节点为技术分享的哈希空间数值所在的机器节点编号。比如对于图1-4例子中的N14节点,其对应路由表信息如下:
距离 技术分享 技术分享 技术分享 技术分享 技术分享
机器节点 N20 N20 N20 N25 N5

表中第3项代表与N14节点距离为4的哈希值(即14+4=18)落在N20节点上。同理第5项代表与N14节点距离为16的哈希值落在N5节点上。

有了路由表,假设机器节点技术分享接收到了主键为key的查询请求,如果技术分享不在技术分享的管理范围,则下面算法描述了其路由过程;
算法1 一致性哈希路由算法
输入:机器节点技术分享发起初始查询请求,查询主键key对应的键值,其中技术分享
输出:技术分享给出key对应的键值value,或者返回键值不存在的信息
算法:该算法通过不同节点之间发送消息来协作完成。假设当前执行操作的节点为技术分享,其初始值是技术分享技术分享的后继节点为技术分享,重复执行下列步骤。
步骤1,判断是否技术分享,如果为真,则结束查找,说明key如果存在,则在技术分享上,所有技术分享发送消息给技术分享查找key的值value,技术分享将查询结果返回给技术分享(注:每个消息都包含消息源技术分享的相关消息)。
步骤2,否则,技术分享查找其对应的路由表,找到小于j的最大编号节点技术分享(如果所有路由表都大于j,则选择第m-1项路由信息内的数据作为技术分享),技术分享技术分享发送消息,请求它代表技术分享查找key的值value,技术分享此时成为当前节点技术分享,继续按照步骤1和步骤2递归进行查找操作。

  1. 加入新节点时的情形
    如果P2P网络中新加入一个机器节点技术分享,首先技术分享必须能够和目前P2P网络中任意一个节点技术分享建立联系,通过技术分享按照”路由问题”所述算法查询技术分享对应哈希值技术分享,可以找到技术分享的后继节点技术分享,假设技术分享的前趋节点为技术分享,那么为了能够将技术分享加入P2P网络,需要做下面两件事:
    (1) 改变技术分享技术分享技术分享对应已经发生变化的前趋节点和后继节点记录,以体现新的网络架构。
    (2) 数据的重新分片与分布,具体就是将技术分享节点中存储的应该由技术分享承载的数据(即技术分享节点上哈希值小于等于new的记录)迁移到技术分享节点上。
    在非并发环境下以上事务较易完成,但是在并发环境下,可能在技术分享技术分享之间同时有多个新节点要加入,此时为了保证不出问题,完成上述两个任务可以按照下两步操作:
    步骤1:将技术分享的后继节点指向技术分享,前继节点置为空值NULL
    步骤2:这一步并非专门为新加入节点设立的,而是所有节点周期性自动完成。这一步骤被称为稳定性检测(Stabilization),P2P网络中每个节点会定期执行,通过这个步骤可以完成前趋和后继节点的更新和数据迁移。对于节点技术分享来说,稳定性检测算法流程:
    算法2 稳定性检测

    • 步骤1,假设技术分享技术分享的后继节点,技术分享技术分享询问其前趋节点技术分享技术分享技术分享答复,一般情况下,如果这样则转步骤4
    • 步骤2,如果技术分享介于技术分享技术分享之间,技术分享记录下技术分享为其后继节点。
    • 步骤3,令技术分享技术分享的当前后继节点,其可能是技术分享也可能是技术分享,这取决于步骤2的判断结果。如果技术分享的前趋节点为空或者技术分享位于技术分享和它的前趋节点之间,那么技术分享技术分享发消息告诉技术分享技术分享说就是技术分享的前趋节点,技术分享将其前趋节点设置为技术分享
    • 步骤4,技术分享把其部分数据迁移到技术分享,即将技术分享上哈希值小于等于c的记录迁移到技术分享上。
  2. 当节点离开P2P网络
    正常离开的节点在离开前可以做些准备工作,例如通知相应节点更新其前趋和后继节点以及将本身持有数据迁移到后继节点上。
    异常离开往往是机器故障导致,此时故障机器保持的数据可能丢失,为了避免这个额额问题,可以采用将同一份数据在多个机器上保留副本的方式。

  3. 虚拟节点
    上述一致性哈希算法有两个潜在问题:机器节点映射到环状结构的位置是随机的,所以可能会导致机器负载不均衡;另外,在大规模数据中心中,机器异质性很常见,既有高性能、高配置机器,也有老型号的低配置机器,一致性哈希并未考虑这个问题,将所有机器平等看待,所以可能存在低配置机器高负载的情况。Dynamo对一致性哈希进行改造,引入”虚拟节点“概念,将一个物理节点虚拟成若干虚拟节点,分别映射到一致性哈希的环状结构不同位置。

范围分片(Range Partition)

技术分享
范围分片首先将所有记录的主键进行排序,然后在排好序的主键空间里面将记录划分成数据分片,每个数据分片存储有序的主键空间片段内的所有记录。在实现具体存储系统时,往往保持一个数据分片的映射表,记录表每一项记载数据分片的最小主键及其对应的物理机地址(如上图)。在对记录增/删/改时,查找映射表中就可以找到对应存储这个记录所在的数据分片的物理机,至于数据分片在物理机的管理方式往往采用LSM树。

大数据科普①(我家科普就长这样)

标签:

原文地址:http://www.cnblogs.com/XBlack/p/4907088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!