Cassandra集群数据初始化方案的构想
2010-07-03 14:19
190 查看
一个Cassandra集群需要投入时候,绝大多数时候都是会有初始化数据的,比如博客网站中所有的博客数据,数据分析网站中所有的网页信息,电子商务网站中所有的商品信息等等。这些初始化数据往往量的都非常大,不适用直接使用Thrift API的方式(谈谈Cassandra的客户端)直接导入。Facebook曾经使用了叫做BinaryMemTable的方式导入(使用Binary Memtable将大量数据导入Cassandra)。
我们在集群中安装Hadoop和Cassandra,假设我们需要初始化的数据可以导入成一个平面文件(txt文件),然后上传到HDFS中。其中每一台机器既是Cassandra的节点也是Hadoop的Slave机器,并且每一台Slave机器的Reduce的个数为1。
为了将大量的数据导入到集群中,我个人认为有如下2中方案。
在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服务。
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目录中。
我们在集群中安装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/tag/Cassandra/相关文章推荐
- 【云星数据---大数据集群部署系列006】:spark2.2部署方案
- 低调、奢华、有内涵的敏捷式大数据方案:Flume+Cassandra+Presto+SpagoBI
- spark + cassandra +postgres +codis 大数据方案
- Cassandra_ Cassandra 定期删除数据方案 设计
- spark+cassandra实时数据分析方案
- HBase迁移数据方案1(两个集群不能通信)
- HBase迁移数据方案(两个集群不能通信)
- ViewFs----HDFS跨集群数据合并方案之ViewFileSystem
- 大数据自动化安装部署方案(一)——集群系统环境设置
- 本地日志数据实时接入到hadoop集群的数据接入方案
- 大数据集群失联问题解决方案
- 【云星数据---大数据集群部署系列007】:Zeppelin0.7.3多环境部署方案
- 本地日志数据实时接入到hadoop集群的数据接入方案
- 大数据集群失联问题解决方案
- HBase集群数据迁移方案
- HDFS跨集群数据合并方案之ViewFileSystem
- 通过eclipse方法来操作Hadoop集群上cassandra数据库(包括创建Keyspace对象以及往数据库写入数据)
- 【Spring容器】项目启动后初始化数据的两种实践方案
- postgresql集群方案hot standby初级测试(三)——蛋疼测试——手动同步数据
- 企业级整站集群数据备份项目方案详解