Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Failures - Hadoop Source Code Reading #22 #hadoopreading

279 Views

March 08, 17

スライド概要

2017.03.03 Hadoopソースコードリーディング 第22回
https://www.eventbrite.com/e/hadoop-22-tickets-31987821435

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Failures Hadoopソースコードリーディング 第22回 ヤフー株式会社 安達 寛之、山口 寛 2017年3月3日

2.

自己紹介 • 安達 寛之 • 新卒1年目 • 半年ほど前からHadoopの運用、 自動化を担当 • 趣味:エレクトーン Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2

3.

自己紹介 • 山口 寛 • 2012年入社 〜 2015/10 2015/10 〜 • • • • 広告レポートシステム Hadoop運用 運用ツール作成 運用作業の自動化 • 趣味:ビール Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3

4.

Hadoopのマイナーアップグレードを 無停止&自動化して実施しました Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4

5.

アジェンダ • なぜ無停止&自動化 • 実現したいこと • どのようにアップグレードしたか • 自動化苦労話 • まとめ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5

6.

なぜ無停止にするのか? なぜ自動化するのか? Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6

7.

Yahoo! JAPANのHadoopクラスタ • HDP 2.3.x + Ambari 2.2 • Master Node • • NN, RM, JN, JHS, ATS HiveServer2, Oozie, HttpFS • Slave Node • 800 DataNodes/NodeManagers Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7

8.

Yahoo! JAPANのHadoopクラスタ • ジョブ実行 • 2〜3万 job / day • ストレージ利用 • • 50〜60TB / day Total 37PB 写真: アフロ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8

9.

クラスタ停止の影響 • ビジネス影響大 • • 数万のジョブが止まる データにもアクセスできない • 運用コストもかかる • 大量のジョブリカバリのための 調整が必要 写真: アフロ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9

10.

ユーザジョブへの影響を最小限に Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10

11.

なぜ無停止にするのか? なぜ自動化するのか? Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11

12.

面倒でも自動化できることは自動化する by Cay Horstmann Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12

13.

同じ作業や時間がかかる作業が多い • HA構成されたコンポーネント • 各コンポーネントで同じ作業を実施が必要 • 大量のSlaveNode • 同一作業は機械的に実施 写真: アフロ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13

14.

実現したい2つのこと Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14

15.

1. ユーザ影響を出さない 2. 運用コストの削減 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15

16.

1. ユーザ影響を出さない • ジョブ実行、HDFSの読み書きに影響を出さない • 提供コンポーネントの動作を保証する ※ ただしHA構成でないものを除く Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16

17.

2. 運用コストの削減(過去の実績) バージョンアップ作業実績 (※ Meta情報更新を含むメジャーアップデート) 12時間 * 10人で実施 • • 何時間も人が張り付き、同じ作業を繰り返していた メンテ中ユーザの利用不可 • • 事前に日程調整必須(調整だけでも数週間) • 事後にはジョブの実行順整理も必須 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17

18.

どのようにアップグレードしたか Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18

19.

無停止アップグレード Ansibleで自動化 処理 Map Reduce Hive ストレージ Spark … AmbariのCustom Serviceを利用 Replica Check missing スクリプトでコントロール Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19

20.

課題:Ambariのアップグレードでは不十分 • Express Upgradeはクラスタが停止してしまう • 当然Jobが失敗するので不可 • Rolling Upgradeでも問題がある • HiveServer2に適用しているロードバランサを コントロールできないため影響あり • DataNodeリスタートを細かくコントロールができない Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20

21.

対応:Ambariのオペレーションを拡張 • 安全なリスタートや環境に合わせた機能を追加 Ambari Custom Serviceとして実装 • • 詳細は後ほど Ambari CLI*を実装 • • • 正常性確認の強化 データを意識した細かいコントロール *Ambari, NN, RM等のAPIをラップした独自ツール Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21

22.

無停止アップグレード Ansibleで自動化 処理 Map Reduce Hive ストレージ Spark … AmbariのCustom Serviceを利用 Replica Check missing スクリプトでコントロール Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22

23.

Ansible • 構成管理ツールの一種 • 全体のアップグレードフローをコントロール • Chefと比較して • • • 学習コストが低い エージェントレス 順序制御がやりやすそう Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23

24.

Ansibleによるアップグレード概要図 Ambari CLI クラスタ管理 各コンポーネントの構成管理 アップグレード順序の制御 Ansible 写真: アフロ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24

25.

アップグレードフロー Ansible Ambari Ambari Ansible 手動 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 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25

26.

アップグレードフロー詳細 • ZooKeeper 3時間 マスター系 • NN, JN, JHS, ATS, RM • HttpFS, Oozie 4時間 アプリケー ション系 並列実行 7.5時間 • HiveMeta, HiveServer2 • DataNode スレーブ系 • NodeManager • MapReduce2, Spark, YARN, HDFS, Oozie, Tez, 0.5時間 クライ アント系 Hive, ZooKeeper, HCat, Pig Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26

27.

無停止アップグレード Ansibleで自動化 処理 Map Reduce Hive ストレージ Spark … AmbariのCustom Serviceを利用 Replica Check missing スクリプトでコントロール Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27

28.

Ambari Custom Service • その名の通り、独自にカスタマイズしたサービスを Ambariに追加することができる • 運用コマンド等を追加 • NameNode F/O • ロードバランサ In/Out Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28

29.

Ambari Custom Service • サービス構成xmlとPythonスクリプトを配置し、 Ambariにサービスとして追加するだけで、 既存のものと同様にUIやAPIからオペレーション可 • サーバにログインしてコマンドを打つ必要がなく、 オペミスも防げる Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29

30.

Ambari CLI • 運用のために独自に作成したスクリプト • Ambari, NameNode, ResourceManagerなどの APIをラップし、より安全なオペレーションを提供 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30

31.

例: HiveServer2の安全なリスタート Client Job submit Established connection Load balancer Wait for jobs to be finished HiveServer2 写真: アフロ • 各コンポーンネントごとに安全に外す手順を確立 • 実行中のジョブに影響を与えない Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31

32.

無停止アップグレード Ansibleで自動化 処理 Map Reduce Hive ストレージ Spark … AmbariのCustom Serviceを利用 Replica Check missing スクリプトでコントロール Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32

33.

DataNodeの安全なリスタート MissingBlocks: 0 UnderReplicatedBlocks: 0 CorruptBlocks: 0 写真: アフロ • データ配置を考慮し横一列でリスタート • MissingBlockなどが解消されるのを待つ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33

34.

各コンポーネントのテストジョブを作成 • HDFS, MapReduce Hive, Hive on Tez, Pig, Spark HttpFS, Oozie • バージョンアップ中に常時実行するようにし、 ジョブに影響が出ていないことを確認 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34

35.

アップグレードの結果 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35

36.

ほぼ無停止 コンポーネント 無停止バージョンアップ成否 備考 HDFS ○ HttpFS ○ MapReduce ○ Hive ○ Pig ○ Spark △ Hive Merastoreとの接続が切れ、 一部のジョブが失敗 HiveServer2 △ mapreduce.tar.gzが置き替わり、 checksum不一致で一部のジョブが失敗 Oozie △ HA構成ではないので数分間停止 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36

37.

半自動化 • 大規模環境で発生した問題と対応 • NN Health Check失敗によるFailover失敗 • NNリスタート時にメモリ不足で立ち上がらない • メモリを解放しきる前に立ち上げようとして失敗 DNリスタート失敗 • • stop/startの間にpidファイルが消えていなかったため Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37

38.

自動化苦労話 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38

39.

Pre/Post Action • AmbariのAction(Start, Stop, Restart, etc.)に Pre-StartやPost-Startが定義できなかった • プラグインで組み込めるようになっていると嬉しい • ambari-server/src/.../hooks/before-START をうまく使えばできる? Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39

40.

動作確認 • システムテストや受け入れテストになるのでツライ • アップグレード作業の検証に時間がかかる • • テストクラスタで数十分 Stagingクラスタだと5時間程度 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40

41.

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

42.

君はアップグレード自動化が得意な フレンズなんだね! 写真: アフロ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 42