热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop3.2.0HDFS中的内存存储支持

介绍管理员配置限制用于内存中副本的RAM在数据节点上设置RAM磁盘选择tmpfs(vsramfs)安装RAM磁盘使用RAM_DISK存储类型标记tmpf
  • 介绍
  • 管理员配置
  • 限制用于内存中副本的RAM
  • 在数据节点上设置RAM磁盘
    • 选择tmpfs(vs ramfs)
    • 安装RAM磁盘
    • 使用RAM_DISK存储类型标记tmpfs卷
    • 确保已启用存储策略
  • 应用用法
  • 使用LAZY_PERSIST存储策略
    • 为目录调用hdfs storagepolicies命令
    • 为目录调用setStoragePolicy方法
    • 通过LAZY_PERSIST CreateFlag获取新文件

介绍

HDFS支持写入由数据节点管理的堆外内存。数据节点将异步刷新内存中的数据到磁盘,从而从性能敏感的IO路径中删除昂贵的磁盘IO和校验和计算,因此我们称这种写入为Lazy Persist写入。HDFS为Lazy Persist Writes提供尽力而为的持久性保证。如果在将副本持久保存到磁盘之前重新启动节点,则可能会丢失数据。应用程序可以选择使用Lazy Persist Writes来换取一些持久性保证,以减少延迟。

此功能从Apache Hadoop 2.6.0开始提供,并在Jira HDFS-6581下开发。

目标用例是可以通过低延迟从写入相对较少量的数据(从几GB到几十GB,具体取决于可用内存)中受益的应用程序。内存存储适用于在群集内运行并与HDFS数据节点并置的应用程序。我们观察到网络复制的延迟开销否定了写入内存的好处。

如果内存不足或未配置,使用Lazy Persist Writes的应用程序将继续工作,退回DISK存储。

管理员配置

本节列举了应用程序开始使用群集中的功能之前所需的管理步骤。

限制用于内存中副本的RAM

首先确定专用于存储在内存中的副本的内存量。在hdfs-site.xml中相应地设置dfs.datanode.max.locked.memory。这与集中式缓存管理功能使用的设置相同。数据节点将确保Lazy Persist Writes和Centralized Cache Management使用的组合内存不超过dfs.datanode.max.locked.memory中配置的数量。

例如,为内存中的副本保留32 GB

dfs.datanode.max.locked.memory34359738368

启动时,数据节点不会分配此内存。

在类似Unix系统上,还需要增加数据节点用户的“locked-in-memory size”ulimit(ulimit -l)以匹配此参数(请参阅有关操作系统限制的相关部分)。设置此值时,请记住内存中还需要其他内容空间,例如数据节点和应用程序JVM堆以及操作系统页面缓存。如果在与数据节点相同的节点上运行YARN节点管理器进程,则还需要YARN容器的内存。

在数据节点上设置RAM磁盘

在每个数据节点上初始化RAM磁盘。RAM磁盘的选择允许跨数据节点进程重启更好的数据持久性。以下设置适用于大多数Linux发行版。目前不支持在其他平台上使用RAM磁盘。

选择tmpfs(vs ramfs)

Linux支持使用两种RAM磁盘--tmpfs和ramfs。tmpfs的大小受Linux内核的限制,而ramfs增长以填充所有可用的系统内存。tmpfs有一个缺点,因为它的内容可以在内存压力下交换到磁盘。但是,许多对性能敏感的部署在禁用交换的情况下运行,因此我们不希望这在实践中成为问题。

HDFS目前支持使用tmpfs分区。正在进行对添加ramfs的支持(参见HDFS-8584)。

安装RAM磁盘

使用Unix mount命令挂载 RAM磁盘分区。例如,在/ mnt / dn-tmpfs /下安装一个32 GB的tmpfs分区

sudo mount -t tmpfs -o size=32g tmpfs /mnt/dn-tmpfs/

建议您在/ etc / fstab中创建一个条目,以便在节点重新启动时自动重新创建RAM磁盘。另一种选择是使用/ dev / shm下的子目录,这是一个默认情况下可用于大多数Linux发行版的tmpfs挂载。确保mount的大小大于或等于dfs.datanode.max.locked.memory设置,否则在/ etc / fstab中覆盖它。建议不要为每个数据节点使用多个tmpfs分区进行Lazy Persist Writes。

使用RAM_DISK存储类型标记tmpfs卷

使用RAM_ISK存储类型通过hdfs-site.xml中的dfs.datanode.data.dir配置设置标记tmpfs目录。例如,在具有三个硬盘卷/ grid / 0,/ grid / 1和/ grid / 2以及tmpfs mount / 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 Writes用于具有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");

通过LAZY_PERSIST CreateFlag获取新文件

在使用FileSystem#create API 创建新文件时,应用程序可以传递CreateFlag#LAZY_PERSIST。例如

FSDataOutputStream fos =fs.create(path,FsPermission.getFileDefault(),EnumSet.of(CreateFlag.CREATE, CreateFlag.LAZY_PERSIST),bufferLength,replicationFactor,blockSize,null);


推荐阅读
  • 尾部|柜台_Java并发线程池篇附场景分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java并发-线程池篇-附场景分析相关的知识,希望对你有一定的参考价值。作者:汤圆个人博客 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • 多线程补充(一)JVM内存结构 VS Java内存模型 VS Java对象模型
    一:Java内存结构参考:https:www.zhihu.comquestion64586462answer576543433内存结构࿱ ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Windows简单部署Exceptionless
    部署准备Elasticsearch、Exceptionless.API、Exceptionless.UI、URLRewrite、.NET运行时 1、安装ElasticSearch1 ... [详细]
  • 微信公众号:内核小王子关注可了解更多关于数据库,JVM内核相关的知识;如果你有任何疑问也可以加我pigpdong[^1]jvm一行代码是怎么运行的首先,java代码会被编译成字 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 大厂首发!思源笔记docker
    JVMRedisJVM面试内存模型以及分区,需要详细到每个区放什么?GC的两种判定方法GC的三种收集方法:标记清除、标记整理、复制算法的 ... [详细]
author-avatar
只为_sunny
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有