realtime event processing.0 - ijokarumawak/hdf-tutorials-ja GitHub Wiki

NiFi, SAM, Schema Registry, Supersetでリアルタイムプロセッシング

原文: REAL-TIME EVENT PROCESSING IN NIFI, SAM, SCHEMA REGISTRY AND SUPERSET

このチュートリアルは、MacおよびLinux OSユーザー向けです。

はじめに

このチュートリアルでは、視覚的なキャンバスでStream Analytics Manager(SAM)のトポロジを構築する方法を学びます。Schema Registryにスキーマを作成し、SAMとNiFiがフローにデータを引き込むために使用します。SAMトポロジがデプロイされたら、Druid上で実行されるSuperSetを使用していろいろな可視化スライスを作成する方法を学びます。

事前準備

  1. ローカルマシンで/private/etc/hostssandbox-hdf.hortonworks.comを追加します。
127.0.0.1   localhost   sandbox-hdf.hortonworks.com
  1. SAMのデモの依存関係をローカルマシンにダウンロードします。
cd ~/Downloads
wget https://github.com/hortonworks/data-tutorials/raw/master/tutorials/hdf/realtime-event-processing-in-nifi-sam-sr-superset/assets/templates.zip
unzip templates.zip

このテンプレートフォルダには、NiFiフロー、SAMトポロジ、SAM custom UDF、Schema Registryのスキーマが含まれています。

SAMのデモを実行するために、HDFのセットアップをする

  1. Amberiにhttp://sandbox-hdf.hortonworks.com:9080でアクセスし、admin / adminでログインします。
  2. 左にあるサイドバーから“Streaming Analytics Manager (SAM)”を選択し、Summaryタブが表示されたら“Service Actions”をクリックします。“Start”ボタンをクリックして“maintenance mode”をオフにします。
  3. ホストマシンでターミナルを開き、SSHでHDF sandboxに入ります。“bootstrap-storage.sh drop-create”のコマンドは、SAMのメタデータを格納するためにMySQLのテーブルをリセットします。“bootstrap.sh pulls”コマンドは、SAM(Streamline)のデフォルトコンポーネント、Notifier、UDF、roleを作成します。以下のコマンドを実行します。
ssh root@localhost -p 12222
cd /usr/hdf/current/streamline
./bootstrap/bootstrap-storage.sh drop-create
./bootstrap/bootstrap.sh
  1. Ambariダッシュボードの左サイドバーにあるSAM Serviceに移動します。その後、“Configs” -> “Streamline Config”をクリックします。フィルタボックスで“registry.url”を検索し、“registry.url”フィールドにhttp://sandbox-hdf.hortonworks.com:17788/api/v1を入力します。

image

設定を保存し、“updated registry.url”と入力します。SAM Serviceを再起動します。

  1. Druid Serviceに移動し、“Config”、“Advanced”をクリックしてディレクトリを更新し、検索ボックスにdruid.indexer.logs.directoryと入力します。/home/druid/logsで設定を更新します。

image

  1. druid.storage.storageDirectoryを検索し、/home/druid/dataで設定を更新します。

image

両方の設定が更新されたら、設定を保存し、“updated directories, so druid can write to them”を呼びます。

  1. 左サイドバーからHDFSを選択し、先ほどのSAMと同じようにサービスを起動します。
  2. HDFSを起動したのと同じ方法で、Storm、Ambari Metrics、Kafka、Druid、Registry、Streaming Analytics Manager(SAM)を起動します。

概要

概念

SuperSet

SuperSetは、視覚的、直観的、対話的なデータ探索プラットフォームです。このプラットフォームは、可視化されたデータセットにて、友人やビジネスクライアントとダッシュボードを迅速に作成して共有する方法を提供します。様々な可視化オプションはデータを分析するために使用し、それについて説明します。Semantic Layerは、データストアをUIに表示する方法を制御することをユーザに許可します。このモデルは安全であり、特定の機能だけが特定のユーザによってアクセスできる複雑なルールをユーザに与えます。SuperSetは、Druidやマルチシステムと互換がある柔軟性を提供している他のデータストア(SQLAlchemy、Python ORMなど)と結合できます。

Druid

Druidは、データのビジネスインテリジェンスクエリのために開発されたオープンソースの分析データベースです。Druidは、リアルタイムなデータ取り込みを低レイテンシで行い、柔軟なデータ探索と迅速な集約を提供します。デプロイメントは、多数のペタバイトのデータに関連して、何兆ものイベントに達することがよくあります。

Stream Analytics Manager (SAM)

Stream Analytics Managerは、ストリーム処理開発者が従来の数行のコードを記述するのに比べてわずか数分でデータトポロジを構築できるドラッグ&ロップのプログラムです。今すぐに、各コンポーネントまたはプロセッサがデータの計算を実行する方法をユーザは設定および最適化できます。ウィンドウ処理機能、複数のストリーム結合、その他のデータ操作を実行できます。SAMは現在、Apache Stormと呼ばれるストリーム処理エンジンをサポートしていますが、後にSparkやFlinkなどの他のエンジンもサポートします。その際には、ユーザーが選択したいストリーム処理エンジンを選択できるようになるでしょう。

Schema Registry

Schema Registry(SR)は、RESTfulインターフェイス経由でAvroスキーマを格納および取得します。SRには、すべてのスキーマを含むバージョン履歴が保存されます。シリアライザは、スキーマを格納するKafkaクライアントに接続するために提供され、Avro形式で送信されたKafkaメッセージを取得します。

Step 1: Druid ServiceにMAPBox APIキーを追加する

Mapboxは地図でデータの可視化を作成できるサービスで、SuperSetで使用します。SuperSetでMapboxの地図の可視化機能を使用するためには、MapBox APIキーをDruidの設定として追加する必要があります。

  1. APIキーを取得するためには、mapbox.comに移動し、アカウントを作成します。その後、Mapbox Studio -> “My Access Tokens” -> “Create a new token” -> DruidSuperSetTokenという名前を付け、初期設定を保持しておきます。

Mapbox Studio

image

My access tokens

image

Create a new token: DruidSuperSetToken

  • 初期設定のパラメータのままで、トークンの名前をDruidSuperSetTokenにします。

image

  1. Ambari Druid Serviceから、Configs -> Advanced -> フィルタフィールドにてMAPBOX_API_KEYを検索すると、MAPBOX_API_KEYの属性が表示されます。 mapbox.comから取得したMAPBOX_API_KEYを記入してください。

image

  • Saveをクリックし、Save ConfigurationにMAPBOX_API_KEY addedを入力し、もう一度Saveを押下します。
  1. Druid SuperSetコンポーネントを再起動します。

image

Step 2: Kafkaトラックトピックが作成されていることを確認する

  1. hdfsユーザに切り替え、ディレクトリを作成し、すべてのユーザに権限を与えます。これにより、SAMはすべてのディレクトリにデータを書き込むことができます。
su hdfs
hdfs dfs -mkdir /apps/trucking-app
hdfs dfs -chmod 777 /apps/trucking-app
cd /usr/hdp/current/kafka-broker/bin/
./kafka-topics.sh --list --zookeeper sandbox-hdf.hortonworks.com:2181

image

Step 3: Schema Registryにトラックスキーマを作成する

Schema Registryにsandbox-hdf.hortonworks.com:17788、またはAmbariのQuick Linksにある“Registry UI”からアクセスします。4つのトラックスキーマを作成していきます。

  1. 新しいスキーマを追加するためには“+”ボタンをクリックします。“Add New Schema”というウィンドウが表示されます。
  2. 表1の情報をもとに、新規のスキーマ(最初のスキーマ)に次の特性を追加します。

表1: raw-truck_events_avroスキーマ

PROPERTY VALUE
Name raw-truck_events_avro
Desc Raw Geo events from trucks in Kafka Topic
Group truck-sensors-kafka
Browse File raw-truck_events_avro.avsc

ファイル参照: 先ほどダウンロードした“templates”フォルダに移動すると、"Schema"フォルダに全てのスキーマテンプレートがあります。

スキーマ情報のフィールドを入力してテンプレートをアップロードしたら、Saveをクリックします。

image

注釈: Groupは論理グループのようなものです。アプリケーション開発者が同じ全てのSchema Registryからスキーマを取得し、それらのプロジェクトに関連した名前でグループ化する1つの方法です。

  1. 表2の情報をもとに、2番目の新しいスキーマを追加します。

表2: raw-truck_speed_events_avroスキーマ

PROPERTY VALUE
Name raw-truck_speed_events_avro
Desc Raw Speed Events from trucks in Kafka Topic
Group truck-sensors-kafka
Browse File raw-truck_speed_events_avro.avsc

スキーマ情報のフィールドを入力してテンプレートをアップロードしたら、Saveをクリックします。

image

  1. 表3の情報をもとに、3番目の新しいスキーマを追加します。

Table 3: truck_events_avroスキーマ

PROPERTY VALUE
Name truck_events_avro
Desc Schema for the kafka topic named ‘truck_events_avro’
Group truck-sensors-kafka
Browse File truck_events_avro.avsc

スキーマ情報のフィールドを入力してテンプレートをアップロードしたら、Saveをクリックします。

image

  1. 表4の情報をもとに、4番目の新しいスキーマを追加します。

Table 4: truck_speed_events_avroスキーマ

PROPERTY VALUE
Name truck_speed_events_avro
Desc Schema for the kafka topic named ‘truck_speed_events_avro’
Group truck-sensors-kafka
Browse File truck_speed_events_avro.avsc

image

Saveをクリックします。

Step 4: GeoEnrich Kafka DataにNiFiフローを導入する

  1. Ambari NiFi Service Summaryウィンドウの“Quick Links”からNiFiを起動するか、http://sandbox-hdf.hortonworks.com:19090/nifiでNiFi UIを開きます。
  2. “Operate panel”のNiFi upload templateボタンを使用して、先ほどダウンロードした“templates” -> “nifi”フォルダにあるNifi_and_Schema_Registry_Integration.xmlをアップロードします。

image

  1. Templateアイコンを“components toolbar”からキャンバスにドラッグし、アップロードしたばかりのテンプレートを追加します。

image

  1. “Operate panel”の左隅にある歯車をクリックし、“Controller Services”タブを開きます。
  2. “HWX Schema Registry”サービスを確認します。Schema RegistryのREST API URLがHDF 3.0 Sandboxで実行されている適切なSchema Registryを指していることを確認します。http://sandbox-hdf.hortonworks.com:17788/api/v1であるはずです。
  3. “HWX Schema Registry”サービスが有効であることを確認します。“HWX Schema Registry”に依存する他のすべての関連するサービスが有効であることを確認します。下図のように有効になっていない場合は、稲妻の記号をクリックして有効にします。

image

  1. NiFiフローのルートレベルから、左下の“NiFi Flow”に示すように、NiFiフローを開始します。“Use Case 1”のプロセスグループを右クリックし、“Start”を選択します。“Data-Loader”が実行されるまで、データの登録は開始されません。

image

Step 5: Druid SuperSetのためのデータを前処理するためにSAMトポロジをデプロイする

  1. Ambari SAM Service Summaryウィンドウの“Quick Links”からStreaming Analytics Manager(SAM)を起動するか、http://sandbox-hdf.hortonworks.com:17777/でSAM UIを開きます。
  2. 左隅にあるツールの“Configuration”をクリック -> “Service Pool”リンクを選択します。

image

  1. Ambari API URLに http://sandbox-hdf.hortonworks.com:8080/api/v1/clusters/Sandbox を入力します。
  2. ユーザ名admin、パスワードadminでログインします。
  • SAM Service PoolをAmbari API URLに指し示します。

image

  • SAMクラスタが作成されました。

image

  1. ホーム画面に戻るために、左上にあるSAMのロゴをクリックします。
  2. ツールの“Configuration”をクリックし、“Environments”をクリックします。以下の表について、以下のプロパティ値を持つ新しい環境を追加するために、“+”ボタンをクリックします。

表5: Environment metadata

PROPERTY VALUE
Name HDF3_Docker_Sandbox
Description SAM Environment Config
Service Include all services

OKをクリックして環境を作成します。

image

image

  1. 左隅にある“Configuration”ボタンをクリックし、次に“Application Resources”をクリックして、UDFタブを押下します。新しいUDFを追加するためには‘+’をクリックします。以下の表について、“Add UDF”ウィンドウのフィールドに下記のプロパティ値を入力し、OKをクリックします。
PROPERTY VALUE
Name ROUND
Display Name ROUND
Description Rounds a double to integer
Type FUNCTION
Classname hortonworks.hdf.sam.custom.udf.math.Round
UDF JAR sam-custom-udf-0.0.5.jar

注釈: UDF JARは、以前ダウンロードした“sam”フォルダの“templates”フォルダにあります。

  • 新しいUDFを追加

image

  • ROUND UDFが追加されました

image

