Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4450531
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: 大数据

2014-05-28 11:12:04

文章来源:http://blog.csdn.net/qinzhihu/article/details/8807531

从这节开始,都是高年级知识了,需要一点分布式的基础知识。

以前的文章说到, james(公司大佬)把任务分给了几拨人来做,那么怎么个分法呢? 什么任务交给什么人呢?
James估计是有自己的一套算法的, 在cassandra里面,这个对应的概念就叫 data partitioning.(数据分区)
数据分区,也是有一套算法的,里面有这3个重要参数:
? A partitioner that determines which node to store the data on.
? The number of copies of data, which is determined by the replica placementstrategy.
? The topology of the cluster, which is the number of nodes, the distributionof the nodes on racks, and the number
of data centers.

第一个参数说的是,你是用的什么分区器,打算怎么分区,分区的意思,就是数据分布,怎么把数据分布到很多很多的节点上。
第二个参数说的是,你的数据,有多少个副本,你是肯定不能只有 一份数据的,否则你这台死掉了,就消失了,必须准备好备胎。
第三个参数说的是,网络拓扑结构,数据中心,机架。你想想,机器总是放在机架上的,机架总是放在机房里的,机房总是放在大楼上的,一个大楼就可以视为一个数据中心,你要是南京,北京,上海,有三个机房,那你就是三个数据中心了。

在cassandra里面,这一堆大量的数据,表现为一个环(ring),为什么是一个环儿呢?
就是一个圆,无头无尾,自称一体,你要是看图的话,书上举的例子,都是画了一个圆,来说明数据咋分布的。就是james和韶涵他们手拉手,组织长了一个环儿,翩翩起舞。

环里的每一个节点,负责一部分数据。(one or more ranges of the data)。
同时,环里的节点,都持有一个令牌(token),这个令牌的作用,就是确定 环里翩翩起舞的韶涵,是真正的韶涵。
拿着令牌,james给你分任务,让你承包哪一块。

对于列族来说,承包给谁,是通过 row key来标示的。(Columnfamily data is partitioned across the nodes based on the row key). 一个节点,负责一小块区域的row key.
上面说了,要搞承包,怎么个包法呢?用什么办法呢?
Cassandra offers the following partitioners:

? RandomPartitioner

? ByteOrderedPartitioner

cassandra提供了2个办法,第一个办法叫RandomPartitioner。
啥意思呢?
掷骰子。

大家不要小瞧骰子,在很多情况下,这都是最公平的一种方式。
为了保证公平,得有一个算法来掷骰子。

The RandomPartition uses consistent hashing to determinewhich node will own a particular row。

这个算法翻译过来叫, 一致性哈希算法。
哈希哈希,嘻嘻哈哈,稀里哗啦,都散架了。

To distribute the data (including replicas) evenly acrossthe nodes, a hashing algorithm creates
an MD5 hash value of the row key.
这个分法,就是强调公平(evenly),各个节点,谁也别有怨言,上天来定,童叟无欺。

公平就是最好吗?
NO.
公平不见得有效率。

所以,我们还第二种算法来分包。
ByteOrderedPartitioner
这个是什么意思呢?
按照byte 的顺序, 来组织分区数据。
这个比刚才掷骰子不一样的地方是,它是有顺序的。
有顺序有什么用呢?
可以举个例子,把这一排人,按照个高个矮 排个队,排好对之后呢,如果你想要找 1.7 -1.8 米的人,就很容易找到了。
在cassandra里对应的例子就是:
Using the ordered partitioner allows range scans over rows.For example, if yourapplication has user names as the row key, you can scan rows
for users whose names fall between Jake and Joe.

你可以很容易找到 名字介于 Jake and Joe之间的人。

如果你有多个数据中心,分发数据就要使用另外一个分区器。
NetworkTopologyStrategy
在现实世界中,多个数据中心一般分布在不同的地理位置,比如说亚洲和美洲。
因此,对于这类情况,要特殊处理一下。
The preferred replication placement strategy for multiple data centerdeployments is the  NetworkTopologyStrategy,which calculates replicaplacement per data center

这个分区策略,是基于数据中心考虑问题,举例来说,你最少要保证,一个数据中心里,得有一个最新的记录的副本。

上面说的,都是如何分发数据的事情。

在现实世界里,每个节点都不是绝对可靠的,说不定会生病,死掉,所以你的数据必须要有备份。

下篇就来说这个事, 副本机制。

阅读(940) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~