HadoopTimes

実践 機械学習:レコメンデーションにおけるイノベーション
技術情報

MapR Streams入門


MapR Streamsは、大容量イベントデータのストリーミング向けに新しく配布されたメッセージングシステムで、MapRのコンバージドプラットフォームに組み込んで使用します。MapRストリームは、Apache Kafka APIを使用しているため、すでにKafkaを知っている場合は、特にスムーズに導入できます。

MapR Streamsは全体としてはApache Kafkaプログラミングモデルを使用しているものの、いくつか重要な相違点があります。例えば、MapRファイルシステムには、その実態にふさわしく、「ストリーム」と呼ばれる新種のオブジェクトが組み込まれています。ストリームはそれぞれ多数のトピックを処理でき、ユーザーは1つのクラスターで多数のストリームを持つことができます。TTL(有効期間)、ACE(アクセス制御式)などのポリシーは、ストリームレベルで設定でき、多数のトピックの同時管理に便利です。KafkaとMapR Streamsのストリーミングアーキテクチャの詳細な使用法については、MapRのウェブサイトから無料でダウンロードできる新小冊子「Streaming Architectures:New Designs Using Apache Kafka and MapR Streams」で確認できます。

Kafkaアプリケーションをすでに持っている場合、KafkaアプリケーションからMapR Streamsには簡単に移行できます。詳細を記載したMapR関連文書は以下から取得できます。

http://maprdocs.mapr.com/51/ – MapR_Streams/migrating_kafka_applications_to_mapr_streams.html

このブログでは、私たちがもともとKafka向けに作成した単純なアプリケーションをMapR Streamsで実行する方法を説明します。

プログラム例

先に書いたとおり、MapR StreamsはKafka API 0.9.0を使用しています。このことは、若干の変更で同じアプリケーションを再利用できることを意味しています。具体例に入る前に、何を変更すべきかについて見ておきましょう。

  • 管理上の理由(セキュリティ、TTLなど)からMapRが実施したトピック整理により、トピック名が”topic-name“から”/stream-name:topic-name“に変更する。
  • 設定パラメータのproducerconsumerは、MapR Streamsでは使用されておらず、自動的に無視されるため、ここで変更する必要はありません。
  • producerおよびconsumerアプリケーションは、Apache KafkaのJARではなく、MapRのJARを使用する。

Sample Programs for MapR Streams」(MapR Streamsのプログラム例)ページには、プログラム全体が掲載されています。これは若干の変更を除けば「Sample Programs for Kafka 0.9 API」(Kafka 0.9 APIのプログラム例)プロジェクトの単純なコピーです。このKafkaプロジェクトについては、こちらの記事で文書化されています。

前提条件

基本的なJavaプログラミング技術と以下へのアクセスが必要となります。

最初のMapR Streamsアプリケーションを実行する方法

ステップ1:ストリームの作成

ストリームはユーザーが以下の手段で管理できるトピックの集合体です。

  • ストリーム内のすべてのトピックにセキュリティポリシーを設定する
  • ストリームで作成される新規トピックの一つひとつに割り当てるデフォルトのパーティション数を設定する
  • ストリームに含まれるトピックの一つひとつについて、メッセージのTTLを設定する

MapR Streamsのコンセプトの詳細については、こちらの文書に記載されています。

MapRクラスターでmaprユーザーとして以下のコマンドを実行します:

$ maprcli stream create -path /sample-stream

デフォルトでは、produceやconsumeのトピック許可のデフォルト値がストリームの作成者(maprcliコマンドの実行に使用しているUNIXユーザー)に設定されています。ストリーム編集による許可設定も可能です。例えば、すべてのトピックをあらゆる相手が利用できるようにする(一般公開許可)場合、以下のコマンドを実行します。

$ maprcli stream edit -path /sample-stream -produceperm p -consumeperm p -topicperm p

ステップ2:トピックの作成

このプログラム例には2つのトピックが必要です。必要なトピックは以下のmaprcliで作成できます。:

$ maprcli stream topic create -path /sample-stream  -topic fast-messages
$ maprcli stream topic create -path /sample-stream  -topic summary-markers

これらのトピックは、以下のコマンドで一覧表示できます。:

$ maprcli stream topic list -path /sample-stream
topic            partitions  logicalsize  consumers  maxlag  physicalsize
fast-messages    1           0            0          0       0
summary-markers  1           0            0          0       0

このプログラムでは、既存のトピックがない場合、自動的にトピックが作成されることに留意してください。ご使用のアプリケーションでは、プログラムにトピックの自動作成を許可すべきかどうかを自分で決定してください。単にトピックに言及するか、またはトピックごとに存在を厳格に制御するかどうかを言及することによって決定できます。

ステップ3:プログラム例のコンパイルとパッケージ作成

プログラム例を格納しているディレクトリに戻り、プログラム例をビルドします。

$ cd ..
$ mvn package
...

