1. 前言

利用内存已是大势所趋。Spark的基于内存的计算就是一个很好的利用内存的例子。hadoop现在的架构也在做调整,学习spark的思路。架构设计上也越来越多的利用内存。例如在hadoop 2.6以后,HDFS就开始支持将数据存到内存了。本文对该特性做一些介绍。

主要基于hadoop 2.7.2的文档:Memory Storage Support in HDFS

2. 介绍

HDFS也支持往datanode管理的堆外内存写数据了。datanode会异步地将这些数据flush到磁盘上。这样的写入过程称作“Lazy Persist write"。如果一个node在异步持久化到磁盘的时候重启是有可能丢数据的。

下图是Lazy Persist write的客户端的datanode之间的交互过程(client和datanode在一起)

2.1 应用场景

关于该功能的使用场景官方也有说明:

The target use cases are applications that would benefit from writing relatively low amounts of data (from a few GB up to tens of GBs depending on available memory) with low latency. Memory storage is for applications that run within the cluster and collocated with HDFS Data Nodes. We have observed that the latency overhead from network replication negates the benefits of writing to memory.

也就是说,主要是用于写相对少量(这里的少量指的是几G或者十几G的大小)的数据。而且使用时需要注意内存存储的数据要写本地的datanode。否则网络开销会抵消写内存带来的好处。