SAMのロゴを押下し、“My Applications”ページに戻ります。

  1. “+”ボタンをクリックして新しいアプリケーションを追加します。“Import Application”を選択し、“sam”フォルダから“IOT-Trucking-Ref-App.json”のテンプレートを選択します。
  • Application Name: IOT-Trucking-Demo
  • Environment: HDF3_Docker_Sandbox

OKをクリックします。

image

  1. キャンバスに表示されるSAMトポロジから、2つのKafka Sinkを確認します。それぞれをダブルクリックし、“Security Protocol”で“PLAINTEXT”が選択されていることを確認します。Kafka BrokerのURLは、sandbox-hdf.hortonworks.com:6667を指しているはずです。

image

  1. Druid Sinkを確認し、ZOOKEEPER CONNECT STRING URLがsandbox-hdf.hortonworks.com:2181に設定されていることを確認します。それ以外であったらその値を変更します。

image

  1. SAMトポロジをデプロイするためには、右下のRunアイコンをクリックします。

image

  • 注釈: “Are you sure want to continue with this configuration?”のウィンドウが表示され、デフォルトの設定を維持してOKをクリックします。

image

デモが正常にデプロイされたことを示すはずです。

Step 6: アプリケーションでData-Loaderを実行する

  1. hdfsユーザーを終了し、Data-Loaderを実行してデータを生成し、Kafka Topicに転送します。
exit
cd /root/Data-Loader
tar -zxvf routes.tar.gz
nohup java -cp /root/Data-Loader/stream-simulator-jar-with-dependencies.jar  hortonworks.hdp.refapp.trucking.simulator.SimulationRegistrySerializerRunnerApp 20000 hortonworks.hdp.refapp.trucking.simulator.impl.domain.transport.Truck  hortonworks.hdp.refapp.trucking.simulator.impl.collectors.KafkaEventSerializedWithRegistryCollector 1 /root/Data-Loader/routes/midwest/ 10000 sandbox-hdf.hortonworks.com:6667 http://sandbox-hdf.hortonworks.com:17788/api/v1 ALL_STREAMS NONSECURE &

Data-Loaderを実行させることによって、Kafkaトピックにデータが保存され、NiFiとSAMがKafkaトピックからデータを取り出します。

  1. nohup.outファイルにデータが取り込まれていることを確認します。

image

6.1 データフローとストリーム処理データを確認する

  1. NiFi UIに戻ると、Kafka Consumerからトラックイベントに引っ張ってきているはずです。そうでなければ、それ以前に問題があります。

image

  1. SAM UIに戻り、左上にあるSAMのロゴをクリックしてSAMのルートレベルに移動します。現在のページから移動するかどうかを尋ねるメッセージが表示されたら、OKをクリックします。次に、アプリケーションの概要を提供する必要があります。アプリケーションの詳細を表示するには、appをクリックします。

image

  1. Storm Monitorをクリックし、Stormがタプルを処理していることを確認します。

image

Step 7: スライスを持つSuperSetダッシュボードを作成する

  1. Ambariダッシュボードから、Druid Serviceをクリックします。その後、“Quick Links”ドロップダウンを押下し、SuperSetを選択します。
  2. 初期設定でログインしていない場合、ログインの認証情報はadmin / hadoophadoopです。
  3. “Sources”、“Refresh Druid Metadata”の順にクリックします。SAMトポロジによって作成された2つのデータソースは、25分以内に表示されます。

image

  1. “Data Source”のviolation-events-cube-2を選択すると、データの可視化を作成できる“Datasource & Chart Type”ページが表示されます。

image

“サンバースト図”でDriverViolationsSunburstの可視化を作成する

  1. Data Source & Chart Typeから、“Table View”をクリックし、Chart typeをSunburstに設定します。

image

  1. “Time”から、“Time Granularity”をone dayに設定します。“Since”を7 days agoに、“Until”をnowに設定します。

  2. HierarchyをdriverName, eventTypeに設定します。

  3. 左上にある“緑のQueryボタン”を押下してクエリを実行し、出力を確認します。Sunburstの可視化には18.49秒かかります。

  4. Save asボタンをクリックして、Save asにはDriverViolationsSunburstと入力し、add to new DashboardにはTruckDriverMonitoringを入力して、保存をします。

image

“Mapbox”でDriverViolationMapの可視化を作成する

  1. “Table View”でMapboxを選択します。
  2. Timeには、先ほどの設定を維持します。
  3. “Longitude”と“Latitude”を名前付き変数(longitudeとlatitude)に変更します。
  4. “Clustering Radius”を20に設定します。
  5. “GroupBy”をlatitude,longitude,routeに設定します。
  6. “Label”をrouteに設定します。
  7. “Map Style”をOutdoorsに設定します。
  8. Viewportから、“Default Long field”を-90.1に、Latを38.7に、Zoomを5.5に設定します。
  9. クエリを実行します。
  10. “Save As”ボタンをクリックして、“Save as”を選択しDriverViolationMapと名付けます。その後、“Add slice to existing dashboard”を選択し、ドロップダウンからTruckDriverMonitoringを選びます。“Save”を押下します。

image

SuperSetスライスの可視化ダッシュボードにアクセスする

  1. Dashboardsタブをクリックすると、ダッシュボードのリストが表示されます。

image

  1. TruckDriverMonitoringのダッシュボードを選択します。

image

他のSuperSetの可視化を試す(任意)

  1. “TruckDriverMonitoring”のダッシュボードにて、“+”ボタンで新しいスライスを作成し、他の可視化を探索します。
  2. 新しい可視化スライスを作成します。

まとめ

おめでとうございます!堅牢なキュー(Kafka)、データフローマネジメントエンジン(NiFi)、ストリーム処理エンジン(Storm)を使用してトラックのイベントデータを処理するSAMのデモをデプロイしました。Stream Analytics Managerを使用して複雑なデータを計算するために視覚的なデータフローを作成し、Druid SuperSetでデータを可視化する方法について学びました。

参考文献

付録: リアルタイムイベント処理のデモについてのトラブルシューティング

付録A: SAMアプリケーションのシャットダウン

  1. data-loaderを強制終了する。
(ps -ef | grep data-loader)
  1. NiFiがkafkaのキューを吐かせ、NiFiフローのデータが0になります。
  2. Ambariからすべてのサービスを停止します。
  3. HDF 3.0 Sandboxのインスタンスをシャットダウンします。

付録B: Kafkaトピックが存在しなかった場合、Kafkaトピックを作成する

  1. SSHでHDS 3.0 Sandboxに入ります。
ssh root@localhost -p 12222
sudo su -
  1. 新しいアプリケーションをデプロイするために、既にアプリケーションが存在する場合に備えて、Kafka Topicを削除してください。
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --delete --if-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --topic raw-truck_events_avro
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --delete --if-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --topic raw-truck_speed_events_avro
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --delete --if-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --topic truck_events_avro
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --delete --if-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --topic truck_speed_events_avro
  1. Kafka Topicを再作成する。
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --if-not-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --replication-factor 1 --partition 1 --topic raw-truck_events_avro
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --if-not-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --replication-factor 1 --partition 1 --topic raw-truck_speed_events_avro
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --if-not-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --replication-factor 1 --partition 1 --topic truck_events_avro
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --if-not-exists --zookeeper sandbox-hdf.hortonworks.com:2181 --replication-factor 1 --partition 1 --topic truck_speed_events_avro

付録C: SAMトポロジにNotification Sinkを追加する

  1. 左にあるprocessorバーをNotification Sinkまでスクロールします。Notification Sinkをドラッグしてトポロジに接続します。デフォルトコネクションを受け入れます。
  • Notification Sinkまでスクロールします。

image

  • キャンバスにNotification Sinkをドラッグします。

image

  1. Notification sinkを編集し、下記のプロパティ値を追加します。
PROPERTY VALUE
Username [email protected]
Password StrongPassword
Host smtp.gmail.com
Port 587
From/To Email [email protected]
Subject Driver Violation
Message Driver ${driverName} is speeding at ${speed_AVG} mph over the last 3 minutes

付録D: SAMのデモの拡張機能を追加する

SAMのデモの拡張機能には、カスタムプロセッサとUDFが付属しています。これらのコンポーネントは、“Application Resources” -> “Custom Processor”または“UDF”に追加することによって、トポロジに組み込むことができます。

  1. SAMのデモの拡張機能をダウンロードします。
git clone https://github.com/georgevetticaden/sam-custom-extensions.git
  1. HDF 3.0 Sandboxにmavenをダウンロードします。
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo sed -i s/$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
sudo yum install -y apache-maven
mvn --version
  1. maven clean packageを実行して、カスタムプロセッサとUDFのためのプロジェクトコードを独自のjarファイルにパッケージ化します。
mvn clean package -DskipTests

OKを押下します。