Tech Blog 〜ぞうの日記

HadoopやLinux関連の技術的な内容の紹介です

HDFSが高速に?キャッシュメカニズムの追加

本日公開された HDFS-4949 のJIRAは、HDFSにインメモリキャッシュ機構を導入しようというものです。

Jiraに添付されているドキュメントより興味深い点を抜粋してみます:Centralized cache management

 

問題点1:複数ノードでのキャッシュの利用

HDFS上のデータの読み書きの際には、ディスクから読み出されたデータは、Linuxのカーネル内のページキャッシュ(原文ではBuffer cacheとなってます)にキャッシュされます。(これにより毎回ディスクアクセスを避けることが期待できます)
しかし、ページキャッシュの情報はカーネルが持っており、ユーザーランドに公開されているわけではありません。つまり、上位のフレームワークの視点から見ると、タスクをどのノードに配置するかのために公開されているわけではないということです。(当たり前ですが、、)
その結果、HDFSにおいてはブロックの複製数が3だとすると、タスクが配置されるノードが異なる場合、3つのデータノードそれぞれのページキャッシュに 格納され、3倍のメモリが消費される可能性があります。また、せっかくページキャッシュにデータをキャッシュしているノードがあるにもかかわらず、スケ ジューラはページキャッシュにない(つまりまだディスクから読み出していない)ノードを選択してしまうことになります。

 

問題点2:低優先度のジョブによるキャッシュへの悪影響

 次に、大規模なシングルパスかつ低優先度のワークロードが、高い優先度のジョブのキャッシュを消しさってしまうことになり得ます。ページキャッシュ はカーネルのLRUにより制御されているので、ユーザーランドからの制御を行うのは難しいです。となると、せっかくキャッシュがあったまったのにも関わら ず、どうでもいい(?)ジョブがキャッシュを乱してしまうことから、プロダクションで使用する場合のSLAに悪影響を与え、ジョブの終了時間が増えること に繋がります。

 

 

この新しいキャッシュ機構は、上記の問題を改善するために、HDFSの元の仕組みは大きく変更せずに追加しようとしているものです。

まだ詳細までは追えていませんが、この実装はかなりHDFSの高速化に繋がることが期待できるので楽しみですね!

 

2013/7/5追記:

@oza_86さんにコメントいただいたので追加しておきます。HDFS-4949の元になっている論文:
http://www.cs.berkeley.edu/~istoica/classes/cs294/11/papers/pacman-draft.pdf

 

※オリジナルはhttp://linux.wwing.netです。状況をみながらはてなに移行するかもしれません