HDFS Supportaiblity Improvements

Country Manager at Cloudera Japan
Mar. 15, 2019
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
1 of 45

More Related Content

What's hot

Kuduを調べてみた #dogenzakaltKuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakaltToshihiro Suzuki
Apache Impalaパフォーマンスチューニング #dbts2018Apache Impalaパフォーマンスチューニング #dbts2018
Apache Impalaパフォーマンスチューニング #dbts2018Cloudera Japan
Cloudera Manager 5 (hadoop運用)  #cwt2013Cloudera Manager 5 (hadoop運用)  #cwt2013
Cloudera Manager 5 (hadoop運用) #cwt2013Cloudera Japan
「新製品 Kudu 及び RecordServiceの概要」 #cwt2015「新製品 Kudu 及び RecordServiceの概要」 #cwt2015
「新製品 Kudu 及び RecordServiceの概要」 #cwt2015Cloudera Japan
CDHの歴史とCDH5新機能概要 #at_tokubenCDHの歴史とCDH5新機能概要 #at_tokuben
CDHの歴史とCDH5新機能概要 #at_tokubenCloudera Japan
C5.2 (Cloudera Manager + CDH) アップデート #cwt2014C5.2 (Cloudera Manager + CDH) アップデート #cwt2014
C5.2 (Cloudera Manager + CDH) アップデート #cwt2014Cloudera Japan

What's hot(20)

Similar to HDFS Supportaiblity Improvements

基礎から学ぶ超並列SQLエンジンImpala #cwt2015基礎から学ぶ超並列SQLエンジンImpala #cwt2015
基礎から学ぶ超並列SQLエンジンImpala #cwt2015Cloudera Japan
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Japan
Troubleshooting Using Cloudera Manager #cwt2015Troubleshooting Using Cloudera Manager #cwt2015
Troubleshooting Using Cloudera Manager #cwt2015Cloudera Japan
Cloudera大阪セミナー 20130219Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219Cloudera Japan
Open stack reference architecture v1 2Open stack reference architecture v1 2
Open stack reference architecture v1 2Dell TechCenter Japan
HDFS Router-based federationHDFS Router-based federation
HDFS Router-based federationNTT DATA OSS Professional Services

Similar to HDFS Supportaiblity Improvements(20)

More from Cloudera Japan

機械学習の定番プラットフォームSparkの紹介機械学習の定番プラットフォームSparkの紹介
機械学習の定番プラットフォームSparkの紹介Cloudera Japan
分散DB Apache KuduのアーキテクチャDBの性能と一貫性を両立させる仕組み「HybridTime」とは分散DB Apache KuduのアーキテクチャDBの性能と一貫性を両立させる仕組み「HybridTime」とは
分散DB Apache Kuduのアーキテクチャ DBの性能と一貫性を両立させる仕組み 「HybridTime」とはCloudera Japan
Cloudera のサポートエンジニアリング #supennightCloudera のサポートエンジニアリング #supennight
Cloudera のサポートエンジニアリング #supennightCloudera Japan
Train, predict, serve: How to go into production your machine learning modelTrain, predict, serve: How to go into production your machine learning model
Train, predict, serve: How to go into production your machine learning modelCloudera Japan
Apache Kuduを使った分析システムの裏側Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側Cloudera Japan
先行事例から学ぶ IoT / ビッグデータの始め方先行事例から学ぶ IoT / ビッグデータの始め方
先行事例から学ぶ IoT / ビッグデータの始め方Cloudera Japan

More from Cloudera Japan(20)

Recently uploaded

onewedge_companyguideonewedge_companyguide
onewedge_companyguideONEWEDGE1
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門VirtualTech Japan Inc./Begi.net Inc.
爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜
爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜VirtualTech Japan Inc./Begi.net Inc.
OSCのこれまでを振り返るとしたらこんな感じ?OSCのこれまでを振り返るとしたらこんな感じ?
OSCのこれまでを振り返るとしたらこんな感じ?VirtualTech Japan Inc./Begi.net Inc.
ハッカソン秋の陣.pdfハッカソン秋の陣.pdf
ハッカソン秋の陣.pdfssuser1bc638
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】
限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】RND cpp

HDFS Supportaiblity Improvements

Editor's Notes

  1. 小林大輔と言います。Clouderaに入社して七年目になりますが、HDFSやHBaseといったストレージ周りの技術サポートを担当しています。具体的には国内外の同僚からのエスカレーション対応や、トレーニングも行なっています
  2. まず、この中でHDFSの運用をしている人ってどれぐらいいますか?このセッションで対象としているオーディエンスは、今現在HDFSを運用している人、これから運用する予定の人、そして、我々のようなベンダーサポートがやっていることに興味がある人となります
  3. 逆に、今日話さないこと、ですけども、NameNodeのスケーリングみたいなパフォーマンスチューニングの話や入門的なアーキテクチャの話はしません。そして、Erasure CodingやFederation、Ozoneの話も一切ありません
  4. どういうことを話すかというと、HDFSについてある程度ご存知であることを前提に、なぜサポータビリティをテーマにするのかというところから入ろうと思います。で、なぜHDFSのサポータビリティなのか。HDFSのコミュニティがどのように製品改善を進めているかを紹介します。最後に、実際にサポートを提供する現場でどのような取り組みがあるのかを紹介しようと思っています
  5. それでは、なぜサポータビリティについて考えるのか、ですけども
  6. サポータビリティ、サービサビリティとも言うみたいですが、Wikipediaからの引用を簡単に訳しますと、サポータビリティとは運用担当者が製品をインストールしたり、設定、監視をして問題を特定したり、原因解明のためにデバッグやメンテナンスを行えること、と言う定義になっています
  7. もっというと、そこにソフトウェアがある以上、運用や障害から逃れられないのは現時点で紛れもない事実なわけです。となると、運用者の視点では問題が起こらないに越したことはないわけですけれども、問題が起きたとしても解決するまでの時間が短ければシステムの信頼性は向上しますよね。サポータビリティが高ければ、調査をして問題特定までの時間が短縮できるという話です。一方でソフトウェアの開発者、我々のようなベンダーサポートも含め、運用性を向上したり解決時間を短縮できることは、直接サポートや製品の満足度の向上につながることになります。つまり、障害発生時にサポータビリティが高いと、調査がスムーズに進むのでサポータビリティを高めるモチベーションがあるんですね。
  8. つまり、サポータビリティを向上する、と言うのは障害が起こりにくい製品にすること、そして障害発生時にトラブルシューティングしやすい製品にする、と言うことになります。まあ、当たり前の話ですよね
  9. では、サポータビリティを向上するために考えられるアクションですが、まずは製品の問題が発生しやすい箇所をアーキテクチャを変えるなりなんなりでどうにかして発生しにくくする、と言うのはあります。トラブルシューティングしやすい環境とはどういうものでしょう。例えば、調査に必要なコマンドを用意したり、ログメッセージをわかりやすいものにする、ステップバイステップで追えるドキュメントを用意したり、メトリクスを出して製品挙動を追いやすいようにする、というアプローチも考えられます
  10. ではHDFSについても考えてみます。HDFSはオンプレ環境でビッグデータの分散処理を行う上では、デファクトスタンダードといってもいいと思います。いろんなエコシステムのアプリケーションがHDFSを一時的にしろ最終にしろデータ保存先として想定して動いていることに異論はないと思います。つまり、HDFSが止まったり遅くなると、全てのアプリケーションに影響が出ることになります。当然障害報告を受ける我々も、HDFSの障害はクリティカルなことが多く、そのためしょっちゅう急かされたり復旧後の根本原因の追究もよく要求されます。それに、数千単位でクラスタをサポートしていると、お客様によって環境がまるで違います我々がサポートしてる環境はなので、HDFSのサポータビリティを向上するというのは、サポートや開発チームにとって最優先事項なわけですね
  11. では、具体的にどのようなアプローチで改善するか、ですけれども、当然HDFSの機能として何かしら実装するというのはあります。物によっては、Cloudera Managerなどの管理ソフトでフォローすることでより使いやすくなるということもありますね。また、三つ目ですけれども製品そのものではなく、外部のツールとして作って運用するようなやり方もあります。以降では、それぞれのアプローチについて少しずつ紹介していきたいと思います ここまでで7分
  12. では、まずはネームノードのサポータビリティ向上例についてみてみましょう
  13. ネームノードにはRPCサーバーがいて、クライアントからのリクエストをさばいています。デフォルトで8020ポートですね。ここで、RPCサーバーは全てのリクエストを一つのキューに入れる仕組みになってます。ハンドラがある程度の数走ってますんで、ハンドラはキューからリクエストをプルして処理するわけです。キューがFIFOなので、あるユーザーが山のようにリクエストを送ってしまった場合、そのリクエストが処理されるまでそれ以降のユーザーのリクエストっていうのは処理されないことになります。余談ですけれども、ネームノードはクライアントからのアクセスを処理するRPCサーバーと、データノードとかフェイルオーバーコントローラーからのリクエストを処理するRPCサーバーを分離することができます。ここにお集まりの皆さんは、当然二つのRPCサーバーを使い分けてますよね。
  14. ではこのようなケースでどういったアプローチがあるのかというと、まずはネームノードのメトリクスに出てくるアクセスユーザーに関する傾向をみます。ここで、明らかにアクセス過剰なユーザがいれば、そのユーザーが何をしているのかという確認を進めることで、解消されるかもしれません。一方で、特定のユーザーによる負荷が避けられないケースももちろんあると思います
  15. そこで実装されたのが、FairCallQueueというリクエストを公平に処理する新しいキューイングの仕組みです
  16. FairCallQueueにはいくつかの登場人物がいるので紹介します
  17. 大きく三つで、スケジューラ、キューそのもの、そしてマルチプレクサです
  18. まずスケジューラですけれども、スケジューラはクライアントからのリクエストをランクづけするために存在しています。優先度ごとに四つのキューに放り込むんですが、5秒ごとにユーザーのランクを更新しています。ざっくりいうと、リクエストの少ないユーザーの優先度を高く、リクエストが多いユーザーの優先度を低くするような動作をします。デフォルトでは、全体の半分のリクエストを占めているユーザーの優先度は最低ランクになります。次は25%から50%のリクエストを占めているユーザー、12.5%から25%、そしてその他の全てのユーザーという順に優先度が高くなっていきます キューサイズはデフォルトで dfs.namenode.handler.count x ipc.server.handler.queue.size (100)。これをだいたい四分割する
  19. 次にFairCallQueueですが、これはもうFIFOのキューがデフォルトで四つ並んでるだけですね
  20. 最後にマルチプレクサですけども、これがキューからリクエストを取り出して、実際に処理をするハンドラに渡す役割です。優先度の高いキューから順に重み付けしてリクエストを取り出して処理させていくわけですね。この実装により、悪質、意図がなかったとしても結果として悪質なリクエストを送ってしまっているユーザーによってネームノードがサチらないようにすることが期待できると思います。設定方法の詳細は、リンクを貼ってあるドキュメントを参考にしてみてください。ここまでで11分
  21. さて、次にDataNodeの方ではどのようにサポータビリティが向上しているのかをみてみたいと思います
  22. DataNodeに追加されたメンテナンスモードをご紹介します。例えばホストのメンテナンスをしたいようなケースを考えてみてください。OSのアップグレードや、セキュリティパッチの適用などがあると思うんですが、従来の典型的、安全なやり方としてはデコミッションです。しかし皆さんご存知と思いますが、デコミッション は全てのレプリカを他のノードに逃す必要があるので、かなりの時間がかかります。デコミッション のパフォーマンスはある程度チューニングできるんですが、それでも時間はかかってしまいます。単にDataNodeを停止するとどうなるかというと、10分30秒後にNameNodeがそのDataNodeを死んだとみなしてレプリカの複製を始めてしまいます。じゃあ、この間隔を延ばせばいいんですけれども、NameNodeの再起動が必要だったり、その後設定を戻し忘れるリスクもありますよね。
  23. そこで導入されたのがメンテナンスモード、メンテナンスステートとも呼びますが、DataNodeに新しい状態を追加するものです。これにより、デコミッション しなくてもブロックを余計に複製しなくてもクラスタから一時的に切り離せるようになりました
  24. まず、ユーザーはどのDataNodeをメンテナンスモードにするのかを定義するJSONファイルを用意します。ここには、DataNode名や状態の名前、IN_MAINTENANCEですね、そしてどれぐらいの時間切り離しておくのかをエポックタイムで定義します
  25. で、これを元にNameNodeにrefreshNode コマンドを発行します
  26. NameNodeはコマンドを受け取ると、対象のDataNode、ここではdn1ですが、メンテナンスモードに移行します。この時、原則としてブロックの複製は発生しません。複製が発生するケースは、最低限の複製数に満たないブロックがdn1にあった場合に、それを別のノードにコピーするだけです
  27. もし、メンテナンスモードに移行して1時間以上経過したら、NameNodeはdn1のブロックを別のノードに複製し始めます。ようはデコミッション してる時と同じですね
  28. 指定した1時間以内にメンテ作業が終わればメンテナンスモードは無事解除できます
  29. 先ほどのJSONファイルの状態をノーマルに戻して
  30. refreshNodes を発行すると
  31. NameNodeはdn1のメンテナンスモードを解除する、と。このような仕組みです
  32. が、見てわかりますがどう考えてもめんどくさいですよね。
  33. こういったものは、Cloudera Managerのような管理ソフトにやらせることで楽に運用できます
  34. Cloudera Managerを使えば、ホストを選択してメンテナンスモードに移行するというのを選べば今まで説明した操作を全部自動でやってくれます。もちろん、時間の指定も分単位でできるので圧倒的にわかりやすいと思います。こういった形で、HDFSに実装された機能を管理ツール側で補うことで、クラスタの運用性、サポータビリティをよくするように取り組んでいるわけですね。ここまでで17分
  35. さて、DataNodeの機能としてもう一つ、地味なやつを紹介したいと思います
  36. それは、書き込みパイプラインで遅くなりがちなDataNodeを特定するために使える新しいメトリクスです。書き込み中のブロックの複製はシリアルに実行されるので、そのどこかでディスク書き込みやネットワーク遅延が発生すると全体に影響を与えるんですよね。で、どこが悪いのかを特定するために明確な基準となる情報がなかったという問題がありました。このメトリクスを見れば、遅いDataNodeが一目瞭然です。具体的には、全てのDataNodeが、自分がパイプラインの最後から二つ目になった時に、最後のDataNodeへの転送時間を記録しておくという仕組みになってます。で、その移動平均がメトリクスに出ますんで、そこを見てやることで遅いDataNodeを特定しやすくなっているというわけです。すごく地味な話なんですが、こういうメトリクスを出せてるかどうかでトラブルシューティングの時間が大きく変わるので、すごく重要でいい機能だと思ってます。ここまでで19分
  37. さて、HDFSの機能や管理ツールでサポータビリティを向上する例を紹介してきました。製品機能としてできることがある一方で、周辺ツールでトラブルシューティングの手間を補うことができます。ここからは、Clouderaのサポートでどのように障害調査をしているのか、サポータビリティの向上を進めているのかを紹介してみたいと思います
  38. 我々が日々山のようにくるHDFSの障害調査をする上で使っているのが、診断データというものです。これはCloudera Managerという管理ソフトが自動、あるいは手動で収集してClouderaまで送ってくれるものでして、収集したデータが、社内ではこのように見えています。具体的にどのような情報が含まれているかというと、クラスタの全ホストのホスト名やIPアドレスといった基本情報から、CPUやメモリ、ディスクの情報、シスログなんかも収集しています。また、HDFSやYARNといったエコシステムのログや全ての設定、今使っているバージョンやパッチ番号なんかも収集しています。顧客環境がまるで違うという話をしましたが、診断データの情報をざっと見るだけでどのようなクラスタか、というオーバービューは把握することができます。で、こいつをどう使うかですが、サポータビリティ向上という観点では、二つの側面から動いている自動解析ツールがとても役立っています。設定レビューと、ログの解析ですね
  39. 例えば、NameNodeやDataNodeに独立したディスクが割り当てられているか、ですとかクラスタ内の平均ファイルサイズの確認をして small files problem が発生していないかを確認してくれます。あるいは、障害が発生しやすい設定がされていないか、JVMのオプションで推奨されないものが設定されていないか、といったレビューも自動で走っています。それに、ある程度のデータ量のクラスタでは、スナップショットがとられているかどうかもチェックしてくれます。万が一オペミスでデータを削除してしまったようなケースは冗談のように思うかもしれませんけど定期的に上がってくる障害報告でして、そのようなケースでもスナップショットを取っていればデータロストは避けられるわけです。なので、スナップショットを取っているかいないかでサポートの負荷が全然違いますので、こういったチェックも行っているわけです。で、この結果はサポートや開発だけじゃなくて、営業SEやコンサルのメンバーも見れるので、お客様とのミーティング中にアドバイスに使ったりもできるわけですね
  40. 設定の自動レビューの紹介をしましたけど、次はログの自動解析です。これは、これまでのサポートの経験から問題の兆候とみられるログの出力をあらかじめ定義しておいて、それが出ているかどうか、出ていればどれぐらいの頻度なのか、そして、そのログが何を意味するのかを教えてくれる仕組みです。これはもちろん、まだ経験の浅いエンジニアのトラブルシューティングを支援するというのは大きいんですが、ある程度経験を積んだエンジニアでも、調査を急かされていたりストレスの多い環境で調査をしていればどうしても抜けが出てきてしまうんですね。もうこれは人間ですから仕方ないです。いつもであればチェックする項目も、うっかり忘れてしまうことはあると。そのようなヒューマンエラーをカバーするためにこのような自動チェックはすごく役に立っていて、まず最初にざっと眺めるという使い方をしてもいいし、回答を出す前に漏れがないかをチェックするために念押しでチェックするわけです。あるいは、どうしても行き詰った時に自動解析の結果を眺めて、何かヒントがないかを探るという使い方もしてます。この例では、DataNodeがディスクへの書き込みに問題がある可能性があることを示すログが出ている、と。で、それがどのホストで出ているのかというのを示してくれています
  41. この例では、DataNodeでブロックのレプリカが見つからないという例外を検知しています。この原因は複数考えられるのでそれはまた別途調査が必要なわけですが、どこでどれぐらい出ているのか、というのをとっかかりにして前に進めることができるわけです
  42. 最後にこちらは問題が発生していなかった、という例ですけれども、検知されなければこのようにPASSと出るので、ああ、これは大丈夫なんだなという切り分けができます。切り分けもトラブルシューティングのステップの一環なので、このような情報はすごく貴重なわけです。このように、HDFSそれ自身ですとか、Cloudera Managerのような管理ツールでやるにはちょっと大変だったり、実装や変更のためのリードタイムを考えるとあまり現実的じゃないようなものは、インターナルのツールとして開発することでサポータビリティの向上を目指しているという話でした。ここまでで26分
  43. さて、駆け足で紹介してきましたが、最後にまとめです。この講演では、サポータビリティがなぜ重要なのか、について紹介しました。次に、なぜHDFSのサポータビリティに力を入れるのか、具体的にどういったアプローチで向上させているのか、を三つの観点から紹介しました。最後の周辺ツールというのはCloudera社内でのみ使える機能なんですが、その他の機能は今のHDFSやCloudera Managerで使えるようになっているので、もし今運用しているクラスタで使えそうであれば試してみてください。