HDFS中的内存存储支持-Apache Hadoop 2.9.0
Apache Hadoop 2.9.0
原文:
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/MemoryStorage.html
(假如转发,请标明出处)
详情
HDFS支持写入 Data Nodes管理的off-heap memory。Data Nodes将异步地将内存中的数据刷到磁盘,从而从性能敏感的IO路径中删除昂贵的磁盘IO和校验和计算,因而我们称这种写入为推迟持久( Lazy Persist)写入。HDFS为推迟持久写入提供了尽力持久化保证。在将副本持久化到磁盘之前,假如节点重新启动,可能会出现罕见的数据丢失。应使用程序可以在推迟和持久化之间权衡,选择用推迟持久写入会减少推迟。
这个特性是从Apache Hadoop 2.6.0开始的,并在 Jira HDFS-6581下开发。
目标用场景是以低推迟写入相对较低数据量(根据可使用内存从几GB到几十GB )的应使用程序。内存存储适使用于在集群内运行并与HDFS数据节点配置在一起的应使用程序。我们已经观察到,网络复制的推迟开销抵消了写入内存的好处。
假如内存不足或者未配置,用推迟持久写入的应使用程序将返回DISK存储继续工作。
管理员配置
本节列举应使用程序在集群中开始用这项功能之前所需要的管理步骤。
限制使用于内存中副本的RAM
首先决定要专使用于内存中副本可使用的内存量。设置 hdfs-site.xml中的 dfs.datanode.max.locked.memory 。这个跟集中缓存管理(Centralized Cache Management)特性中的设置是一样的。 Data Node 必需保证使用于推迟持久化写和集中缓存管理加起来的内存不会超过dfs.datanode.max.locked.memory配置的内存。
例如,为放置副本到内存来保留32G内存
dfs.datanode.max.locked.memory
34359738368
内存并不是在Data Node启动时分配的。
在相似Unix系统中,Data Node中的 “locked-in-memory size” ulimit (ulimit -l)也需要调整(请查看相关部分 OS Limits )。设置此值时,请记住您还需要内存中的空间来解决其余事情,例如Data Node 和应使用程序JVM堆以及操作系统页缓存,假如在Data Node上还有一个YARN Node Manager进程也在运行,则 YARN containers也需要占使用一部分内存。
在Data Nodes上设置RAM Disks
在每个Data Node上初始化一个RAM disk。RAM Disk 的选择允许在Data Node进程重新启动时实现更好的数据持久性。以下设置将适使用于大多数Linux发行版,目前不支持在其余平台上用RAMDisk 。
选择tmpfs (vs ramfs)
Linux支持2种类型的RAM disks – tmpfs和ramfs。tmpfs的大小受Linux内核的限制,而ramfs的增长会填满所有可使用的系统内存。tmpfs有一个缺点,由于它的内容可以在内存压力下交换到磁盘。然而,许多性能敏感型部署在禁使用交换(swapping )的情况下运行,因而我们不希望这在实践中成为问题。
HDFS目前只支持用tmpfs部分,支持ramfs的部分正在进行当中 (See HDFS-8584)。
挂载RAM Disks
用Unix mount 命令来挂载 RAM Disk分区。例如,在/mnt/dn-tmpfs/下,挂载一个32GB tmpfs分区:
sudo mount -t tmpfs -o size=32g tmpfs /mnt/dn-tmpfs/
建议在/ etc / fstab中创立一个entry,以便在节点重新启动时自动重新创立RAM Disk 。另一个选择是用/ dev / shm下的子目录,默认情况下,这是在大多数Linux发行版上可使用的tmpfs挂载。确保挂载的大小大于或者等于 配置的dfs.datanode.max.locked.memory ,否则将在/ etc / fstab中覆盖它。不建议每个Data Node用多个tmpfs分区进行推迟持久写入。
在RAM_DISK存储类型中标记tmpfs卷
在hdfs-site.xml中通过配置dfs.datanode.data.dir来在RAM_DISK存储类型中标记tmpfs 目录。例如:在一个 Data Node中有3个硬盘卷/grid/0, /grid/1 and /grid/2,并且有一个tmpfs挂载 /mnt/dn-tmpfs,则dfs.datanode.data.dir必需这样设置:
dfs.datanode.data.dir
/grid/0,/grid/1,/grid/2,[RAM_DISK]/mnt/dn-tmpfs
这一步骤至关重要。假如没有RAM _ DISK标记,HDFS会将tmpfs卷视为非易失性存储,并且不会将数据保存到永久存储。重新启动节点时将丢失数据。
保证存储策略可使用
保证全局的配置中存储策略可使用开关打开,默认是可使用状态。
应使用程序用
用 LAZY_PERSIST 存储策略
应使用程序指示HDFS可以用Lazy _ Persist存储策略对文件用推迟持久写入。设置策略不需要管理权限,可以通过以下三种方式之一进行设置。
针对目录调使用hdfs storagepolicies 命令
针对一个目录设置策略会导致这个目录下所有新创立的文件都会应使用这一策略。hdfs storagepolicies命令可以像存储策略文档中形容的那样设置策略。
hdfs storagepolicies -setStoragePolicy -path -policy LAZY_PERSIST
针对目录,调使用setStoragePolicy 方法
从 Apache Hadoop 2.8.0,开始,应使用程序可以在程序中调使用 FileSystem.setStoragePolicy来设置策略。
fs.setStoragePolicy(path, “LAZY_PERSIST”);
为新文件传递 CreateFlag为 LAZY_PERSIST
当应使用程序用 FileSystem#create API来创立一个新文件时,可以传递 CreateFlag#LAZY_PERSIST。例如:
FSDataOutputStream fos =
fs.create(
path,
FsPermission.getFileDefault(),
EnumSet.of(CreateFlag.CREATE, CreateFlag.LAZY_PERSIST),
bufferLength,
replicationFactor,
blockSize,
null);
———-全文完————-
备注:
HDFS中的内存存储支持:Memory Storage Support in HDFS
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » HDFS中的内存存储支持-Apache Hadoop 2.9.0