オープン×データ×ジャーナリズ データ×ジャーナリズム · 2014-02-14 · 1 オープン×データ×ジャーナリズ. データ×ジャーナリズム. 朝日新聞デジタル編集部
Riak Search 2.0を使ったデータ集計
-
Upload
masashi-tsubosaka -
Category
Technology
-
view
1.011 -
download
1
Transcript of Riak Search 2.0を使ったデータ集計
Riak Search 2.0を使った データ集計
Bashoジャパン(株) 坪坂正志
Riakとは
• 分散Key-‐Value Store • データを複数のサーバに分散して格納することにより高い可用性と拡張性を実現
Key-‐Value Storeの問題点
• DBに入っているすべてのデータについて処理をすることが難しい
• RiakにはMapReduce機能はついてはいるがErlangかJSでプログラムを書く必要があるなど難易度が高い
Riak Search 2.0
• 元々Riak 1.xバージョンでは検索機能は存在した
• しかしマルチバイト対応していない、機能が少ないなどの問題があった
• 2.0からバックエンドにSolrを使うことによりマルチバイト対応やStats Componentなどの処理が可能に
Solrの機能を使うと • SolrのStatsComponentを利用することによって、特定フィールドの個数や合計、平均などが計算可能となっている – hFp://wiki.apache.org/solr/StatsComponent
• SQLでいうところのselect sum(field) ~的な処理が可能に – Facetsの機能を使うことによりgroup by的な処理も可能となる
• SolrをAnalyQcs PlaSormに利用している事例としては以下の記事が参考となる – hFp://www.lucenerevoluQon.org/sites/default/files/Building%20a%20Real-‐Qme,%20Big%20Data%20AnalyQcs%20PlaSorm%20with%20Solr.pdf
Riak Searchを使った集計 • 各Riakサーバーで動いてるSolrプロセスが個別に集計処理を行い、結果を一つにまとめる – 複数サーバでの検索はSolrのDistributed Searchの機能を利用
– サーバ内での集計処理は独立に行われるのでサーバを増やすことによってスケールアウトが可能
Solr Cloudとの違い
• SolrのバイナリがRiakに同梱されているのでZookeeprなどの他のコンポネントを立ち上げる必要が無い
• 事前にshard数を決める必要が無い – 必要に応じていくらでもサーバの追加が可能となっている
適応イメージ
• Riakに格納した広告ログから広告主ごとのクリック数、インプレッション数などを集計する
• Riakに格納したセンサデータから特定時間のセンサの出力の平均値を出したりすることができる
テストに利用したデータ
• データマイニングのコンテストで用いられた検索連動型広告のログデータ – hFps://www.kddcup2012.org/c/kddcup2012-‐track2
– 各行にはclick数,imps数,広告ID,表示位置,広告主ID,UserIDなどが含まれる
– 実験では一部のフィールドを利用 • {"click_i":0,"imps_i” 1,"adid_s":"20665700", "advid_s":"34004”,"pos_i":1,"kwid_s":"20775"}
テストに利用したデータ
• 実際のデータは1億4000万件あるが、クライアントからのデータのアップロードに時間がかかるので先頭2000万件を利用 – EC2の料金を節約したかった。。 – アップロードの際にはRiak Cluster 3台で構築
• 3台で構築した場合物理サーバにデータが3重化されないことがあるのでProducQonでは5台以上を推奨
Riak Searchを使ってできるクエリ
• 特定の広告主IDに対するClickの合計を計算する – q=advid_s:hoge&rows=0&stats=true&stats.field=click_i
• さらにポジションごとのクリック数の合計を計算する – + &stats.facet=pos_i
Example Query • adid_s=20030165のものについて、click_iフィールドの統計値を出力
クエリのパフォーマンスについて
• 特定の広告主を指定してclick/impsの合計を投げた場合 – 数msec程度で結果が帰ってくる
• 全体のclick/impsの合計を求めた場合 – 数百msec程度のorder
• 全体的に書き込みを行ってる途中のときと書き込みを行ってないときでパフォーマンスが大きく変わった
サーバを増やしたときの挙動
• Riakクラスタを3台=>6台に変更 • 増やしているときは多少のレスポンスの低下が見られた • サーバを追加するときも追加の設定やシステムの停止が一切なく、簡単なコマンドで追加可能
• 変更終了後各サーバの保持している文章量は半分に – データが増えていったときもサーバ追加することによりシステムの停止なく対応可能
• 応答速度は今使っているデータにおいてはそこまで変わらなかった – より大規模なデータで試験する必要がある – 実際のところ2000万件程度であればMySQL1台でも扱える
実験しててはまったところ
• 割当メモリが少ないとSolrが落ちる – 設定のsearch.solr.jvm_opQonsのXms,Xmxの部分を増やす
• 最初シングルプロセスでinsertのクライアントを書いたところ書き込みのパフォーマンスがでない – 並列で書き込みをするように処理を変更するようにして改善
今後の課題
• より大規模なデータにおけるテスト – 特に実験環境貸してくれる方とか募集中
• 今後Solr5.0でAnalyQcs周りが強化されるので、Riak SearchでのAnalyQcsも強化される – hFps://issues.apache.org/jira/browse/SOLR-‐5302