sstableloader

クラスターへの外部データの一括読み込み、異なるノード数または異なるレプリケーション・ストラテジを持つ別のクラスターへの既存のSSTableの読み込み、およびスナップショットの復元を行います。

sstableloaderは以下の機能を提供します。
  • 外部データをクラスターに一括で読み込む。
  • ノードの数またはレプリケーション・ストラテジの異なるクラスターに既存のSSTableを読み込む。
  • スナップショットを復元する。

sstableloaderは一連のSSTableデータ・ファイルを稼働中のクラスターにストリーミングします。一連のSSTableを各ノードに単にコピーするのではなく、クラスターのレプリケーション・ストラテジに合わせて、関連するデータ部分を各ノードに転送します。データの読み込み先のテーブルは空でなくてもかまいません。

SSTableへのパスを指定してsstableloaderを実行し、SSTableへのパスにターゲット・クラスターの場所を渡します。sstableloaderを使用する場合は、以下に留意してください。
  • 必要に応じて、SSTableバージョンをDSEの最新バージョンに対応するバージョンにアップグレードします。
    表 1. SSTableの互換性とアップグレード・バージョン
    DSEバージョン SSTableバージョン sstableloader サポートされているバージョン sstableupgrade およびnodetool upgradesstablesでサポートされているバージョン
    4.0 jb jbのみ(アップグレードして読み込む必要があります) i*のみ
    4.5
    4.6
    4.7 ka kaおよびjb j*のみ
    4.8
    5.0.x ma kaおよびma k*のみ
    5.0.x mb ka、ma、およびmb kaおよびma
    5.0.x mc ka、ma、mb、およびmc ka、ma、およびmb
    5.1.x
  • 異なるクラスターに読み込まれたテーブルをリペアしても、ソース・テーブルはリペアされません。

始める前に

  • sstableloaderにより読み込まれるソース・データは、SSTable内になければなりません。
  • sstableloaderはストリーミング・プロトコルを使用するため、ポート7000(ストレージ・ポート)を介して各接続ノードに直接接続する必要があります。

SSTableの生成

sstableloaderを使用して外部データを読み込む場合は、まず外部データをSSTableに置く必要があります。

SSTableWriterは、クラスターに一括読み込みする生のデータ・ファイルをローカルで作成するAPIです。ソース・コードには、SSTableファイルを外部データから作成するためのCQLSSTableWriter実装が含まれています。この実装では、これらのファイルが基盤のストレージ・エンジンにどのようにマッピングされるかの詳細を理解する必要がありません。org.apache.cassandra.io.sstable.CQLSSTableWriterクラスをインポートし、インポートするデータのスキーマ、スキーマのライター、およびINSERTプリペアド・ステートメントを定義します。

DataStax Enterpriseスナップショットの復元

sstableloaderインポート用のスナップショットのプリペアに関する詳細については、「一元化されたバックアップからの復元」を参照してください。

既存のクラスターからのSSTableのインポート

既存のSSTableをインポートする前に、各ソース・ノードでnodetool flushを実行して、memtable内のデータがディスク上のSSTableに書き込まれるようにします。

ターゲット環境のプリペア

データを読み込む前に、CQLを使用してターゲット・テーブルのスキーマを定義する必要があります。

使用法

$ sstableloader -d host_url (,host_url ...)[options] path_to_keyspace
tarボールおよびInstaller-No Servicesのパス:
installation_location/resources/cassandra/bin
表 2. Sstableloaderオプション
短いオプション 長いオプション 説明
-alg --ssl-alg <ALGORITHM> クライアントSSLアルゴリズム(デフォルト:SunX509)。
-ap --auth-provider <auth provider class name> サード・パーティ認証プロバイダーの使用を許可します。この認証プロバイダーがプレーン・テキスト認証情報をサポートしている場合は、-u <username>および-pw <password>と組み合わせることができます。
-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> コンマで区切られたこのノードのリストにはストリーミングしません。
-idct --inter_dc_throttle_mbits <MBPS> データ・センター間のスロットル速度、メガビット/秒(デフォルトは無制限)。
-ks --keystore <KEYSTORE> クライアントSSL。キーストアのフルパス。
-kspw --keystore-password <KEYSTORE-PASSWORD>

