噂の超高速分析データベースを試してみよう~ログ解析,機械学習なんでもござれ~

第3回 あのシステムもビッグデータ分析や機械学習に活用中! 超高速データベース「Vertica」とは?[後編①]

この記事を読むのに必要な時間:およそ 3 分

前回のおさらい

前編では,ビッグデータを高速集計/分析するためのデータベースVerticaについて,基本的なアーキテクチャ(列指向型,データ圧縮,MPP)や強み(多重アクセスの負荷分散,プロジェクションによる自動チューニング)を紹介しました。ユーザーのニーズに合わせて大量のデータを分析する基盤としてVerticaがとても魅力的なデータベースであることをご理解いただけたのではないかと思います。

後編となる今回は,単なるデータベースとは一線を画すビッグデータ分析プラットフォーム「Vertica」の,ログ分析をはじめとする豊富な機能について紹介します。

Hadoopとの連携

ビッグデータ基盤というと,Apache Hadoop(以降,Hadoop)を思い浮かべる方が多いのではないでしょうか。実際にHadoopを大量データのバッチ処理やデータレイク(大量データの置場)として活用されている方も多いと思います。しかし,Hadoopはオンライン系の高速分析処理に課題があるため,HadoopのフロントにVerticaを配置し,高速分析処理はVerticaに任せるというケースが増えています。実際に,分析処理頻度の低い過去データをHadoopに,処理頻度の高い最新データをVerticaに持たせて分析工数の大幅削減に成功したユーザーがいます。

それでは,HadoopとVerticaはどのように連携させるのでしょうか?HadoopとVerticaの連携方法はおもに3つあります。

  • ① HDFS上のデータをVerticaにロードする
  • ② HDFS上のデータを外部表としてアクセスする
  • ③ Hadoopのテーブル定義を利用し,Hiveを通じてHDFS上のデータにアクセスする

これらの3つを図解したものが図1です。

図1 HadoopとVerticaの連携

図1 HadoopとVerticaの連携

最もシンプルで高速なパフォーマンスを得られるのは①の方法です。図2のように,データロード用のコマンド(COPYコマンド)でHDFS上のデータをVertica内に簡単に取り込むことができます。Hadoopで事前バッチ処理したデータをVerticaに取り込んで使うような場合に非常に便利です。

図2 Hadoop上のデータをVerticaにインポート

COPY testTable SOURCE Hdfs(url='http://hadoop:50070/webhdfs/v1/test.txt',username='hadoopUser');

一方,②と③の方法では,Verticaに実際のデータをロードするのではなく,Verticaを介してHDFS上のデータを参照します。Verticaにデータを取り込む①の方法と比べると処理性能は劣りますが,Verticaにアクセスするのと同様にSQLで簡単にHDFS上のデータにアクセスできるメリットがあります。また,Verticaはデータベースに取り込むデータ量に応じてライセンス費用が決まりますが,②と③の方法はライセンスの課金対象にならないというコスト的なメリットもあります。

Sparkとの連携

昨今,高速分析にApache Spark(以降,Spark)を利用するケースも増えています。Sparkはインメモリ型のため処理が高速である反面,大量データの分析という点ではメモリサイズの上限が足かせになるという課題があります。VerticaではSparkに対応させるためのコネクタが提供されており,このコネクタを使うことで次のことができるようになります。

  • SparkのData FrameのボリュームをVerticaのテーブルに書き込む
  • VerticaのデータをSparkのResilient Distributed Datasets(RDDs)またはData Frameに取り込み,Spark上で処理する

これによって,Sparkのインメモリ処理の恩恵を受けながらもVerticaが得意とする大量データ処理との両立を図ることができます。

29個のクエリ処理が完了するまでの時間を比較したTPC-DSベンチマークテストでは,Sparkだけで行った場合は11時間だったのに対し,Verticaと連携した場合は25分に短縮したという結果があります。

半構造化データ活用(Flex Table)

HadoopやSparkに格納されるログデータや,IoTデバイスなどからのセンサーデータは,半構造化データを採用していることが多いと言われます。多くのデータベースでは,これらのデータを事前に構造化データに変換する必要がありますが,Verticaでは半構造化データを扱うためのFlex Tableという機能が提供されており,半構造化データのままVerticaに取り込めます図3)⁠使い方はとても簡単で,Flex Tableを作成し,COPYコマンドでJSONやAVRO,CEFといった半構造化データをロードするだけです。

図3 半構造化データをFlex Tableに取り込むイメージ

図3 半構造化データをFlex Tableに取り込むイメージ