このプロジェクトではすべての外部依存が保持されたJARが作成されます ( ./target/mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar )。

実行時やデプロイ時にアプリケーションに組み込む場合を除き、このプロジェクトは、Apache Kafkaの依存関係を利用してビルドできます。この例には、mapr.com Mavenリポジトリに見られる依存関係の代わりに、MapR Streamsクライアントの依存関係が使用されています。

   <repositories>
       <repository>
           <id>mapr-maven</id>
           <url>http://repository.mapr.com/maven</url>
           <releases><enabled>true</enabled></releases>
           <snapshots><enabled>false</enabled></snapshots>
       </repository>
   </repositories>
   ...
       <dependency>
           <groupId>org.apache.kafka</groupId>
           <artifactId>kafka-clients</artifactId>
           <version>0.9.0.0-mapr-1602</version>
           <scope>provided</scope>
       </dependency>
  ...

ステップ4:producer例の実行

MapR Client(MapRクライアント)をインストールし、ローカルでアプリケーションを実行するか、JARファイルをクラスター(ノードは任意)にコピーすることができます。

$ scp ./target/mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar mapr@<YOUR_MAPR_CLUSTER>:/home/mapr

producerは多数のメッセージを/sample-stream:fast-messages臨時メッセージと一緒に/sample-stream:summary-markersに送ります。実行中のconsumerはまだないため、このメッセージを受け取る相手はいません。

このアプリケーションのビルドに使用されたKafkaの例とこれを比較すると、コードの変更点はトピック名のみです。

すべてのMapR Streamsアプリケーションには、MapR Clientライブラリが必要です。これらのライブラリをアプリケーションクラスパスに使用できるようにする方法の1つに、/opt/mapr/bin/mapr classpathコマンドの使用があります。例:

$ java -cp $(mapr classpath):./mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar com.mapr.examples.Run producer
Sent msg number 0
Sent msg number 1000
...
Sent msg number 998000
Sent msg number 999000

ここで、Apache KafkaアプリケーションとMapR Streamsアプリケーションの重要な相違点は、クライアントライブラリの違いのみです。このため、MapR ProducerはKafkaブローカーにではなくMapRクラスターに接続し、メッセージをポストすることができます。

ステップ5:consumer例の開始

別のウィンドウを使用し、以下のコマンドでconsumerを実行することができます。:

$ java -cp $(mapr classpath):./mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar com.mapr.examples.Run consumer
1 messages received in period, latency(min, max, avg, 99%) = 20352, 20479, 20416.0, 20479 (ms)
1 messages received overall, latency(min, max, avg, 99%) = 20352, 20479, 20416.0, 20479 (ms)
1000 messages received in period, latency(min, max, avg, 99%) = 19840, 20095, 19968.3, 20095 (ms)
1001 messages received overall, latency(min, max, avg, 99%) = 19840, 20479, 19968.7, 20095 (ms)
...
1000 messages received in period, latency(min, max, avg, 99%) = 12032, 12159, 12119.4, 12159 (ms)

メッセージバッチの概要に列挙された遅延が生じることに留意してください。これは、メッセージがMapR Streamsに送信されたとき、consumerが実行中ではなかったことが原因です。そのため、取得は送信よりずっと後となります。

トピックの監視

maprcliツールは、トピックに関する情報の取得に随時利用できます。例:

$ maprcli stream topic info -path /sample-stream -topic fast-messages -json

-jsonオプションは、トピック情報をJSON文書形式で取得するために指定します。

クリーンアップ

再生終了後は、対象ストリームとすべての関連トピックを以下のコマンドで削除できます。:

$ maprcli stream delete -path /sample-stream

まとめ

このApache Kafkaアプリケーションをベースにしてビルドされた例で、最初のMapR Streamsアプリケーションを作成、デプロイ、実行する方法を確認しました。

ご覧のとおり、アプリケーションコードは本当によく似ており、必要な変更はごくわずか(トピック名の変更など)です。このため、ご使用のKafkaアプリケーションをさっとMapRにデプロイし、高度なセキュリティ、地域分散型デプロイ、極めて多数のトピックなど、MapR Streamsの豊富な機能全部のメリットを享受するのも簡単です。このため、これまでに積み上げたApache KafkaのスキルをそのままMapR環境で生かすこともできます。

著者情報

タグダル・グレル

(MapR Technologies テクニカルエバンジェリスト)

MapR Streams : ビッグデータ向けパブリッシュ/サブスクライブモデルのイベントストリーミング

MapR Streams : ビッグデータ向けパブリッシュ/サブスクライブモデルのイベントストリーミング
MapR Streamsは、エンタープライズグレードのセキュリティやグローバルスケールの信頼性があり、ストリーミングデータを利用してリアルタイムで処理を行える画期的なデータ活用アプリケーションを実現します。

詳細についてデータシートをご確認ください。

無料ダウンロードはこちら

こちらの記事もおすすめです