駄文型

プログラミングとか英語とかの話題を中心にした至極ちゃらんぽらんな日記です。

ストリーム処理基盤 Apache Apex で Hello World

ストリーム処理基盤のひとつである Apache Apex の開発環境を構築します。

参考

Apache Apex Documentation

Apache Apex とは

Apex is a Hadoop YARN native platform that unifies stream and batch processing.

Apache Apex

Apache Apex はストリーム処理とバッチ処理を統合する Hadoop YARN ネイティブの基盤で、

  • 高いスケーラビリティとパフォーマンス
  • フォールトトレランスと状態管理
  • Hadoop YARN & HDFS
  • シンプルな API

などが特徴(らしい)。 Operator と呼ばれる処理単位を作って DAG (有向非巡回グラフ) を組んでストリーム処理アプリケーションを作成する。各 Operator は状態を持つことができる。データフローやコネクティビティ、フォールトトレランスは Apex 側が面倒みてくれるので、開発者は各 Operator が入力タプルをどう扱うか、出力をいつ(そしてどのポートに)送るかだけわかっていれば良い。

Operators - Apache Apex Documentation

Apex Malhar

apache/apex-malhar: Mirror of Apache Apex malhar

Operator を作成するためのライブラリ。 JSONCSV 操作、 Kafka 連携、 S3への出力などができる(らしい)。

必要なもの

開発に必要なものは下記の通り。

詳細は: Development Setup - Apache Apex Documentation

Apache Maven のインストー

Maven はなかったので Homebrew で雑にインストールした。

$ brew search maven
maven               maven-completion    maven-shell         maven@3.1           maven@3.2           maven@3.3
$ brew install maven
...
🍺  /usr/local/Cellar/maven/3.5.0: 106 files, 9.8MB, built in 17 seconds

バージョン

Java

$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ javac -version
javac 1.8.0_102

git

$ git version
git version 2.10.1 (Apple Git-78)

Maven

$ mvn --version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T04:39:06+09:00)
Maven home: /usr/local/Cellar/maven/3.5.0/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.6", arch: "x86_64", family: "mac"

プロジェクトの作成

下記のコマンドでプロジェクトが作成される。

$ mvn archetype:generate \
 -DarchetypeGroupId=org.apache.apex \
 -DarchetypeArtifactId=apex-app-archetype -DarchetypeVersion=3.4.0 \
 -DgroupId=com.example -Dpackage=com.example.myapexapp -DartifactId=myapexapp \
 -Dversion=1.0-SNAPSHOT

しばらく待てば完了するので、ビルド。

$ cd myapexapp
$ mvn clean package -DskipTests

Unit Test

mvn test すればOK。おわり。

$ mvn test
...
hello world: 0.19778332097175633
hello world: 0.3872563781951901
hello world: 0.6822472419746941
hello world: 0.705621338023663
hello world: 0.11655955618022251
hello world: 0.7625487759662669
hello world: 0.029114499662175386
...

チュートリアル

Hello World の次は公式ドキュメントを読むと良い。

サンプルコード

apache/apex-malhar リポジトリexamplesDataTorrent/examples が参考になる。

Kafka: The Definitive Guide: Real-time Data and Stream Processing at Scale

Kafka: The Definitive Guide: Real-time Data and Stream Processing at Scale

koheikimura.hatenablog.com

koheikimura.hatenablog.com