前回のおさらい
前編 では、ビッグデータを高速集計/分析するためのデータベース「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の連携
最もシンプルで高速なパフォーマンスを得られるのは①の方法です。図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に取り込むイメージ
たとえば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の連携イメージ
たとえば、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 」のダウンロードはこちらから。
特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT