以前の記事で紹介したESClientはもう長い間更新が止まっていて微妙とのこともあり,今回はelasticsearchのプラグインであるknapsackを使ったデータ移行法を紹介します.

elasticsearch-knapsackのインストール

knapsackのgithubページにも書いてありますが,当然import側,export側両方でpluginのインストールが必要です.

./bin/plugin -install knapsack -url http://bit.ly/1bBRaBO

インストール時には,README.mdに書かれているelasticsearchとのバージョン対応を確認することと,インストール後のelasticsearchの再起動を忘れないようにしてください.

使い方

データをエクスポート場合は,

# _index:testをexport
$ curl -XPOST 'localhost:9200/test/_export'
{"running":true,"mode":"export","archive":"tar","path":"file:test.tar.gz"}

# _index:test内の_type:testをexport
$ curl -XPOST 'localhost:9200/test/test/_export'
{"running":true,"mode":"export","archive":"tar","path":"file:test_test.tar.gz"}

のようにPOSTを投げると,稼働しているelasticsearchのディレクトリにファイルが作成されます.

インポート時はデータを取り込みたいelasticsearchのディレクトリに作成したファイルを置き,

# _index:testをimport
$ curl -XPOST 'localhost:9200/test/_import'
{"running":true,"mode":"import","type":"tar","path":"file:test.tar.gz"}

# _index:test内の_type:testをexport
$ curl -XPOST 'localhost:9200/test/test/_import'
{"running":true,"mode":"import","type":"tar","path":"file:test_test.tar.gz"}

とPOSTを投げればOK.




自分の環境(MacOSX10.8.4 elasticsearch1.1.1)では始め上手く動作してくれず,プラグインインストール後に elasticsearch -f だけでなく

 
curl -XPOST 'localhost:9200/_shutdown'

で明示的にelasticsearchを終了させて起動し直すと動くようになりました(動かなかった原因がそれかどうかは不明).また,ローカル環境では上記の方法で上手く動きましたが,サーバ側で

curl -XPOST 'domein:9200/test/_export'

とPOSTを投げても,curl: (52) Empty reply from server が返ってきてしまい涙目.なぜ...

Share Button

Elasticsearchのデータをknapsackでimport/export

<2014/05/03>