たとえばJSONの場合,key-value型でデータが格納されているため,Verticaはキーを列名,バリューをテーブルデータとして自動的に認識し,データをロードします(事前にテーブルの列名などの定義は不要です)⁠また,データ型は文字列型だけでなく,BOOLEAN,INTEGER,FLOAT,TIMESTAMP,DATEなどにも対応しています。データをロードしたあとは,通常のSQLでデータ操作を行うことが可能です。

それでは,JSONファイルをFlex Tableに取り込む例を見てみましょう。山岳データを含むJSONファイルリスト1をVertica内に作成したFlex Table図4にロードします図5)⁠⁠name」「type」などのキーを列名とし,⁠Everest」「Mt St Helens」といったバリューをテーブルデータとして自動的に格納していることがわかります図6)⁠

リスト1 JSONファイル

{ "name":"Everest", "type":"mountain", "height":29029, "hike_safety":34.1 }
{ "name":"Mt St Helens", "type":"volcano", "hike_safety":15.4 }

図4 Flex Tableの作成

CREATE FLEX TABLE mountains();

図5 Flex Tableへのデータロード

COPY mountains FROM '/tmp/sample.json' PARSER fjsonparser();

図6 Flex Tableの参照

SELECT name, type, height, hike_safety FROM mountains;
     name     |   type   | height | hike_safety
--------------+----------+--------+-------------
 Everest      | mountain | 29029  | 34.1
 Mt St Helens | volcano  |        | 15.4

なお,Vertica 7.2以降のバージョンでは,Flex Tableのデータは通常テーブルの10分の1のデータ量として課金されるようになったため,ライセンス的にも利用しやすくなりました。

リアルタイムデータ連携(Apache Kafkaとの連携)

最近では,IoTデータやTwitterでつぶやかれたツイート情報などノンストップで自動生成される大量データのリアルタイムな取り込みと,それを分析するニーズが高まっています。図7は,TwitterのデータやWebサービスのアクティビティなどの大量データを高速に扱える分散メッセージングサービスApache Kafka(以降,Kafka)とVerticaを連携し,Kafkaを介してTwitterのつぶやきデータをニアリアルタイムにVerticaにロードする例です。

図7 KafkaとVerticaの連携イメージ

図7 KafkaとVerticaの連携イメージ

たとえば,AVROフォーマットのKafkaメッセージをVerticaに自動的にインポートする処理は,Verticaサーバ上で図8のようなコマンドを実行することで簡単に実装できます。この例では,VerticaサーバにKafkaメッセージを10秒間隔で自動的に取り込むためのスケジューラを定義しています。これを実行したあとにlaunch用のコマンドを実行することで,定義したスケジューラが動作します。

図8 KafkaのメッセージをVerticaにインポート

/opt/vertica/packages/kafka/bin/vkconfig scheduler --add --config-schema kafka_config --username dbadmin --password XXXXX --dbhost 192.168.0.1 --dbport 5433 --frame-duration 00:00:10

このKafka連携と,前述したFlex Tableとを組み合わせて使用すれば,JSONなどの半構造化データをそのままニアリアルタイムで取り込み,SQLでログ分析を行うことが可能になります。Kafkaとの具体的な連携方法については,Vertica技術情報サイトをご参照ください。

今回はHadoopやSpark,Kafkaとの連携について見てきました。次回はVerticaを使ってログを分析したり,機械学習を行うための機能について詳しく見ていきます。

Vertica技術情報サイト」⁠はじめてのVerticaのダウンロードはこちらから。

Vertica事例セミナー『Verticaで解決したビジネス課題』
URL:https://mp.ashisuto.jp/public/seminar/view/7464

概要:実際に「Vertica」を導入したユーザー3社様にご講演いただきます。生の声をお聴き逃しなく!

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.97

2017年2月24日発売
B5判/176ページ
定価(本体1,480円+税)
ISBN978-4-7741-8728-0

  • 特集1
    Reactで作るシングルページアプリケーション入門
    高速! 使いやすい!
  • 特集2
    MySQL運用最前線
    無停止で変更,柔軟な負荷分散,問題の可視化
  • 特集3
    マネジメント入門
    1on1,適切な目標設定,採用の工夫

著者プロフィール

倉岡洋義(くらおかひろよし)

株式会社アシスト データベース技術本部 技術統括部 技術1部4課

学生時代に研究室のSunワークステーションの管理者になったのをきっかけにSIerに就職。

Linux系インフラエンジニアの道を歩みながら,Oracle RACのクラスタリング技術に衝撃を受けてアシストに転職。

Oracle,InfiniDBを経て現在はVerticaデータベースを担当。

趣味はピアノと筋トレ。

コメント

コメントの記入