automation of rolling upgrade of hadoop cluster without data lost and job failures - hadoop source...

Post on 21-Mar-2017

627 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Failures

Hadoopソースコードリーディング 第22回

ヤフー株式会社

安達 寛之、山口 寛

2017年3月3日

自己紹介

2Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• 安達 寛之

• 新卒1年目

• 半年ほど前からHadoopの運用、自動化を担当

• 趣味:エレクトーン

自己紹介

3Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• 山口 寛

• 2012年入社

• 〜 2015/10 広告レポートシステム

• 2015/10 〜 Hadoop運用

• 運用ツール作成

• 運用作業の自動化

• 趣味:ビール

Hadoopのマイナーアップグレードを無停止&自動化して実施しました

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4

アジェンダ

5Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• なぜ無停止&自動化

• 実現したいこと

• どのようにアップグレードしたか

• 自動化苦労話

• まとめ

6Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

なぜ無停止にするのか?

なぜ自動化するのか?

Yahoo! JAPANのHadoopクラスタ

7Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• HDP 2.3.x + Ambari 2.2

• Master Node

• NN, RM, JN, JHS, ATS

• HiveServer2, Oozie, HttpFS

• Slave Node

• 800 DataNodes/NodeManagers

Yahoo! JAPANのHadoopクラスタ

8Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• ジョブ実行

• 2〜3万 job / day

• ストレージ利用

• 50〜60TB / day

• Total 37PB

写真: アフロ

クラスタ停止の影響

9Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• ビジネス影響大

• 数万のジョブが止まる

• データにもアクセスできない

• 運用コストもかかる

• 大量のジョブリカバリのための調整が必要

写真: アフロ

ユーザジョブへの影響を最小限に

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10

11Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

なぜ無停止にするのか?

なぜ自動化するのか?

面倒でも自動化できることは自動化するby Cay Horstmann

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12

同じ作業や時間がかかる作業が多い

13Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• HA構成されたコンポーネント

• 各コンポーネントで同じ作業を実施が必要

• 大量のSlaveNode

• 同一作業は機械的に実施

写真: アフロ

実現したい2つのこと

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14

15Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

1. ユーザ影響を出さない

2. 運用コストの削減

1. ユーザ影響を出さない

16Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• ジョブ実行、HDFSの読み書きに影響を出さない

• 提供コンポーネントの動作を保証する

※ ただしHA構成でないものを除く

2. 運用コストの削減(過去の実績)

17Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

バージョンアップ作業実績

(※ Meta情報更新を含むメジャーアップデート)

• 12時間 * 10人で実施

• 何時間も人が張り付き、同じ作業を繰り返していた

• メンテ中ユーザの利用不可

• 事前に日程調整必須(調整だけでも数週間)

• 事後にはジョブの実行順整理も必須

どのようにアップグレードしたか

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19

無停止アップグレード

処理 ストレージ

MapReduce

Hive Spark … ReplicaCheck

missing

AmbariのCustom Serviceを利用 スクリプトでコントロール

Ansibleで自動化

課題:Ambariのアップグレードでは不十分

20Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• Express Upgradeはクラスタが停止してしまう

• 当然Jobが失敗するので不可

• Rolling Upgradeでも問題がある

• HiveServer2に適用しているロードバランサを

コントロールできないため影響あり

• DataNodeリスタートを細かくコントロールができない

対応:Ambariのオペレーションを拡張

21Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• 安全なリスタートや環境に合わせた機能を追加

• Ambari Custom Serviceとして実装

• 詳細は後ほど

• Ambari CLI*を実装

• 正常性確認の強化

• データを意識した細かいコントロール

*Ambari, NN, RM等のAPIをラップした独自ツール

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22

無停止アップグレード

処理 ストレージ

MapReduce

Hive Spark … ReplicaCheck

missing

AmbariのCustom Serviceを利用 スクリプトでコントロール

Ansibleで自動化

Ansible

23Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• 構成管理ツールの一種

• 全体のアップグレードフローをコントロール

• Chefと比較して

• 学習コストが低い

• エージェントレス

• 順序制御がやりやすそう

Ansibleによるアップグレード概要図

24Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

Ansible

Ambari CLI

クラスタ管理

各コンポーネントの構成管理アップグレード順序の制御

