Cassandra叢集資料初始化的實現步驟

來源:互聯網
上載者:User

一個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的Message Service和Gossip服務。

2. 建立Cassandra的檔案目錄。

3. 關閉Cassandra的壓縮功能。

4. 等待一個Range的delay時間。

在Reducer中,reduce階段進行以下操作:

1. 根據每一個key建立其對應的ColumnFamily

2. 建立RowMutation的訊息

3. 將訊息發送到叢集中所有應該獲得該資料的節點中。

在Reducer中,close階段進行以下操作:

1. 等待Message Service中所有的訊息發送完畢。

2. 完畢Cassandra的Message Service和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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.