Cassandra集群数据初始化的实现步骤

数据库 其他数据库
本文将讨论的是Cassandra集群数据初始化的相关问题,包括每一步的注意问题,二次排序的问题。

一个Cassandra集群需要投入时候,绝大多数时候都是会有初始化数据的,比如博客网站中所有的博客数据,数据分析网站中所有的网页信息,电子商务网站中所有的商品信息等等。这些初始化数据往往量的都非常大,不适用直接使用Thrift API的方式(谈谈Cassandra的客户端)直接导入。Facebook曾经使用了叫做BinaryMemTable的方式导入(使用Binary Memtable将大量数据导入Cassandra)。

我们在集群中安装Hadoop和Cassandra,假设我们需要初始化的数据可以导入成一个平面文件(txt文件),然后上传到HDFS中。其中每一台机器既是Cassandra的节点也是Hadoop的Slave机器,并且每一台Slave机器的Reduce的个数为1。

为了将大量的数据导入到集群中,我个人认为有如下2中方案。

使用BinaryMemTable

1.运行MapReduceJob

在Mapper中按照Key对导入的数据进行分区。

在Reducer中,configure阶段进行以下操作:

1. 初始化Cassandra的消息服务和Gossip服务。

2. 创建Cassandra的文件目录。

3. 关闭Cassandra的压缩功能。

4. 等待一个Range的delay时间。

在Reducer中,reduce阶段进行以下操作:

1. 根据每一个key创建其对应的ColumnFamily

2. 创建RowMutation的消息

3. 将消息发送到集群中所有应该获得该数据的节点中。

在Reducer中,close阶段进行以下操作:

1. 等待消息服务中所有的消息发送完毕。

2. 完毕Cassandra的消息服务和Gossip服务。

2.启动Cassandra集群

在Cassandra启动后,手动执行压缩操作,合并之前产生的大量的SSTable文件。

自己生成SSTable文件

1.启动Cassandra集群

启动后,确保整个集群的ring已经建立起来。

2.运行MapReduceJob

在Mapper中,configure阶段进行以下操作:

1. 随机连接一台Cassandra机器

2. 获取Cassandra集群的token map

在Mapper中,map阶段进行以下操作:

1. 根据数据的key对应的节点地址划分数据

二次排序

1. 将节点地址和key相应的数据作为一个Group

2. Group中的数据按照key的升序排序

在Reducer中,configure阶段进行以下操作:

1. 为每一个ColumnFamily创建一个SStableWriter实例。

在Reducer中,reduce阶段进行以下操作:

1. 根据每一个key创建其对应的ColumnFamily

2. 调用相应的SStableWriter.append()方法,将数据写入到指定的SStable文件中。

在Reducer中,close阶段进行以下操作:

1. 调用每一个ColumnFamily的SStableWriter.closeAndOpenReader()方法。

2. 将生成的SSTable文件SCP到应该属于的Cassandra的data目录中。

3.重新启动Cassandra集群

原文标题:Cassandra集群数据初始化方案的构想

链接:http://www.cnblogs.com/gpcuster/archive/2010/07/03/1770452.html

【编辑推荐】

  1. MongoDB CEO谈NoSQL的大数据量处理能力
  2. 抛弃关系数据库 PHP程序员应了解MongoDB的五件事
  3. MongoDB,无模式文档型数据库简介
  4. 关系数据库的末日是否已经来临
  5. 扔掉沉没成本 尝试关系数据库替代品OODBMS

 

责任编辑:彭凡 来源: 博客园
相关推荐

2011-03-16 10:52:20

2023-11-12 23:08:17

C++初始化

2009-08-31 10:38:34

C#变量初始化

2010-02-01 14:21:24

C++初始化列表

2010-01-05 15:35:21

.NET Framew

2009-05-20 10:58:15

数据库查询初始化

2012-03-13 13:38:42

Java

2009-06-10 16:17:00

Netbeans JT初始化

2021-07-07 05:00:17

初始化源码

2010-06-21 10:25:09

Linux APM

2010-01-13 18:01:43

VB.NET数组初始化

2011-06-17 15:29:44

C#对象初始化器集合初始化器

2010-01-22 15:47:37

VB.NET初始化网格

2020-12-03 09:50:52

容器IoC流程

2021-03-12 10:30:11

SpringMVC流程初始化

2022-07-06 10:37:45

SpringServlet初始化

2010-07-28 10:22:33

FlexApplica

2019-11-04 13:50:36

Java数组编程语言

2009-09-08 09:48:34

LINQ初始化数组

2009-11-11 15:29:15

ADO初始化
点赞
收藏

51CTO技术栈公众号