草庐IT

华为云FusionInsight MRS HDFS组件数据存储策略配置指导

华为云官方博客 2023-03-28 原文

操作场景

默认情况下,HDFS NameNode自动选择DataNode保存数据的副本。在实际业务中,可能存在以下场景:

  • DataNode上可能存在不同的存储设备,数据需要选择一个合适的存储设备分级存储数据。
  • DataNode不同目录中的数据重要程度不同,数据需要根据目录标签选择一个合适的DataNode节点保存。
  • DataNode集群使用了异构服务器,关键数据需要保存在具有高度可靠性的机架组中。

对系统的影响

配置HDFS数据存储策略需要重启服务,服务重启时无法访问。

前提条件

  • 管理员已根据业务需要,规划数据存储的策略。
  • 已安装HDFS客户端,请参见“管理员指南”中的“安装客户端”章节。

配置DataNode使用分级存储

HDFS的异构分级存储框架提供了RAM_DISK、DISK、ARCHIVE、SSD四种存储类型的存储设备,以对应DataNode上可能存在的不同的存储介质。

  • RAM_DISK是一种由内存虚拟的硬盘,具有最高的读写性能。其容量受限于内存大小,通常容量很小,且掉电可能丢失数据。
  • SSD即固态硬盘,具有较高的读写性能。但通常存储容量较小,单位存储成本比普通机械硬盘高。
  • DISK即普通机械硬盘,是HDFS用于保存数据的主力存储类型。
  • ARCHIVE类型代表高密度低成本的存储介质,读写性能相对较差,通常装配于计算能力较低的节点,用于大容量非热点数据存储。

通过对四种存储类型进行合理组合,即可形成适用于不同场景的存储策略。目前HDFS支持的存储策略如下表所示:

策略ID 名称 Block放置位置(副本数) 备选存储策略 副本的备选存储策略
15 LAZY_PERSIST RAM_DISK: 1, DISK: n-1 DISK DISK
12 All_SSD SSD: n DISK DISK
10 ONE_SSD SSD: 1, DISK: n-1 SSD, DISK SSD, DISK
7 HOT (default) DISK: n < none> ARCHIVE
5 WARM DISK: 1, ARCHIVE: n-1 ARCHIVE, DISK ARCHIVE, DISK
2 COLD ARCHIVE: n < none> < none>

以策略“15-LAZY_PERSIST”为例,如果Block副本数为3,配置了该策略的文件第1个Block副本将写入RAM_DISK,其余副本写入DISK。作为后备方案,如果第一个Block副本写入RAM_DISK类型存储介质失败,则尝试写入“备选存储策略”指定的存储类型;如果是第一个副本之外的其它副本写入失败,则尝试写入“副本的备选存储策略”指定的存储类型。

  1. 在FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置 > 全部配置”。
  2. 查看“dfs.storage.policy.enabled”的参数值是否为默认值“true”,如果不是,请修改为“true”。
  3. 修改“dfs.datanode.data.dir”的参数值。默认情况下系统认为数据保存的存储设备为DISK,此时需要根据实际存储设备的类型修改,参数值为“[存储设置类型]存储目录”,多个目录使用逗号隔开。修改效果如下:
“[RAM_DISK]/home/hadoop/dfs/ram,[SSD]/home/hadoop/dfs/ssd,/home/hadoop/dfs/hd,[ARCHIVE]/home/hadoop/dfs/archive”
  1. 修改“dfs.datanode.max.locked.memory”的参数值,该参数值必须大于“dfs.blocksize”的参数值,小于已挂载的RAM_DISK磁盘的空间大小。
  2. 单击“保存”,在“保存配置”中单击“确定”,保存完成后选择“更多 > 重启服务”,重启HDFS服务。界面提示“操作成功。”,单击“完成”,HDFS成功启动。
  3. 在HDFS客户端执行命令hdfs storagepolicies -setStoragePolicy -path < path> -policy < policy name>来指定特定路径的目录< path>,按照策略< policy name>进行分级存储例如,对根路径下test目录按照“LAZY_PERSIST”策略进行存储时,可执行如下命令:
hdfs storagepolicies -setStoragePolicy -path /test -policy LAZY_PERSIST

配置DataNode使用机架组存储

在实际业务中,关键数据根据实际业务需要保存在具有高度可靠性的节点中,此时DataNode组成了异构集群。通过修改DataNode的存储策略,系统可以将数据强制保存在指定的机架组中。

机架组表示多个机架的集合。配置此存储策略后关键数据将强制优先在此机架组的所有DataNode节点上保存副本数据。

使用约束

  1. 文件写入
  • 第一份副本将从强制机架组中选出,如果在强制机架组中没有可用节点,写入将会失败。
  • 第二份副本将从本地客户端机器或是机架组中的随机节点中(当客户端机器机架组不为强制机架组时)选出。
  • 第三份副本将从其他机架组中选出。
  • 各副本应存放在不同的机架组中。如果所需副本的数量大于可用的机架组数量,则会将多出的副本存放在随机机架组中。
  1. 由于副本数量的增加或数据块受损导致再次备份时,如果有一份以上的副本缺失或无法存放至强制机架组,将不会进行再次备份。系统将会继续尝试进行重新备份,直至强制组中有正常节点恢复可用状态。
  2. 如果对机架组策略进行了配置,Balancer将会在同一机架组内移动数据块。
  3. 如果对机架组策略进行了配置,Mover将会在同一机架组内移动数据块。
  4. 在写入文件时,节点的选择将严格按照存储策略进行,因此在附加存储类型与强制机架组副本存储类型相同的情况下,如在文件写入后或在删除过程中更改策略,只有强制组的副本不会被删除。

操作步骤

  1. 在FusionInsight Manager,单击“主机”。勾选指定的主机,选择“更多 > 设置机架”,在“设置机架”中填写新机架的名称。单击“确定”保存机架配置信息。
  2. 在FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置 > 全部配置”。
  3. 修改“dfs.block.replicator.classname”的参数值。默认值为“org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy”表示NameNode使用默认算法将数据副本保存到HDFS。
    选择“org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithRackGroup”,表示DataNode在保存数据时强制选择指定的机架组。
  4. 修改“dfs.use.dfs.network.topology”的参数值,设置为“false”,表示在机架组块放置策略中,不再使用DFSNetworkTopology。
  5. 修改“net.topology.impl”的参数值,设置为“org.apache.hadoop.net.NetworkTopologyWithRackGroup”,表示在机架组块放置策略中,按照树形分层结构的网络拓扑组成计算机集群。
  6. 修改“dfs.blockplacement.mandatory.rackgroup.name”的参数值,用于指定要选择的强制机架组。强制机架组可以只有一个。将此项留空或不进行配置,强制机架组概念将不会启用。
  7. 单击“保存”,在“保存配置”中单击“确定”,保存完成后在概览页面选择“更多 > 重启服务”,启动HDFS服务。

界面提示“操作成功。”,单击“完成”,HDFS成功启动。

数据存储策略使用建议

  1. 本章节中涉及到的两种数据存储策略,在使用前建议先做好数据规划,根据不同的使用场景选择合适的存储策略。
  2. 分级存储是针对存储介质,如SSD,SAS盘来选择;其它两种存储策略是针对数据节点来做选择。这两类是不同的概念层级。
  3. 标签存储与强制机架组二者是互斥关系,用户在选择存储策略时,只能择其一。两者都可以搭配分级存储来使用。
  4. 针对所有的数据存储策略,当前可以同时支持以下几种控制方式:
  • 通过dfs.block.replicator.classname控制使用某种副本放置策略,之间的配置互斥(默认放置策略,NodeLabel放置策略,可用空间放置策略,机架组放置策略)。
  • 使用分级存储功能。

如果以上3条控制都启动,HDFS的处理顺序是首先根据NodeLabel选择节点范围,再根据副本放置策略筛选节点,最后是在选择的节点范围内使用分级存储功能选择对应的节点和磁盘进行处理。

本文由华为云发布。

有关华为云FusionInsight MRS HDFS组件数据存储策略配置指导的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  5. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  8. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  9. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  10. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

随机推荐