641 Views
December 06, 19
スライド概要
第27回 Hadoopソースコードリーディング で発表しました。
HDFSのスケーリングテストツールのDynamometerに関する資料です。
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
YAHOO! JAPAN Dynamometerによる 大規模HDFSのシミュレーション ヤフー株式会社 浅沼孝信 2019年12月4日
自己紹介 名前 • 浅沼 孝信 業務履歴 • 2012年 新卒入社 • Hadoopクラスタの構築やOSS開発など • 2018年 Hadoopコミッター就任 2 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
もくじ • 背景 • Dynamometerとは • Yahoo! JAPANにおける実験例 • 注意点など 3 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
もくじ • 背景 • Dynamometerとは • Yahoo! JAPANにおける実験例 • 注意点など 4 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
大規模なシステムのテストは難しい • 大抵テスト環境は本番環境に比べて小規模であり スケーリングした時に生じる問題がテスト環境では 再現できない • テスト環境の規模を本番環境に揃えるのはコストがかかり 現実的では無い 5 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
大規模なHDFSの場合 • 大規模なHDFSではNameNodeがボトルネックになる • NameNodeが全てのメタデータをメモリ上に保持している • NameNodeが全てのHDFSのリクエストを受け付けている • クラスタ全体のパフォーマンスはNameNodeのスペックや設定 (Hadoop Configs, Javaの起動パラメータ)に左右されやすい • NameNodeにフォーカスしたスケーリングテストだけでも行いたい 6 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
もくじ • 背景 • Dynamometerとは • Yahoo! JAPANにおける実験例 • 注意点など 7 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
Dynamometerとは LinkedInが開発したNameNodeのスケーリングテストツール 2019年7月 Hadoopコミュニティへ寄贈 (HDFS-12345) ① YARN上でHDFSをシミュレーション • 仮想NameNodeと仮想DataNodeをそれぞれ1つのYARNコンテナとして起動 ② HDFSクライアントのワークロードをauditログからリプレイ • YARN上でHDFSクライアントを立ち上げ、①のシミュレートしたHDFSに対して リクエストを実行 8 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
① HDFSのシミュレーション Dynamometerを動かすためのHadoopのホストクラスタを用意 YARN (host cluster) HDFS (host cluster) 9 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
① HDFSのシミュレーション シミュレートしたいHDFSのfsimageをホストクラスタにアップロード YARN (host cluster) FsImage HDFS (host cluster) 10 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
① HDFSのシミュレーション fsimageからblockリスト(HDFSのblockのメタ情報)を生成 (Dynamometerのジョブ) YARN (host cluster) FsImage Block Listings HDFS (host cluster) 11 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
① HDFSのシミュレーション fsimageをロードして仮想NameNodeが起動、blockリストから複数の仮想DataNodeが起動 シミュレートしたいHDFSの起動が完了 YARN (host cluster) Simulated NameNode YARN Container Block Report Simulated DataNode YARN Container FsImage Block Listings HDFS (host cluster) 12 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
② ワークロードのリプレイ リプレイしたいauditログをホストクラスタのHDFSにアップロード YARN (host cluster) Simulated NameNode YARN Container Block Report Simulated DataNode YARN Container FsImage Block Listings Audit Logs HDFS (host cluster) 13 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
② ワークロードのリプレイ auditログの数だけHDFSクライアントが起動してauditログの内容をリプレイする YARN (host cluster) HDFS RPC Simulated HDFS Client YARN Container Simulated NameNode YARN Container Block Report Simulated DataNode YARN Container FsImage Block Listings Audit Logs HDFS (host cluster) 14 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
外部のNameNodeでもOK YARN (host cluster) HDFS RPC Simulated HDFS Client YARN Container Simulated DataNode YARN Container NameNode FsImage Real Host Block Report FsImage Block Listings Audit Logs HDFS (host cluster) 15 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
外部NameNodeのメリット・デメリット メリット • ホストが固定されているのでモニタリングしやすい • sshログインできるのでデバッグしやすい • ログを収集しやすい • YARNのオーバーヘッドがない デメリット • 外部NameNodeの管理コストが増える • リプレイジョブをリトライする時にFSImageを手動でリセットする必要がある 本格的に実験するときは外部NameNodeの方がおすすめ (個人的見解) 16 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
auditログの分割について • Dynamometerではauditログのファイルの数だけ仮想hdfsクライアントが立ち上がる • ただしデフォルトのauditログは毎時(hourly)の時系列で分割されているだけなので Dynamometerのリプレイジョブを動かすには効率が悪い 2019-12-01 12:34:56,000 INFO FSNamesystem.audit: allowed=true ugi=alice ip=/XXX.XXX.XXX.XXX cmd=getfileinfo src=/path/to/file dst=null perm=null proto=rpc • リクエスト元IP(赤字の部分)でログの分割を行うとユーザーごとに仮想クライアントが立 ち上がりリクエストが分散されるので、より本番環境に近いシミュレーションを行うこと ができる 17 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
例: Hiveを用いたauditログの分割
• auditログ用のHiveのテーブルを作成
• DISTRIBUTE BY句を使ってIPごとに分散させたログデータを作成
CREATE EXTERNAL TABLE audit_log_org (
log_date STRING,
ugi STRING,
ip STRING,
cmd STRING,
src STRING,
dst STRING,
perm STRING,
proto STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION "/data/audit_log_org";
INSERT INTO TABLE audit_log_distributed
SELECT * FROM audit_log_org
DISTRIBUTE BY ip SORT BY log_date;
CREATE TABLE audit_log_distributed (
log_date STRING,
ugi STRING,
ip STRING,
cmd STRING,
src STRING,
dst STRING,
perm STRING,
proto STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION "/data/audit_log_distributed";
18 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
Dynamometerの良いところ 低コストでテストができる • 実際のクラスタの5%以下のハードウェアでシミュレートできる 仮想DataNodeは実データを持たない (擬似ブロックを使う) 再現性の高さ • 本番環境のNameNodeを忠実に再現 • 実際のワークロードをリプレイ 19 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
もくじ • 背景 • Dynamometerとは • Yahoo! JAPANにおける実験例 • 注意点など 20 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
RPCのHandlerの数のチューニング NameNode RPC Handlerとは • クライアントのHDFSリクエストを貯めるためのキュー(CallQueue)から命令を1つずつ 取得して処理を行うワーカー • dfs.namenode.handler.countで数を調整できる RPC Handlerの推奨値 (オライリーのHadoop Operationsより) • 20 x log2(クラスタのDataNode数) ※ただし最大でも200 Yahoo! JAPANのHDFS • 本番の設定値: dfs.namenode.handler.count=40 • 推奨の設定値: dfs.namenode.handler.count=200 推奨値にして本当に効果があるかDynamometerを使ってシミュレーションを行う 21 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
実験結果 ピーク時のCallQueueLength(キューのたまり具合)で比較 推奨値(200)の方がわずかに改善 dfs.namenode.handler=40 dfs.namenode.handler=200 22 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
今後やりたいこと • Javaのチューニング • JDK 8 vs JDK 11 • GCアルゴリズムの比較 • CallQueueのアルゴリズムを比較 • FIFO(Default) vs Fair Call Queue • Hadoopの新バージョンのテスト 23 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
Dynamometerへのコントリビューション HDFS-14281: Dynamometer Phase 2 (親JIRA) Yahoo! JAPANからのコントリビューション • 報告10件、解決8件 (インターン生による貢献含む) • 主に3系のHadoopを動かすためのバグ修正などで貢献 24 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
もくじ • 背景 • Dynamometerとは • Yahoo! JAPANにおける実験例 • 注意点など 25 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
注意点など Dynamometerを動かすのにもそこそこリソースが必要 • NameNodeは本番のNameNodeとなるべく同じ筐体で動かしたい • 仮想DataNode1台あたり約2GBのメモリを消費する • Yahoo! JAPANのテストでは1.5TBぐらいYARNのメモリを使用 他にもライトなツールが存在するそちらも検討する • NNThroughputBenchmark • TestDFSIO • 自作のテストジョブなど 26 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
注意点など 実験は時間がかかる • Yahoo! JAPANの場合はシミュレートしたいHDFSを立ち上げるだけで90分 • リプレイジョブは数時間 (※リプレイジョブを早送りする機能もある) 円滑にテストを行うために • 実験環境の構成管理・自動化を行う • 実験計画を立てる • Prometheusなどを使ってメトリクスを取る • RPCに関する詳細なメトリクスを出力する設定を有効にする rpc.metrics.quantile.enable=true rpc.metrics.percentiles.intervals=60,300 27 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN
まとめ • Dynamometerは本番環境に忠実なHDFSのスケー リングテストを低コストに行うことができるツール • Yahoo! JAPANでも大規模HDFSクラスタの設定値 のチューニングに活用し始めている • All contributions are welcome! 28 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 YAHOO! JAPAN