Cassandra集群數(shù)據(jù)初始化的實(shí)現(xiàn)步驟
一個(gè)Cassandra集群需要投入時(shí)候,絕大多數(shù)時(shí)候都是會有初始化數(shù)據(jù)的,比如博客網(wǎng)站中所有的博客數(shù)據(jù),數(shù)據(jù)分析網(wǎng)站中所有的網(wǎng)頁信息,電子商務(wù)網(wǎng)站中所有的商品信息等等。這些初始化數(shù)據(jù)往往量的都非常大,不適用直接使用Thrift API的方式(談?wù)凜assandra的客戶端)直接導(dǎo)入。Facebook曾經(jīng)使用了叫做BinaryMemTable的方式導(dǎo)入(使用Binary Memtable將大量數(shù)據(jù)導(dǎo)入Cassandra)。
我們在集群中安裝Hadoop和Cassandra,假設(shè)我們需要初始化的數(shù)據(jù)可以導(dǎo)入成一個(gè)平面文件(txt文件),然后上傳到HDFS中。其中每一臺機(jī)器既是Cassandra的節(jié)點(diǎn)也是Hadoop的Slave機(jī)器,并且每一臺Slave機(jī)器的Reduce的個(gè)數(shù)為1。
為了將大量的數(shù)據(jù)導(dǎo)入到集群中,我個(gè)人認(rèn)為有如下2中方案。
使用BinaryMemTable
1.運(yùn)行MapReduceJob
在Mapper中按照Key對導(dǎo)入的數(shù)據(jù)進(jìn)行分區(qū)。
在Reducer中,configure階段進(jìn)行以下操作:
1. 初始化Cassandra的消息服務(wù)和Gossip服務(wù)。
2. 創(chuàng)建Cassandra的文件目錄。
3. 關(guān)閉Cassandra的壓縮功能。
4. 等待一個(gè)Range的delay時(shí)間。
在Reducer中,reduce階段進(jìn)行以下操作:
1. 根據(jù)每一個(gè)key創(chuàng)建其對應(yīng)的ColumnFamily
2. 創(chuàng)建RowMutation的消息
3. 將消息發(fā)送到集群中所有應(yīng)該獲得該數(shù)據(jù)的節(jié)點(diǎn)中。
在Reducer中,close階段進(jìn)行以下操作:
1. 等待消息服務(wù)中所有的消息發(fā)送完畢。
2. 完畢Cassandra的消息服務(wù)和Gossip服務(wù)。
2.啟動Cassandra集群
在Cassandra啟動后,手動執(zhí)行壓縮操作,合并之前產(chǎn)生的大量的SSTable文件。
自己生成SSTable文件
1.啟動Cassandra集群
啟動后,確保整個(gè)集群的ring已經(jīng)建立起來。
2.運(yùn)行MapReduceJob
在Mapper中,configure階段進(jìn)行以下操作:
1. 隨機(jī)連接一臺Cassandra機(jī)器
2. 獲取Cassandra集群的token map
在Mapper中,map階段進(jìn)行以下操作:
1. 根據(jù)數(shù)據(jù)的key對應(yīng)的節(jié)點(diǎn)地址劃分?jǐn)?shù)據(jù)
二次排序
1. 將節(jié)點(diǎn)地址和key相應(yīng)的數(shù)據(jù)作為一個(gè)Group
2. Group中的數(shù)據(jù)按照key的升序排序
在Reducer中,configure階段進(jìn)行以下操作:
1. 為每一個(gè)ColumnFamily創(chuàng)建一個(gè)SStableWriter實(shí)例。
在Reducer中,reduce階段進(jìn)行以下操作:
1. 根據(jù)每一個(gè)key創(chuàng)建其對應(yīng)的ColumnFamily
2. 調(diào)用相應(yīng)的SStableWriter.append()方法,將數(shù)據(jù)寫入到指定的SStable文件中。
在Reducer中,close階段進(jìn)行以下操作:
1. 調(diào)用每一個(gè)ColumnFamily的SStableWriter.closeAndOpenReader()方法。
2. 將生成的SSTable文件SCP到應(yīng)該屬于的Cassandra的data目錄中。
3.重新啟動Cassandra集群
原文標(biāo)題:Cassandra集群數(shù)據(jù)初始化方案的構(gòu)想
鏈接:http://www.cnblogs.com/gpcuster/archive/2010/07/03/1770452.html
【編輯推薦】
- MongoDB CEO談NoSQL的大數(shù)據(jù)量處理能力
 - 拋棄關(guān)系數(shù)據(jù)庫 PHP程序員應(yīng)了解MongoDB的五件事
 - MongoDB,無模式文檔型數(shù)據(jù)庫簡介
 - 關(guān)系數(shù)據(jù)庫的末日是否已經(jīng)來臨
 - 扔掉沉沒成本 嘗試關(guān)系數(shù)據(jù)庫替代品OODBMS
 















 
 
 

 
 
 
 