2.1K Views
September 15, 17
スライド概要
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
Hive on Tezのベストプラクティス 2017年9月15日 大竹 隼人 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ ・自己紹介 ・Hive on Tezとは ・適用システムについて ・性能改善のために ・安定稼働のために ・最後に 2 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ ・自己紹介 ・Hive on Tezとは ・適用システムについて ・性能改善のために ・安定稼働のために ・最後に 3 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
自己紹介 大竹 隼人 2013年新卒入社 入社以来、広告ログ集計システムの開発、運用を担当 - プロジェクト案件 - システム刷新 - PoC - CI/CDの導入 4 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ ・自己紹介 ・Hive on Tezとは ・適用システムについて ・性能改善のために ・安定稼働のために ・最後に 5 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Hive on Tezとは Hiveとは HadoopエコシステムにおけるSQLエンジンの一つ ・SQLに似たHive Query Languageで大量のデータに対して高 速な処理が行える ・DWH向けのソフトウェア 6 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Hive on Tezとは Tezとは Yarn上で動くデータ処理アプリのための処理エンジン ・Yarnを使ってリソースを管理 ・データ処理アプリ向け(Hive,Pigなど) ・MapReduceの教訓を活かしてパフォーマンスの改善 7 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ ・自己紹介 ・Hive on Tezとは ・適用システムについて ・性能改善のために ・安定稼働のために ・最後に 8 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
適用したシステム 統計情報を集計するログ集計システム Hadoop MapReduce Data Pipeline Hdfs Hdfs Hiveテーブル 配信 速報用集計 システム 9 Hive on Tez Hiveテーブル Hdfs Co p yrig ht © 2 0 1 7 Sqoop Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . Oracleテーブル (OLTP) 広告主様
適用したシステム 速報用の統計情報に求められてるもの 速報用の統計情報 30分毎に最新の統計情報を提供 → 安定的に性能をだし続ける必要がある 10 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
適用したシステム 統計情報を集計するログ集計システム Hadoop MapReduce Data Pipeline Hdfs Hdfs Hiveテーブル 配信 速報用集計 システム 11 Hive on Tez Hiveテーブル Hdfs Co p yrig ht © 2 0 1 7 Sqoop Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . Oracleテーブル (OLTP) 広告主様
適用したシステム リリースまでの課題 ・性能がでない ・安定的に動かない ・再実行を考慮した作りにできない 12 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
適用したシステム リリースまでの課題 ・性能がでない ・安定的に動かない ・再実行を考慮した作りにできない 13 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ ・自己紹介 ・Hive on Tezとは ・適用システムについて ・性能改善のために ・安定稼働のために ・最後に 14 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 課題 ジョブのターンアラウンドタイムについて ・目標の性能が満たせてない ・性能が安定していない 15 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 原因確認 ジョブのボトルネックを確認 |--------------- ジョブ実行時間 -------------->| NEW 16 NEW_SAVING SUBMITTED Co p yrig ht © 2 0 1 7 ACCEPTED RUNNING Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . FINAL_SAVING FINISHING
性能改善のために 原因確認 Yarnログ 実行時間 実行時間 実行時間 実行時間 実行時間 実行時間 実行時間 17 : : : : : : : application_× State change from NEW to NEW_SAVING application_× State change from NEW_SAVING to SUBMITTED application_× State change from SUBMITTED to ACCEPTED application_× State change from ACCEPTED to RUNNING application_× State change from RUNNING to FINAL_SAVING application_× State change from FINAL_SAVING to FINISHING application_× State change from FINISHING to FINISHED Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 原因確認 クエリーのボトルネックを確認 ・EXPLAIN ・hive.tez.exec.print.summary 18 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 原因確認 EXPLAIN 19 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 原因確認 hive.tez.exec.print.summary=true 20 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 原因と対策 21 原因 対策 NameNodeの負荷でジョブのSUBMITが遅れている 負荷をかけているクエリーのログ出力を停止 リソースを確保できていない時がある 常に安定的な性能がでるようにリソースを確保 Inputデータ量が多すぎる データの再設計 Reduceタスクが遅い Reducer数の調整 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 目標実行時間を満たす並列数を求める 必要なcontainer数 = 直列時のクエリー実行時間 / 目標実行時間 実行時間 直列時のクエリー実行時間 (CPU_TIME_MILLISの合計時間) 目標実行時間 22 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 並列数から必要なリソースを求める 確保するパーセンテージ =(必要なcontainer数/ 全体のcontainer数 ) * 100 container数 全体のcontainer数 必要なcontainer数 23 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために データの再設計 一度統計用のInputに特化したテーブルを作成するこ とでInputレコード数を削減 24 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために Reducer数の調整 データ量に応じてスケールし、目標実行時間を満たせ るような並列数にする ・hive.exec.reducers.bytes.per.reducer 25 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
性能改善のために 性能をだすために必要なこと ・ボトルネックを明確にする ・リソースの確保 ・Reducerの調整 26 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ ・自己紹介 ・Hive on Tezとは ・適用システムについて ・性能改善のために ・安定稼働のために ・最後に 27 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 課題 正常終了するジョブを運用していくと、失敗 するケースが発生してきた 28 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 原因 1.Mapper数が過度に上がりリソースを取得できなかっ た 2.Mapper数が少なく1Mapperで処理できるデータ量を 超えてしまった 29 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 原因1 対象とするInputデータに対して1Mapperあたりのデー タサイズが小さすぎた為、Mapper数が過度に上がり リソースを取得できなかった 30 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 原因1 正常に終了するケース 取得できるリソース Map 1 Map 2 Map n Inputデータ 31 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 原因1 エラーになるケース 取得できるリソース Map 1 Map 2 Inputデータ Map m 32 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 原因2 対象とするInputデータに対して1Mapperあたりのデー タサイズが大きすぎた為、 Mapperで集約する際に OutOfMemoryが発生してしまっていた 33 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 原因2 正常に終了するケース Map 1 1Mapで扱えるデータ量 Map 2 Inputデータ Map n 34 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 原因2 エラーになるケース 1Mapで扱えるデータ量 Map 1 Map 2 Inputデータ 35 Map m Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 対策 運用しながら1Mapperが扱うデータサイズを調整する 36 原因 対策 Mapperが過度にあがる 1Mapperが扱う最小のデータ量を調整 tez.grouping.min-size 1Mapperが扱うデータ量が多い 1Mapperが扱う最大のデータ量を調整 tez.grouping.max-size Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
安定稼働のために 対策 Map 1 1Mapで扱えるデータ量 Map 2 Inputデータ Map n 37 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . 取得できるリソース
安定稼働のために 安定的に動かすために必要なこと ・1Mapperが扱うデータ量を設定する ・増加するデータ量に対応する設定を入れる ・実際のデータで運用してチューニングしていく ・チューニングパラメータの変更を容易にしておく 38 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ ・自己紹介 ・Hive on Tezとは ・適用システムについて ・性能改善のために ・安定稼働のために ・最後に 39 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
最後に 再認識できたこと デプロイメントサイクルを早くすることの重要性 ・早くリリースし本番環境、本番のデータで運用していくこと が重要 ・予測できない事への修正、チューニングパラメータの迅速 な変更が重要 40 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .