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.shufengxianlan.com/qtweb/news31/10581.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联