FlashBlade でシンプルに!ビッグデータ& AI ー ビッグデータの分析

愛犬家のための AI を例に、FlashBlade で構築するエンドツーエンドの AI パイプラインをご紹介するブログシリーズ。今回は、実際に FlashBlade と Apache Spark、Zeppelin、Apache Hive を使用したビッグデータ分析について解説します。

FlashBlade S3 バケット

愛犬家のための AI を例に、FlashBlade で構築するエンドツーエンドの AI パイプラインをご紹介するブログシリーズ。第 1 回ではアーキテクチャの概要を、第 2 回ではリアルタイムなデータの取得、処理、視覚化がいかに容易にできるかをご説明しました。今回は、実際に FlashBlade と Apache Spark、Zeppelin、Apache Hive を使用したビッグデータ分析について解説します。

ビッグデータ分析の設定手順の概要

ビッグデータ分析を開始するにあたり、長期にわたって詳細な分析を行うために、ツイートのローデータを保持しておきたいと思います。それには、ビッグデータを FlashBlade S3 バケットに格納し、Spark と Zeppelin を使用して S3 のデータに直接アクセスして処理します。データ駆動型のインタラクティブなデータ分析とコラボレーションを可能にするために、Webベースのノートブック Zeppelin に Spark コードを入力します。Hadoop などの従来のビッグデータシステムとは異なり、ユーザーデータに Hadoop HDFS は使用しません。その代わりに、シンプルかつスケーラブルで、クラウドサービスとの統合が容易な S3 を使用します。これによって、コンピューティングとストレージを個別に拡張するための俊敏性と柔軟性も得ることができます。

ツイートのローデータを保存

Apache NiFi フローで取得した生の Twitter レスポンスレコードを 100 個ごとに 1 つの JSON ファイルにマージし、それを FlashBlade S3 バケットに送信します。PutS3Object プロセッサを使用すると、FlashBlad eへのデータ取得が非常に簡単になります。FlashBlade UI で S3 バケットを作成し、FlashBlade VIP をエンドポイント URL と自分のバケットとして使用するように PutS3Object プロセッサを設定します。

FlashBlade S3 バケット
図 1:FlashBlade S3 バケット

 

FlashBlade S3 バケット にデータを取得するように Apache Nifi を設定
図 2:FlashBlade S3 バケット にデータを取得するよう Nifi を設定

S3A の設定

Twitter のデータを FlashBlade S3 バケットに取り込んだ後は、Spark などのオープンソースのビッグデータツールを利用して、データに対して高度な処理、変換、分析を実行できます。しかし、その前に、まずは S3A コネクタを設定する必要があります。

S3A コネクタは、S3 互換ストレージ用の Hadoop DFS プロトコルが実装されたものです。S3A コネクタを使用すると、Hadoop エコシステムは FlashBlade などの S3 互換ストレージにデータを保存して処理することができます。S3A には長年の実績があり、特にパブリッククラウドでよく使用されています。S3A の設定例を以下に示します。

これらを環境変数に追加します。Hadoop ディストリビューションの Spark および Zeppelin を使用している場合は、これらを core-site.xml ファイルに追加すると便利です。

AI  構築の鍵となるのが、AI モデルのトレーニングと検証の準備となるデータの調査とクレンジングです。Spark、Zeppelin、Jupyter は、これらの目的に適したツールです。次のセクションでは、これらのタスクについて解説します。

オープンソースとの連携と設定

S3A の設定が完了したら、Zeppelin UI を開いてノートブック「Dog Lover Analytics」を作成します。ブラウザからノートブックにアクセスし、ノートブックにコードブロックを書いてコードを実行します。コードは実行のためにバックエンド(Spark クラスタなど)へ送信されます。出力はノートブックに表示されます。このノートブックは次の図のようになっています。

Zeppelin ノートブックの例
図 3:Zeppelin ノートブックの例

ノートブックで私が実際に行った内容をご紹介します。まず、FlashBlade S3 バケットにある生の JSON ファイルをリストします。

次に、Spark で JSON データを読み取り、全てのファイルの行数を数えて合計を算出します。

JSON スキーマは以下のようになります。

JSONスキーマには多くのフィールドがあります。そこから、最も影響力があるのは誰なのか、どのような内容のツイートをしているのかを確認したいと思います。Twitter データの上位 10 個を見てみましょう。

トップユーザーの @ELLEUK は、ELLE(エル) UK の公式  Twitter アカウントです。ファッション、セレブ情報を発信するメディアで、120 万人以上のフォロワーがいます。

ユーザー情報も重要です。ユーザーデータ専用のデータフレームを作成してみます。

データフレームの一時的なビューを登録します。SQL を使用して同じクエリを実行し、その結果を Zeppelin で視覚化します。SQL は便利なのでお薦めです。

Zeppelin で結果を視覚化
図 4:Zeppelin で結果を視覚化

愛犬家のデータを後ほど詳しく分析したいので、FlashBlade に ORC ファイル形式でデータフレームを保存します。ORC は、ビッグデータワークロード用に最適化された列ファイル形式です。FlashBlade は強力な整合性を備えた S3 実装をサポートしているため、Spark は S3A を介してデータフレームを直接永続化できます。

次に、Hive を使用して FlashBlade に保存されているデータにアクセスします。これはユースケースの報告によく使用されます。Hive クライアントを開いてHive 内で外部テーブルを作成し、ロケーションとして FlashBlade のバケットを指定します。

確認のためにサンプルクエリを実行します。

サンプルクエリの結果
図 5:サンプルクエリの結果

数回のクリックと数行のコードを追加するだけで、FlashBlade 上でリアルタイムなデータ取得、ダッシュボード作成、詳細な分析を行うことができました。

次回予告

これで愛犬家のための AI は準備完了です!次回はいよいよニューラルネットワークモデルをトレーニングして展開し、画像から犬を検出します。お楽しみに!

シリーズ「FlashBlade でシンプルに!ビッグデータ& AI」

FlashBlade でシンプルに!ビッグデータ& AI 第 1 回

FlashBlade でシンプルに!ビッグデータ& AI 第 2 回