クライアントSSL。キーストア用のパスワード。

cassandra.yaml内のclient_encryption_optionsオプションをオーバーライドします

--no-progress 進行状況を表示しません。
-p --port <rpc port> RPCポート(デフォルト:9160 [Thrift])。
-prtcl --ssl-protocol <PROTOCOL>

クライアントSSL。使用する接続プロトコル(デフォルト:TLS)。

cassandra.yaml内のserver_encryption_optionsオプションをオーバーライドします

-pw --password <password> 認証パスワード。
-sp --storage_port <port_num> ノード間通信に使用されるポート(デフォルト:7000)。
-ssp --ssl_storage_port TLSノード間通信に使用されるポート(デフォルト:7001)。
-st --store-type <STORE-TYPE> クライアントSSL。ストアのタイプ。
-t --throttle <throttle>

スロットル速度、メガビット/秒(デフォルト:無制限)。

cassandra.yaml内のstream_throughput_outbound_megabits_per_secオプションをオーバーライドします

-t --throttle_mbits <MBPS> スロットル速度、メガビット/秒(デフォルトは無制限)
-ts --truststore <TRUSTSTORE> クライアントSSL。トラストストアのフルパス。
-tspw --truststore-password <TRUSTSTORE-PASSWORD> クライアントSSL。トラストストアのパスワード。
-u --username <username> 認証のユーザー名。
-v --verbose 詳細出力。

sstableloaderは、指定したディレクトリーで見つかったSSTableを、指定したターゲット・クラスターに一括読み込みします。このディレクトリーでは、示されているターゲット・クラスターに対して、パスの親ディレクトリーがターゲット・キースペースとテーブル名に使用されています。

ストリーミングされるSSTableの場所が、キースペースとテーブルの名前の付いたディレクトリーで終わることを確認します。
ls /var/lib/cassandra/data/Keyspace1/Standard1/
Keyspace1-Standard1-jb-60-CRC.db
Keyspace1-Standard1-jb-60-Data.db
...
Keyspace1-Standard1-jb-60-TOC.txt

sstableloaderオプションの詳細については、「sstableloaderオプション」を参照してください。

sstableloaderの使用

  1. 他のソースからスナップショット・データを復元する場合:スナップショット・ファイルが、ターゲットのkeyspace/tablenameの名前と一致するkeyspace/tablenameディレクトリー・パスにあることを確認します。この例では、スナップショット・ファイルは/Keyspace/Standard1/にあります。
  2. SSTableの場所に移動します。
    $ cd /var/lib/cassandra/data/Keyspace1/Standard1/
  3. キースペースの内容を表示するには、以下のように入力します。
    $ ls
    Keyspace1-Standard1-jb-60-CRC.db
    Keyspace1-Standard1-jb-60-Data.db
    ...
    Keyspace1-Standard1-jb-60-TOC.txt
  4. ファイルを一括読み込みするには、-dフラグを使用してターゲット・クラスター内の1つ以上のノードを指定し(-dフラグは、IPアドレスまたはホスト名のコンマ区切りリストを取ります)ソース・マシン../Keyspace1/Standard1/へのパスを指定します。
    sstableloader -d 110.82.155.1 /var/lib/cassandra/data/Keyspace1/Standard1/ ## package installation
    installation_location/bin/sstableloader -d 110.82.155.1 /var/lib/cassandra/data/Keyspace1/Standard1/ ## tarball installation

    このコマンドにより、すべてのファイルが一括して読み込まれます。

注: SSTableの読み込みにおいて最適なスループットを得るには、sstableloaderの複数のインスタンスを使用して複数のマシン間でストリーミングを行うことができます。sstableloaderが同時に実行できるSSTableの数には固定の上限はないため、改善が見られなくなるまでローダーを追加できます。
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。

パッケージ・インストールInstaller-Servicesインストール

/etc/dse/cassandra/cassandra.yaml

tarボール・インストールInstaller-No Servicesインストール

installation_location/resources/cassandra/conf/cassandra.yaml