Cloudera ManagerでStreamSetsのDataCollectorを楽々セットアップ

# データフローが必要な背景
Hadoop(HDFS)にデータを集めてSparkやMapReduceで処理を行いたい場合、データのパイプラインを作る必要があるかもしれません。HadoopエコシステムのApache FlumeやApache Kafkaなどを組み合わせてパイプラインを作ることもできますが、それなりの手間と労力がかかります。

データフローを作るためのOSSとしてApache Nifi (https://nifi.apache.org/) がありますが、ApacheライセンスのOSS、StreamsetsのData Collector （https://streamsets.com/product/） もあります。後発な分、フローの定義やモニタリングのGUIが洗練されているような印象がありますね。

[Streamsetsのホームページより引用]
![adaptable-flows-2k.png](https://qiita-image-store.s3.amazonaws.com/0/13776/5688e69a-5b23-4409-a912-87e7fc5338e7.png)


Data CollectorはApacheライセンスのOSSですが、Apacheプロジェクトではありません。しかし、HadoopやHadoopエコシステムと組み合わせて使うことが多いでしょう。Hadoopの環境は Cloudera Managerを使って簡単に構築できますが、同様に、Data CollectorもCloudera Managerを使って簡単にセットアップできます。今回は手元の環境でセットアップして試してみました。

なお、Streamsetsについては下記の記事も参考になります。
http://qiita.com/junko_urata/items/e6355bba3ad3f35c854eの

デモ動画
https://twitter.com/mlmoreno/status/753267274224578560

# 環境の準備

- Cloudera Quickstart VM 5.7 の仮想マシン
または
- Cloudera ManagerがセットアップされたHadoopクラスタ

Cloudera Quickstart VMのセットアップについては以下を参考にしてください。

- http://linux.wwing.net/WordPress/?p=2735
- http://linux.wwing.net/WordPress/?p=2792
- http://linux.wwing.net/WordPress/?p=2852


# Cloudera Manager に Streamsets のCSD (Custom Service Descriptors)をセットアップ

今回はCloudera Managerで構築するので、
https://streamsets.com/opensource/
のCSDの手順に従ってセットアップします。

<img width="1384" alt="streamsets_download.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/03b2ca35-d19d-80eb-7acf-603d91ac4a99.png">

ダウンロードが終わったら手順に従ってファイルをセットアップします。

```
[cloudera@quickstart ~]$ cd Downloads/
[cloudera@quickstart Downloads]$ sudo mv STREAMSETS-1.5.0.0.jar /opt/cloudera/csd
[cloudera@quickstart Downloads]$ sudo chown cloudera-scm:cloudera-scm /opt/cloudera/csd/STREAMSETS-1.5.0.0.jar 
[cloudera@quickstart Downloads]$ sudo /etc/init.d/cloudera-scm-server restart
Stopping cloudera-scm-server:                              [  OK  ]
Starting cloudera-scm-server:                              [  OK  ]
[cloudera@quickstart Downloads]$ 
```

Cloudera ManagerのWebUIからログインし、Parcelの画面からStreamsetsのDataCollectorをダウンロードします。

<img width="1379" alt="streamsets_cm.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/98fb512d-b3a2-1dfa-bb4f-02d1e9374ed5.png">
メニューのアイコンをクリックしてParcelの画面に移動します

<img width="1403" alt="streamsets_parcel.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/7db0c931-bc80-258e-e646-e32008852e87.png">
Streamsets DataCollectorをダウンロードします。

<img width="1130" alt="streamsets_parcel_distribute.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/d5efa4ea-d910-0104-81ef-06c93f07e5ac.png">
ダウンロードが終わったら配布します。（今回は１ノードですが、、、）

<img width="1119" alt="streamsets_parcel_activate.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/305ed707-55e5-780e-d4f0-055299704f4d.png">
配布したらアクティベート（アクティブ化）します。

<img width="911" alt="streamsets_activating.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/9bad661e-5e00-2978-a5ed-fddcd41d8226.png">

<img width="1115" alt="streamsets_activated.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/07f8d41a-fd4c-80a2-5911-1c3bf60aac2c.png">
これでアクティブ化が完了です。

# Cloudera ManagerからDataCollectorサービスを追加する

Cloudera Managerは、HiveやHDFSなどのサービスをGUIからセットアップできますが、同じ手順でDataCollectorもセットアップできます。トップページの左側の▼を押して、メニューからサービスの追加を選びます。

<img width="414" alt="cm_top.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/9587725a-9ab6-423d-8a91-52b7949e45fc.png">

<img width="1361" alt="cm_add_service.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/9a9b8cf4-6c26-91f5-657d-d42b0fd40b71.png">
下にスクロールしてみるとStreamsetsというサービスが選択できるようになっています。

<img width="1265" alt="cm_add_sc.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/7acba81f-ff68-22ac-89a2-ad12af47d7d5.png">
チェックして次に進みます。ウィザードが表示されるので、画面の指示に従って進みましょう。

<img width="1380" alt="cm_wizard1.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/7f4bb351-4c42-2040-8bf6-bdf94c336903.png">
Data Collector をインストールするホストを選択します。まだ割り当てていないので、「ホストの選択」をクリックしましょう。

<img width="1245" alt="cm_wizard2.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/9bd35a89-4ef6-0403-589f-12626e33d83a.png">
今回は１台しかないので、quickstart.clouderaをチェックします。

<img width="1379" alt="cm_wizard3.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/9796fe98-5ec2-3651-a83d-ab866ce71a69.png">
次に進みます。

<img width="1382" alt="cm_wizard5.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/e3044c2a-021f-07eb-d097-76b24464e43b.png">
設定はデフォルトのまま次に進みます。

<img width="1380" alt="cm_wizard6.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/423fe9d2-3b6a-1265-aeec-aa10f8fef873.png">
自動的にサービスが開始されます。

<img width="1238" alt="cm_wizard7.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/4a4e3d6e-b179-3401-1ee8-ad1211172076.png">
サービスが開始したら続行しましょう。

<img width="1237" alt="cm_wizard8.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/55bab459-7957-d73f-a242-ed3baa18c97c.png">
これで、指定したホストでDataCollectorサービスが実行されています。

# DataCollectorサービスの状態を確認する

トップページに戻ると、サービス一覧にStreamsetsが追加されています。StreamSetsをクリックしてサービスの画面に移動しましょう。
<img width="409" alt="cm_top2.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/0fb98009-34f9-bb9e-4fd3-631011c69870.png">

StreamSetsのメニュー
<img width="1384" alt="cm_ss.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/d8538bb6-60b0-25cb-1d89-203cb985e57a.png">


StreamsetsサービスにData Collectorがあるのでクリックしてみます。
<img width="1381" alt="cm_dc.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/8c532798-4f2d-44ea-e709-27b91110936b.png">

Data Collectorは正常に動作しているようです。メニューの「Data Collector Web UI」をクリックするとData Collectorが提供している Web UIが表示されます。

# Data Collector

Data Collectorのログイン画面です。
<img width="1380" alt="ss_top.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/f810c6e5-aa20-1d47-52b3-a4f198527b40.png">


デフォルトのユーザー名、パスワードは下記の通りです。

- admin/admin


ログインすると以下の画面が表示されました。
<img width="1386" alt="ss_top2.png" src="https://qiita-image-store.s3.amazonaws.com/0/13776/ec3b1c8b-a778-92c0-e97d-ef4661497517.png">
この画面からデータフローを作成することができます。

# 次回
次回 (http://qiita.com/kernel023/items/8a939f51cca8469e1f04) はGUIからデータのパイプラインを作成します。