写真: アフロ

アップグレードフロー

25Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

Preparing Registering Installing Upgrading Finalize

c.f. https://docs.hortonworks.com/HDPDocuments/Ambari-2.1.1.0/bk_upgrading_Ambari/content/_manual_minor_upgrade.html

メタデータのバックアップなど

新バージョンのレポジトリの登録

全ホストに新バージョンをインストール

サービス停止各ホストの

バージョンを更新サービス再開

ファイナライズ新バージョンとして稼働

Ansible Ambari AnsibleAmbari 手動

アップグレードフロー詳細

26Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

マスター系

• ZooKeeper

• NN, JN, JHS, ATS, RM

アプリケーション系

• HttpFS, Oozie

• HiveMeta, HiveServer2

スレーブ系

• DataNode

• NodeManager

クライアント系

• MapReduce2, Spark, YARN, HDFS, Oozie, Tez,

Hive, ZooKeeper, HCat, Pig

3時間

4時間

7.5時間

0.5時間

並列実行

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27

無停止アップグレード

処理 ストレージ

MapReduce

Hive Spark … ReplicaCheck

missing

AmbariのCustom Serviceを利用 スクリプトでコントロール

Ansibleで自動化

Ambari Custom Service

28Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• その名の通り、独自にカスタマイズしたサービスを

Ambariに追加することができる

• 運用コマンド等を追加

• NameNode F/O

• ロードバランサ In/Out

Ambari Custom Service

29Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• サービス構成xmlとPythonスクリプトを配置し、

Ambariにサービスとして追加するだけで、

既存のものと同様にUIやAPIからオペレーション可

• サーバにログインしてコマンドを打つ必要がなく、

オペミスも防げる

Ambari CLI

30Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• 運用のために独自に作成したスクリプト

• Ambari, NameNode, ResourceManagerなどの

APIをラップし、より安全なオペレーションを提供

例: HiveServer2の安全なリスタート

31Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• 各コンポーンネントごとに安全に外す手順を確立

• 実行中のジョブに影響を与えない

写真: アフロ

Load balancer

HiveServer2

Client

Wait for jobs to be finished

Established connectionJob submit

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32

無停止アップグレード

処理 ストレージ

MapReduce

Hive Spark … ReplicaCheck

missing

AmbariのCustom Serviceを利用 スクリプトでコントロール

Ansibleで自動化

DataNodeの安全なリスタート

33Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• データ配置を考慮し横一列でリスタート

• MissingBlockなどが解消されるのを待つ

MissingBlocks: 0

UnderReplicatedBlocks: 0

CorruptBlocks: 0

写真: アフロ

各コンポーネントのテストジョブを作成

34Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• HDFS, MapReduce

Hive, Hive on Tez, Pig, Spark

HttpFS, Oozie

• バージョンアップ中に常時実行するようにし、

ジョブに影響が出ていないことを確認

アップグレードの結果

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35

ほぼ無停止

36Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

コンポーネント 無停止バージョンアップ成否 備考

HDFS ○

HttpFS ○

MapReduce ○

Hive ○

Pig ○

Spark △Hive Merastoreとの接続が切れ、一部のジョブが失敗

HiveServer2 △mapreduce.tar.gzが置き替わり、checksum不一致で一部のジョブが失敗

Oozie △ HA構成ではないので数分間停止

半自動化

37Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• 大規模環境で発生した問題と対応

• NN Health Check失敗によるFailover失敗

• NNリスタート時にメモリ不足で立ち上がらない

• メモリを解放しきる前に立ち上げようとして失敗

• DNリスタート失敗

• stop/startの間にpidファイルが消えていなかったため

自動化苦労話

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38

Pre/Post Action

39Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• AmbariのAction(Start, Stop, Restart, etc.)に

Pre-StartやPost-Startが定義できなかった

• プラグインで組み込めるようになっていると嬉しい

• ambari-server/src/.../hooks/before-START

をうまく使えばできる?

動作確認

40Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

• システムテストや受け入れテストになるのでツライ

• アップグレード作業の検証に時間がかかる

• テストクラスタで数十分

• Stagingクラスタだと5時間程度

まとめ

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41

42Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

君はアップグレード自動化が得意なフレンズなんだね!

写真: アフロ

top related