ablog

不器用で落着きのない技術者のメモ

HDFS キャッシング

HDFS のブロックはファイルシステムに保存されるため、Linux カーネルのページキャッシュを自然に使っていたが、ユーザー空間から制御できないため、HDFSキャッシング(Hadoop 2.3.0 以降)という機能がある。

HDFS上のデータの読み書きの際には、ディスクから読み出されたデータは、Linuxカーネル内のページキャッシュ(原文ではBuffer cacheとなってます)にキャッシュされます。(これにより毎回ディスクアクセスを避けることが期待できます)

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

Hadoop 2.3.0 以降には「HDFSキャッシング」と呼ばれる、HDFSにキャッシュ機構が搭載されています。

(中略)

HDFSの中央キャッシュ管理は、ユーザが明示的に指定したパスを、HDFSによって明示的にキャッシュする仕組みです。ネームノードはブロックをディスクに持つデータノードと通信して、そのブロックを「オフピーク (off-heap)」キャッシュにキャッシュします。

オフピークキャッシュは各データノードにある、JVMVMヒープ対象外のメモリ領域です。ユーザーがコマンドからキャッシュに登録するパスを指定することにより、ブロックがこの領域にキャッシュされます。

HDFSの新しい機能 - HDFSキャッシング | Tech Blog

https://www.ibm.com/support/knowledgecenter/ja/SSPT3X_4.1.0/com.ibm.swg.im.infosphere.biginsights.dev.doc/doc/biga_hdfscache.html を参考に手元の EMR(emr-5.17.0) のマスターノードで、hdfs-site.xml に dfs.client.mmap.enabled や dfs.datanode.max.locked.memory のエントリはなく、キャッシュ・プールも無かったので、意図的に使わないと使われない模様。

$ hdfs cacheadmin -listPools
Found 0 results.