[hadoop3.x]HDFS中的内存存储支持(七)概述

简介: [hadoop3.x]HDFS中的内存存储支持(七)概述

历史文章

[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS

[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS

[hadoop3.x系列]Hadoop常用文件存储格式及BigData File Viewer工具的使用(三)

✨[hadoop3.x]新一代的存储格式Apache Arrow(四)

[hadoop3.x]HDFS存储类型和存储策略(五)概述

[hadoop3.x]HDFS存储策略和冷热温三阶段数据存储(六)概述

[hadoop3.x]HDFS中的内存存储支持(七)概述

🍑 1.1 💃HDFS中的内存存储支持💃

1.1.1 💃介绍💃

l HDFS支持写入由DataNode管理的堆外内存

l DataNode异步地将内存中数据刷新到磁盘,从而减少代价较高的磁盘IO操作,这种写入称之为懒持久写入

l HDFS为懒持久化写做了较大的持久性保证。在将副本保存到磁盘之前,如果节点重新启动,有非常小的几率会出现数据丢失。应用程序可以选择使用懒持久化写,以减少写入延迟

该特性从ApacheHadoop 2.6.0开始支持。

l 比较适用于,当应用程序需要往HDFS中以低延迟的方式写入相对较低数据量(从几GB到十几GB(取决于可用内存)的数据量时

l 内存存储适用于在集群内运行,且运行的客户端与HDFS DataNode处于同一节点的应用程序。使用内存存储可以减少网络传输的开销

l 如果内存不足或未配置,使用懒持久化写入的应用程序将继续工作,会继续使用磁盘存储。

1.1.2 💃配置内存存储支持💃

接下来,我们来了解下在HDFS中使用该功能,需要有哪些操作。

1.1.2.1 💃设置能够使用的内存空间💃

确定用于存储在内存中的副本内存量

l 在指定DataNode的hdfs-site.xml设置dfs.datanode.max.locked.memory

l DataNode将确保懒持久化的内存不超过dfs.datanode.max.locked.memory

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

<property>
      <name>dfs.datanode.max.locked.memory</name>
      <value>34359738368</value>
    </property>

在设置此值时,请记住,还需要内存中的空间来处理其他事情,例如数据节点和应用程序JVM堆以及操作系统页缓存。如果在与数据节点相同的节点上运行YARN节点管理器进程,则还需要YARN容器的内存

1.1.2.2 💃DataNode设置基于内存的存储💃

l 在每个DataNode节点上初始化一个RAM磁盘

l 通过选择RAM磁盘,可以在DataNode进程重新启动时保持更好的数据持久性

下面的设置可以在大多数Linux发行版上运行,目前不支持在其他平台上使用RAM磁盘。

1.1.3 💃选择tmpfs(VS ramfs)💃

l Linux支持使用两种类型的RAM磁盘-tmpfs和ramfs

l tmpfs的大小受linux内核的限制,而ramfs可以使用所有系统可用的内存

l tmpfs可以在内存不足情况下交换到磁盘上。但是,许多对性能要求很高的应用运行时都禁用内存磁盘交换

l HDFS当前支持tmpfs分区,而对ramfs的支持正在开发中

1.1.4 💃挂载RAM磁盘💃

l 使用Linux中的mount命令来挂载内存磁盘。例如:挂载32GB的tmpfs分区在/mnt/dn-tmpfs

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

l 建议在/etc/fstab创建一个入口,在DataNode节点重新启动时,将自动重新创建RAM磁盘

l 另一个可选项是使用/dev/shm下面的子目录。这是tmpfs默认在大多数Linux发行版上都可以安装

l 确保挂载的大小大于或等于dfs.datanode.max.locked.memory,或者写入到/etc /fstab

l 不建议使用多个tmpfs对懒持久化写入的每个DataNode节点进行分区

1.1.5 设置RAM_DISK存储类型tmpfs标签

l 标记tmpfs目录中具有RAM_磁盘存储类型的目录

l 在hdfs-site.xml中配置dfs.datanode.data.dir。例如,在具有三个硬盘卷的DataNode上,/grid /0, /grid /1以及 /grid /2和一个tmpfs挂载在 /mnt/dn-tmpfs, dfs.datanode.data.dir必须设置如下:

<property>
      <name>dfs.datanode.data.dir</name>
      <value>/grid/0,/grid/1,/grid/2,[RAM_DISK]/mnt/dn-tmpfs</value>
    </property>

l 这一步至关重要。如果没有RAM_DISK标记,HDFS将把tmpfs卷作为非易失性存储,数据将不会保存到持久存储,重新启动节点时将丢失数据

1.1.6 💃确保启用存储策略💃

确保全局设置中的存储策略是已启用的。默认情况下,此设置是打开的。

1.1.7 💃使用内存存储💃
1.1.8 💃使用懒持久化存储策略💃

l 指定HDFS使用LAZY_PERSIST策略,可以对文件使用懒持久化写入

可以通过以下三种方式之一进行设置:

1.1.9 💃在目录上执行hdfs storagepolicies命令💃

l 在目录上设置㽾策略,将使其对目录中的所有新文件生效

l 这个HDFS存储策略命令可以用于设置策略.

hdfs storagepolicies -setStoragePolicy -path <path> -policy LAZY_PERSIST
1.1.10 💃在目录上执行setStoragePolicy方法💃

Apache Hadoop 2.8.0后,应用程序可以通过编程方式将存储策略设置FileSystem.setStoragePolicy。

fs.setStoragePolicy(path, "LAZY_PERSIST");
1.1.11 💃创建文件的时候指定CreateFlag💃

当创建文件时,应用程序调用FileSystem.create方法,传递CreateFlag#LAZY_PERSIST实现。

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


目录
相关文章
|
7月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
2181 0
|
11月前
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
1280 70
|
7月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
748 1
|
7月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
679 0
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
565 6
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
426 7
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
1090 1
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
191 4

相关实验场景

更多