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

[ストリーム処理基盤 Apache Apex で Hello World \- 駄文型](http://koheikimura.hatenablog.com/entry/2017/05/31/190000)より。


ストリーム処理基盤のひとつである [Apache Apex](https://apex.apache.org/) の開発環境を構築します。

## 参考

[Apache Apex Documentation](https://apex.apache.org/docs/apex/)

## Apache Apex とは
> Apex is a Hadoop YARN native platform that unifies stream and batch processing.
>
> [Apache Apex](https://apex.apache.org/)

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

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

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

> ![](https://apex.apache.org/docs/apex/images/operator/image02.png)
>
> [Operators - Apache Apex Documentation](https://apex.apache.org/docs/apex/operator_development/#ports)

## Apex Malhar

[apache/apex-malhar: Mirror of Apache Apex malhar](https://github.com/apache/apex-malhar)

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

## 必要なもの

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

- git
- Java SDK
- Apache Maven
- IDE (Optional) 

詳細は: [Development Setup - Apache Apex Documentation](https://apex.apache.org/docs/apex/apex_development_setup/)

## Apache Maven のインストール

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

```shell-session
$ 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
```shell-session
$ 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
```shell-session
$ git version
git version 2.10.1 (Apple Git-78)
```

### Maven
```shell-session
$ 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"
```

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

```shell-session
$ 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
```

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

```shell-session
$ cd myapexapp
$ mvn clean package -DskipTests
```

## Unit Test

`mvn test` すればOK。おわり。

```shell-session
$ 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 の次は公式ドキュメントを読むと良い。

- [Operators - Apache Apex Documentation](https://apex.apache.org/docs/apex/operator_development/)

## サンプルコード

`apache/apex-malhar` リポジトリの `examples` や `DataTorrent/examples` が参考になる。

- [apex-malhar/examples at master · apache/apex-malhar](https://github.com/apache/apex-malhar/tree/master/examples)
- [DataTorrent/examples: DataTorrent code samples for guides, tutorials, blogs](https://github.com/DataTorrent/examples)