(2014年総集編3)アドホッククエリーの登場,大規模データセットに対しても高速なレスポンスを実現
はじめに
トレジャーデータはクラウドでデータマネージメントサービスを提供しています。
「Treasure Query Accelerator: アドホッククエリー」の登場は「クエリーを実行したその場で結果が返ってくる」という,一見当たり前のような,しかしバッチクエリーでは困難だったことを可能にしました。これによってTreasure Data Service(トレジャーデータサービス)の活用シーンが大きく広がりました。以下のテーブルはバッチ型とアドホック型の比較をしています。ここで重要なことは,双方お互いにメリット・デメリットがあるということで,必ずしもすべてのシーンでアドホック型への置き換えができないということです。
バッチ型クエリー (Hive) | アドホック型クエリー (Presto) | |
---|---|---|
言語 | ・HiveQL (SQL Like) | ・SQL-92準拠 |
ケース | ・大規模な中間処理データの受け渡しが生じる並列処理に対して | ・大規模なインプットでも,中間処理・結果データが小さくて済む並列処理に対して |
計算モデル | ・Map Reduce | ・MPP (Massively Parallel Processor) |
業務領域 | ・KPIダッシュボード ・定型レポーティング |
・インタラクティブなデータ処理 ・特定のユーザーの履歴抽出などのサポーティング業務 |
相性のよい 可視化ツール |
・Metric Insights ・Tableau Server |
・Chartio ・Tableau Desktop |
トレジャー 料金プラン |
・Basic Plan | ・Premium Plan |
以下で詳細を述べていきます。
1. 言語
Treasure Data Serviceは,バッチ型とアドホック型の双方にSQLライクなクエリーを記述できるという統一性を有しています。つまり同じデータセットの同じ処理に対して,バッチかアドホックかを柔軟に切り替えることができるのです。
トレジャー管理コンソールからクエリーを実行する場合の使い分け方は,バッチ型(Hive)/ アドホック型(Presto)をボタンで切り替えるだけです。
2. ケース
バッチ処理は,データ同士の結合をする場合(中間生成データが巨大になる),巨大なデータセットに対する重い集計の際に頼もしい存在です。また,分散処理の途中でのエラーに対してもリトライを行ってくれますし,計算ノード間の中間データの受け渡しも安全に行ってくれます。そういう安定性は,デイリーで自動実行する定時ジョブへの安心感につながります。
バッチ処理のイメージ:たくさんのショベルカーのある巨大な砂場を想像してください。重めのクエリーが実行されると,複数のショベルカーのエンジンに火が入り,自分の持ち場の砂をどっさりとつかんでは次の砂場に運んでいきます。重厚なマシンなのでエンジンがかかる(イニシャルランニングタイム)までに時間がかかりますが,動き出してしまえばどんな砂場であっても安定して働いてくれます。
一方で,アドホッククエリーは,中間データと結果がサーバーのメモリに乗り切る程度の軽い処理に対して数秒のレスポンスを実現します。巨大なデータセットに対するアドホッククエリーの登場は,すぐに結果を見たいアドホックな分析処理や,そもそも結果が正しいかどうかを知るための試行錯誤など,現場から求められるアドホックな業務をこなすのに適しています。
また,TableauなどのBI(ビジネスインテリジェンス)ツールとトレジャーデータストレージをアドホッククエリーで接続することによって,BIツール上からドリルダウンやクロステーブル作成などのインタラクティブな操作が可能になります。これは非常にインパクトのあることで,SQLの知識がない分析者やディレクターでも,BIツールからマウスのクリック・ドラッグ操作だけでTreasure Data Serviceが扱えるようになります。
アドホッククエリーのイメージ:広大なサーキットを縦横無尽に走り回るミニ四駆を想像してください。重いものは載せられませんが,スイッチを入れればすぐに走り出す起動速度とデータサーキットを超高速に駆け抜ける爽快さは,分析者にとって最高の相棒となるでしょう。
3. 計算モデル
バッチクエリーがHiveに準じたMap Reduceを行うのに対し,アドホッククエリーはMPPモデルを採用しています。
これらの計算モデルを理解する必要はありませんが,アドホッククエリーはサーバー間の中間データの受け渡しをメモリ上で行うので,メモリに乗り切らない場合はエラーとなってしまうことに留意してください。
4. 相性のよい可視化ツール
バッチ型/アドホック型それぞれに最適な可視化ツールを紹介します。
A) バッチ型:Metric Insights, Tableau Server
Metric Insights:
トレジャーデータがOEM提供するMetric Insightsは,当社のオンラインゲームソリューションに採用されているバッチ処理と相性のよいツールです。
↑ Metric Insightsではおのおののウィジェットが独立しており,ウィジェット編集画面から,クエリー,実行インターバル,チャートタイプの3種を指定することで自動的にクエリーを実行し,ウィジェットに反映してくれます。
Tableau Server:
Treasure Data Serviceは集計結果のエクスポート先を多種用意していますが,その1つにTableau Server があります。Tableau ServerはTableau Desktopで作成したレポートをTableau Serverにパブリッシュすることで,タブレットなどのさまざまな端末からそのレポートを参照できるようになります。
定型レポートを一度Tableau Desktopで作成してしまえば,以後はTreasure Data Serviceが定時集計してTableau Serverに自動追記してくれます。いつでも新鮮なレポートが参照できることになります。
B) アドホック型:Tableau Desktop
Tableau Desktop:
Tableau Desktop はWindows および Mac のクライアントソフトウェアとして動作する可視化のバリエーションに富んだBIツールです。Treasure Data ServiceはこのようなBIツールに対する接続口(ODBC, JDBCドライバ)を用意することで,BIツールの画面上からTreasure Data Service上のデータ操作が可能になるというSQLレスな環境を実現できます。
5. プランについて
バッチクエリーはTreasure Data Serviceのスタンダードプランに含まれますが,アドホッククエリーはプレミアムプランのみに含まれる付加機能となります。料金に関するお問い合わせは support@treasure-data.com までお願いします。
Happy Holidays!!
いつもお世話になっております。
トレジャーデータです。いつもブログをご覧いただきありがとうございます。
早いもので、年末のご挨拶をさせて頂く時期となりました。
本年は格別のご愛顧を賜り、厚くお礼申し上げます。
明くる年も変わらぬお引き立てのほど、
トレジャーデータ株式会社
従業員一同
◆TREASURE DATA NEWS◆
スマホアプリ企画・開発者必見!「Treasure Collectors」
(2014年総集編4)トレジャーデータのデータ収集ツールがより多彩に:IoTやモバイル端末にも対応
はじめに
トレジャーデータはクラウドでデータマネージメントサービスを提供しています。
Treasure Data Service(トレジャーデータサービス)は,クラウド上の無尽蔵なカラムナストレージとバッチ型/アドホック型の分散集計クエリーを,運用管理コストを気にすることなく活用できる「データ保管」が根幹となっていますが,その前後:「データ収集」と「データ分析」においてもあらゆるケースに対応できる柔軟な方法を兼ね備えています。
今回は,上図でいう「データ収集」レイヤーにおける収集方法についてご紹介します。
4種類のデータ収集方法
Treasure Data Serviceの管理コンソールにログインすると,Treasure Data Collectorsの「Collect Data」タブよりアクセスすることができます。
- File Upload:ブラウザ上からcsv/tsvファイルをアップロードする最も簡単な方法
- Client SDK:JavaScript および iOS,Android からSDKを利用してイベント発生時の高頻度でログを送信する方法
- Streaming Collector:Web Server のapache log など,サーバー自身にエージェントを仕込んでストリーミング的にログを収集する方法
- Bulk Import:過去数年分の大規模ファイルなどのまとまったログを,効率的にインポートする方法
↑ 2,3,4の使い分けは,上図のようなケース図となります。
Bulk Import はその頻度が多くてもデイリー,多くの場合は過去データを取り込むための一度きりの実行となります。そしてそれ以降に発生するログに関しては,2. Client SDKや3. Streaming Import を通じて都度収集するようにするのが一般的です。
1. File Upload
ブラウザを通じてのファイルアップロードは最も手軽な方法です。
トレジャー管理コンソールより「File Upload」を選択し,csvやtsvファイルを指定します。
指定したファイルをドラッグするだけの簡単な操作です。
2. Client SDK
Client SDKと次のStreaming Collectorはともにイベント発生時に随時データをTreasure Data Serviceに送信できるものですが,それをモバイル端末アプリのようにクライアント側から送信するのか,サーバー側から送信するのかで種類が変わってきます。ここでの話は,JavaScript SDK や各種モバイルSDK(iOS,Android,Unity)といったクライアント側のためのSDKとなります。
Client SDKでは,アプリやWebページにそれを埋め込むことで個々の端末からトレジャークラウドストレージへのデータ送信が可能になります。
3. Streaming Collector
トレジャーデータの製品としては「Treasure Agent」,OSS界隈では「Fluentd」と呼ばれているものがこちらのカテゴリに該当します(前者はデータの書き出し先としてトレジャーデータストレージに設定されているもので,後者は任意の書き出し先の設定ができます)。クライアントSDKに対して,こちらはサーバー側にエージェント入れて監視することで,サーバーに集まっているログをストリーミングでトレジャークラウドストレージに送信する形となります。
データソースとアウトプットを「プラグイン」で拡張する
Streaming Collectorは,さまざまなデータソースを「プラグイン」という設定ファイルのみで切り替えられる手軽さに加え,さまざまなプラグインがすでに数多く公開されています。
トレジャーデータのストリーミングコレクタのメリットは,ログを随時ストリーミングで収集できることにとどまりません。データの収集にはそのデータソース(ApacheLog,MySQL,NoSQL,etc.,...)に合わせたものを用意する必要がありますが,Treasure Data Serviceでは多種多様なデータソースに対する接続口(プラグイン)がすでに存在し,またプラグインという形で簡単に対応させることが可能です。
下図はプラグインリストに記載されているデータソースの一部です。
4. Bulk Import
巨大なデータ向けに作られたBulk Import は4つのステップから構成されます:
- Prepare:巨大なファイルを適切なサイズに切り分け,かつMessage Pack 形式に圧縮します。オリジナルのファイルを残したまま,分割ファイルを生成していくのでマシンのディスクに余裕があるかどうかを確認しておいてください。また,オプションとして並列処理数「--prepare-parallel」や文字列置換「--regex-pattern」は設定を大きくすればそれなりにマシンリソースを消費するので,ほかの作業への影響を考慮してください。
- Upload:Prepare より分割されたファイルをTreasure Data Serviceに並列アップロードします。アップロード処理はセキュアな形式で通信できるのでご安心ください。また,この処理はクライアント側のネット接続環境に依存するので接続速度が遅ければ完了までに非常に多くの時間がかかることに注意してください。
- Perform:Treasure Data Serviceにアップロードされた Messaga Pack 形式のファイル群を Map Reduce 処理によってクラウドストレージに格納する形式に変換します。この際にエラーレコードの有無などを確認します。Perform以降の処理はTreasure Data Service上での実行となるのでクライアントのマシンや通信環境には依存しません。この処理ではMapReduceが走るので,すぐに処理が完了することを期待してはいけません。
- Commit:Perform 後のエラーチェックで問題なければこのコマンドによってトレジャーストレージの指定のテーブルへ書き出します。このコマンドでクラウドストレージへの書き込みが完了するのですが,その前に問題のあるエラーレコードがないかどうかを確認してから実行するようにしてください。この処理にはそれほど時間はかかりません。