Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

IoT、ビッグデータの高速分析機能が強化されたVertica 7.2

2016/04/27 11:45

 情報系システムのパフォーマンス改善、運用管理コスト削減に貢献するデータベース、「Vertica」。2015年末にリリースされたVertica 7.2では、IoTやビッグデータの高速分析機能がさらに強化されました。本稿では、そんなVertica 7.2の代表的な新機能についてご紹介します。

 Verticaは、高い検索パフォーマンスを実現する「DWH/ビッグデータ活用」に特化した列指向(カラムナー)データベースです。

 ※Verticaの基礎を知りたい方は、アシスト Vertica技術情報サイトの「Verticaとはをご確認ください。

 2015年末にVerticaの最新バージョンである、Vertica 7.2がリリースされました。Vertica 7.2では、IoTデータなどのデータストリーミング分析のためにApache Kafkaとの連携が強化されたり、Hive等Hadoopで使われることが多いORCファイル上で直接クエリが実行できるようになったりと、これまで以上にIoTデータやビッグデータ分析の高速化に力を入れています。

 また、こういった新機能だけでなく、主キー/一意キー制約や、バックアップ/リストア機能の強化といった、エンタープライズ向けの機能も強化されています。

 Vertica 7.2で追加された主な新機能は次の通りです。

  •  「Apache Kafka」分散型メッセージングシステムのネイティブサポート
  •  データロード時の主キー/一意キー制約列に対する一意性チェック機能の追加
  •  HASH JOINの性能向上や、ヒント句のサポートといったクエリの最適化
  •  データロード時のParserとしてAvro Parser、CSV Parserの追加
  •  解析関数(NTH_VALUE)、算術関数(COSH、SINH、TANH、LOG10)の追加
  •  JDBC接続のMARS対応やPythonドライバーの追加といったクライアント接続機能の強化
  •  スキーマレベルの権限継承機能の追加
  •  プロセスレベルのハング検知機能追加といったデータベース管理機能の強化
  •  バックアップ・リカバリ機能の強化
  •  Flex Zoneライセンス体系の変更

 この中から、まずはIoTデータとビッグデータ分析をより便利にする以下の2つの新機能をご紹介します。

  1.  「Apache Kafka」分散型メッセージングシステムのネイティブサポート
  2.  Flex Zoneライセンス体系の変更

1.Apache Kafkaと連携することで、大量データのデータストリーミング分析を実現

 Verticaへのデータロードは、COPYコマンドを用いたCSVファイルのバルクロードで実施する方法が一般的です。INSERT文も使用できますが、Verticaのような列指向データベースは1件1件のINSERT処理よりも、ある程度まとまった件数をロードするバルクロードに向いています。

 そのため、これまでのバージョンでは、IoT端末が生成する大量のログデータやTwitterのつぶやきデータ等の逐次発生するデータをリアルタイムで取り込むことは難しいというのが現実でした。(ETLツール等を用いて、少量のデータを逐次COPYコマンドでロードするような仕組みを作れば実現できますが、そういった仕組みはデータ同期等のことを考えると複雑になりがちです)

 Vertica 7.2では、オープンソース分散型メッセージングシステムの「Apache Kafka」(以下Kafka)のネイティブサポートを提供することで、これらのデータをニア・リアルタイムで取り込むことが可能になりました。

Kafka連携機能を利用してTwitterのつぶやきデータを取り込む場合の構成例
図1:Kafka連携機能を利用してTwitterのつぶやきデータを取り込む場合の構成例

 例えばTwitterのつぶやきデータを分析したい場合は、図1のような構成で実現することができます。TwitterのつぶやきデータをApache Flumeやfluentdなどを使って収集し、Kafkaに送信します。Kafkaには送られてきたデータがキューとしてKafka Cluster内に次々と溜まっていきます。このキューに溜まっているデータの中から、分析に使用するデータをVerticaが一定間隔で受け取りに行き、内部的にCOPYコマンドを使ってVerticaにロードします。

 このように、INSERTではなくVerticaが得意とするCOPYコマンドを使用したバルクロードとして処理することで、ログデータ等の逐次発生するようなデータをVerticaにリアルタイムに取り込むことが可能です。ロードしたデータについては通常のテーブルに格納されるので、すぐに分析を行うことができます。

 次に、Kafkaと連携させるために、事前にVertica側で実施しなければならない内容について説明します。

 1. Kafka スケジューラの定義(vkconfig schedulerコマンド)
 接続先のKafkaサーバの情報や、Kafkaにデータを取得しに行く間隔(図1の場合は10秒間隔)等を指定します。

 2.データロード用のターゲットテーブルの作成(CREATE [FLEX] TABLE)
 Kafkaから取得したデータをロードするためのテーブルを作成しておきます。構造化できないようなデータの場合は、半構造化データを扱えるFlex Tableを作成しておくと良いでしょう。

 ※Flex Tableについては後述する「Flex Tableとは?」を参照してください。

 3. Kafka Topicとターゲットテーブルの関連付け(vkconfig topicコマンド)
 KafkaではデータをTopicという単位で分類して格納しています。取り込みたいKafkaのTopicとロード先のVerticaのテーブルとの関連付けを行います。

 4. Kafkaスケジューラの実行(vkconfig launchコマンド)
 設定した内容でkafka連携を開始するためのコマンドを実行します。

 Kafka連携がネイティブサポートされたことで、このようにわずか4つのコマンドを実行するだけで、KafkaのデータをVerticaに取り込むことが可能になりました。

 Kafka連携時の具体的な手順については、アシストが運営するVertica技術情報サイトの「Apache Kafka連携機能を利用して、Verticaにストリーミングデータをロードする(7.2新機能)」で紹介しています。

 
 

※この続きは、会員の方のみお読みいただけます(登録無料)。


※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • 佐伯 竜輔(サエキ リュウスケ)

     株式会社アシスト データベース技術本部  入社後eラーニング製品、MySQL、InfiniDBのサポートに従事。現在は、Verticaのフィールドエンジニアおよびサポート担当として活動中。『SQL逆引き大全363の極意』共著。

All contents copyright © 2007-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5