Sstableloader(Cassandraバルク・ローダー)
クラスターへの外部データの一括読み込み、異なるノード数または異なるレプリケーション・ストラテジを持つ別のクラスターへの既存のSSTableの読み込み、およびスナップショットの復元を行います。
- 外部データをクラスターに一括で読み込む。
- ノードの数またはレプリケーション・ストラテジの異なるクラスターに既存のSSTableを読み込む。
- スナップショットを復元する。
sstableloaderは一連のSSTableデータ・ファイルを稼働中のクラスターにストリーミングします。一連のSSTableを各ノードに単にコピーするのではなく、クラスターのレプリケーション・ストラテジに合わせて、関連するデータ部分を各ノードに転送します。データの読み込み先のテーブルは空でなくてもかまいません。
テーブルが別のクラスターでリペアされている場合は、読み込み後にリペアされません。
前提条件
sstableloaderではCassandraのゴシップを使用するため、以下のようになっていることを確認してください。
- cassandra.yaml構成ファイルがclasspathに含まれており、適切に構成されている。
- クラスター内の少なくとも1つのノードがシードとして構成されている。
- cassandra.yamlファイル内で、インポート先のクラスターに対して以下のプロパティが適切に構成されている。
sstableloaderを使用して外部データを読み込む場合は、まずSSTableを生成する必要があります。
DataStax Enterpriseを使用する場合は、Sqoopを使用して外部データをCassandraに移行できます。
SSTableの生成
SSTableWriterは、クラスターに一括読み込みする生のCassandraデータ・ファイルをローカルで作成するAPIです。Cassandraのソース・コードには、SSTableファイルを外部データから作成するためのCQLSSTableWriter実装が含まれています。この実装では、これらのファイルが基盤のストレージ・エンジンにどのようにマッピングされるかの詳細を理解する必要がありません。 Cassandra 2.0.1, 2.0.2, and a quick peek at 2.0.3に示されているように、org.apache.cassandra.io.sstable.CQLSSTableWriterクラスをインポートし、インポートするデータのスキーマ、スキーマのライター、およびプリペアドINSERT文を定義します。
sstableloaderの使用
データを読み込む前に、CQLまたはThriftを使用してテーブルのスキーマを定義する必要があります。
SSTableの読み込みにおいて最適なスループットを得るには、sstableloaderの複数のインスタンスを使用して複数のマシン間でストリーミングを行うことができます。sstableloaderが同時に実行できるSSTableの数には固定の上限はないため、改善が見られなくなるまでローダーを追加できます。
Cassandraノードと同じマシンでsstableloaderを使用する場合、Cassandraノードと同じネットワーク・インターフェイスを使用することはできません。ただし、そのノードからJMX
を使用することはできます。この方法では、SSTableのあるディレクトリーの絶対パスを使用して、sstableloaderと同じ方法でSSTableを読み込みます。ただし、ノードはストリーミング元とストリーミング先の両方になるため、そのノードに対する負荷が高くなります。つまり、稼働中のクラスターへの読み込みでは、Cassandraノードでないマシンからデータを読み込むべきです。使用法:
$ sstableloader [オプション] path_to_keyspace
$ cd install_location/bin $ sstableloader [オプション] path_to_keyspace
- SSTableの場所に移動します。パッケージ・インストール:
$ cd /var/lib/cassandra/data/Keyspace1/Standard1/
tarボール・インストール:$ cd install_location/data/data/Keyspace1/Standard1/
- キースペースの内容を表示するには、以下のように入力します。
$ ls Keyspace1-Standard1-jb-60-CRC.db Keyspace1-Standard1-jb-60-Data.db ... Keyspace1-Standard1-jb-60-TOC.txt
- ファイルを一括して読み込むには、ターゲット・クラスター内のKeyspace1/Standard1/のパスを指定します。
$ sstableloader -d 110.82.155.1 /var/lib/cassandra/data/Keyspace1/Standard1/ ## Package installation $ install_location/bin/sstableloader -d 110.82.155.1 /var/lib/cassandra/data/data/Keyspace1/Standard1/ ## Tarball installation
これで、すべてのファイルが一括して読み込まれます。
短いオプション | 長いオプション | 説明 |
---|---|---|
-alg | --ssl-alg <ALGORITHM> | クライアントSSLアルゴリズム(デフォルト:SunX509)。 |
-ciphers | --ssl-ciphers <CIPHER-SUITES> | クライアントSSL。暗号化スイートのコンマ区切りリスト。 |
-cph | --connections-per-host <connectionsPerHost> | ホストごとの同時接続の数。 |
-d | --nodes <initial_hosts> | 必須。初期のクラスター情報を得るために、(コンマで区切られた)ホストのリストに接続します。 |
-f | --conf-path <path_to_config_file> | ストリーミング・スループットおよびクライアント/サーバーSSLのcassandra.yamlパスのパス。 |
-h | --help | ヘルプを表示します。 |
-i | --ignore <NODES> | コンマで区切られたこのノードのリストにはストリーミングしません。 |
-ks | --keystore <KEYSTORE> | クライアントSSL。キーストアのフルパス。 |
-kspw | --keystore-password <KEYSTORE-PASSWORD> | クライアントSSL。キーストア用のパスワード。 |
--no-progress | 進行状況を表示しません。 | |
-p | --port <rpc port> | RPCポート(デフォルト:9160 [Thrift])。 |
-prtcl | --ssl-protocol <PROTOCOL> | クライアントSSL。使用する接続プロトコル(デフォルト:TLS)。 |
-pw | --password <password> | Cassandra認証用のパスワード。 |
-st | --store-type <STORE-TYPE> | クライアントSSL。ストアのタイプ。 |
-t | --throttle <throttle> | メガビット単位のスロットル速度(デフォルト:無制限)。 |
-tf | --transport-factory <transport factory> | Cassandraへの接続を作成する完全修飾ITransportFactoryクラス名。 |
-ts | --truststore <TRUSTSTORE> | クライアントSSL。トラストストアのフルパス。 |
-tspw | --truststore-password <TRUSTSTORE-PASSWORD> | クライアントSSL。トラストストアのパスワード。 |
-u | --username <username> | Cassandra認証のユーザー名。 |
-v | --verbose | 詳細出力。 |
cassandra.yamlのオプション | コマンドラインの例 |
---|---|
stream_throughput_outbound_megabits_per_sec | --throttle 300 |
server_encryption_options | --ssl-protocol none |
client_encryption_options | --keystore-password MyPassword |
パッケージ・インストール | /etc/cassandra/cassandra.yaml |
tarボール・インストール | install_location/resources/cassandra/conf/cassandra.yaml |
Windowsインストール | C:\Program Files\DataStax Community\apache-cassandra\conf\cassandra.yaml |