HiveとImpalaにワークフロースケジューラーを入れてみた(前編)

こんにちは、CyberZのエンジニアの遠藤です。

もうすっかり秋めいてきたので、温泉に行きたい今日このごろです。

さて、今回は社内にあるデータ分析用基盤のHadoop環境にワークフロースケジューラーを導入したので、前編と後編に分けてCyberZでの導入事例を書きたいと思います。

弊社ではさまざまなデータの分析やレポートデータの集計にHadoopを利用しています。 主に、HiveとImpalaを用いており、日次や週次、月次で集計バッチを回していました。

これまで、特にワークフロースケジューラーは導入しておらず、Jenkinsを利用してバッチの管理や実行を制御していました。 しかし、Jenkinsではジョブ間の依存関係の制御が難しく、集計バッチを増やす際の追加が若干面倒であったり、障害等で集計が失敗したときのリトライ制御が難しいなど、運用上の問題や負担がいくつかありました。

2015年の夏頃にワークフロースケジューラーの導入を検討しはじめたのですが、ちょうどよいタイミングでCyberAgentが開発し、Amebaで運用を行っている「Patriot-workflow-scheduler」(以下、「Patriot」と記載)というワークフロースケジューラーがOSS化されたので、利用することにしました。

選定の大きな理由としては、

  1. 依存関係が張りやすい

  2. 信頼性が高い

  3. その気になれば柔軟に機能拡張を行える

  4. 導入PJでAmebaに所属していた人間が多く、Patriotを利用した集計バッチの追加や運用を行っていたため学習コストが低かった

という点で選択しました。選定理由については後編で詳しく書きたいと思います。

現在では、基本的な日次や週次の集計バッチはPatriotへ移行が完了しております。 リトライの仕組みがあることや、依存関係の制御が楽な点など、Jenkins時代に比べると運用管理の負荷が減りました。

Patriot自体の説明や思想、導入手順については、Amebaの善明さんの記事が詳しいのでそちらを読んでみてください。 インストールはgemで一発なので簡単でいいですね。

さて、CyberZでどのようにPatriotを利用しているかについて説明します。

f:id:cyberz-dev-writer:20151110144131j:plain

  1. CyberZにはいくつかのHadoopクラスタがあるため、集計用クラスタにdistcpでデータを集めます。

  2. distcpが完了後に中間テーブル作成を行います

  3. 中間テーブル作成が完了したら、ImpalaとHiveでそれぞれ集計を行います。

  4. Hive側が集計完了したらJenkinsをキックし、別システムのバッチを起動させます。

以上の制御をCyberZではPatriotにて行っております。 ジョブの数としては数十個程度ですが、今後、ジョブの増加や依存関係の変更が発生しても、それほど負担なく変更ができると考えています。

なお、CyberZではBIツールとしてTableauを利用しています。

現時点ではImpalaの集計完了後の時間を見計らって、TableauがImpalaからデータ抽出を行っています。 こちらについても今後はPatriotでスケジューリングを行う予定です。

以上、CyberZにおけるPatriot導入の前編をお送りしました。

後編ではPatriotの選定理由と冗長化構成について書きたいと思います。