cloudpackエバンジェリストの吉田真吾(@yoshidashingo)です。
Treasure Data をいじってます。
トレジャーデータ | データ収集、保存、分析のためのエンドツーエンドでサポートされたクラウドサービスです。
大量にデータをアップロードしたい
ログのデータをtd-agentを使ってTDにためて行く方法については情報が多いですが、検証や過去データの移行などで一度に大量のデータをTDに入れてしまいたいというニーズも一定数あると思います。
TDに大量にデータをアップロードするときは、データをmsgpack形式に圧縮してからアップロードできる td import 機能を使いましょう。
SIOS ビッグデータ技術ブログ: TreasureDataのtd import:prepare機能の比較検証
トレジャーデータのWebサイトにあるマニュアルでも、Bulk Import の章で説明がされています。
処理の流れ
Treasure Dataのサインアップ、tdコマンドはインストールは済んでいる前提で。
ヘルプを見る
td help でヘルプが見られます。まずは td help:all でどんなコマンドがあるか確認するのがよいでしょう。
$ td help:all
jarの更新
まずはインポート用のjarファイルを最新化しておきます。
$ td import:jar_update
Installed td-import.jar is latest version
$ td import:java_version
td-import-java 0.4.11 via import:jar_update
セッションの作成からコミットまでの流れ
次に以下がインポート元およびファイル形式(MySQL,CSV,JSON)に関わらず共通した処理の流れです。
1.セッションを作成する(td import:create)
以下でデータベースの特定のテーブルに対するセッションを作成し、インポートジョブのステータス管理を行います。
$ td import:create
2.データを分割して msgpack 形式へ圧縮する(td import:prepare)
アップロードするファイルを小分けにして圧縮することで、通信エラーが起きたときにリトライするサイズを小さくできます。今回はデフォルト値のまま実行しましたが、指定可能なパラメータ全体は td help import:prepare で確認できます。
$ td import:prepare --format --columns ,,... --column-types ,,... --time-column --time-format -o .
3.アップロードする(td import:upload)
小分けにできたファイルを作成したセッション名を指定してアップロードします。
$ td import:upload
4.インポートする(td import:perform)
アップロードされたファイルの整合性確認やデータの変換(TD内の処理)を実行します。
$ td import:perform
5.コミットする(td import:commit)
最後にセッションをコミットしてテーブルに全てのデータを反映します。
$ td import:commit
【随時】セッションの状態を確認する
$ td import:list
1回のコマンド実行でOK
上記の一連の処理を、一回のコマンド実行で処理することもできます。MySQLから直接投入する方法と、手元のCSVファイルから投入する2種類の方式を試したので記載しておきます。
MySQLからデータをインポートする
$ td import:upload --format MySQL --db-url jdbc:MySQL://<endpoint URL>/<データベース名> --db-user --db-password
ただ、今回は手元やm3.2xlargeから投入してもOutOfMemoryになったので私のほうで完全には試せてないです。
CSVからデータをインポートする
$ td import:upload --auto-create . --format csv --columns ,,... --column-types ,,... --time-column --time-format --auto-perform --auto-commit -o .
100バイト内におさまるくらいのレコードを1億件持つ、複数のCSVで試してみて、30分〜2時間ちょっとくらいでインポートできちゃいました。
あと、トレジャーデータのサポートチャットは日本語で素早く答えてくれて超ありがたいです。
こちらの記事はなかの人(yoshidashingo)監修のもと掲載しています。
元記事は、こちら