操作场景 默认情况下,HDFS NameNode自动选择DataNode保存数据的副本。在实际业务中,可能存在以下场景: DataNode上可能存在不同的存储设备,数据需要选择一个合适的存储设备分级存储数
操作场景
默认情况下,HDFS NameNode自动选择DataNode保存数据的副本。在实际业务中,可能存在以下场景:
- DataNode上可能存在不同的存储设备,数据需要选择一个合适的存储设备分级存储数据。
- DataNode不同目录中的数据重要程度不同,数据需要根据目录标签选择一个合适的DataNode节点保存。
- DataNode集群使用了异构服务器,关键数据需要保存在具有高度可靠性的机架组中。
对系统的影响
配置HDFS数据存储策略需要重启服务,服务重启时无法访问。
前提条件
- 管理员已根据业务需要,规划数据存储的策略。
- 已安装HDFS客户端,请参见“管理员指南”中的“安装客户端”章节。
配置DataNode使用分级存储
HDFS的异构分级存储框架提供了RAM_DISK、DISK、ARCHIVE、SSD四种存储类型的存储设备,以对应DataNode上可能存在的不同的存储介质。
- RAM_DISK是一种由内存虚拟的硬盘,具有最高的读写性能。其容量受限于内存大小,通常容量很小,且掉电可能丢失数据。
- SSD即固态硬盘,具有较高的读写性能。但通常存储容量较小,单位存储成本比普通机械硬盘高。
- DISK即普通机械硬盘,是HDFS用于保存数据的主力存储类型。
- ARCHIVE类型代表高密度低成本的存储介质,读写性能相对较差,通常装配于计算能力较低的节点,用于大容量非热点数据存储。
通过对四种存储类型进行合理组合,即可形成适用于不同场景的存储策略。目前HDFS支持的存储策略如下表所示:
以策略“15-LAZY_PERSIST”为例,如果Block副本数为3,配置了该策略的文件第1个Block副本将写入RAM_DISK,其余副本写入DISK。作为后备方案,如果第一个Block副本写入RAM_DISK类型存储介质失败,则尝试写入“备选存储策略”指定的存储类型;如果是第一个副本之外的其它副本写入失败,则尝试写入“副本的备选存储策略”指定的存储类型。
- 在FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置 > 全部配置”。
- 查看“dfs.storage.policy.enabled”的参数值是否为默认值“true”,如果不是,请修改为“true”。
- 修改“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”
- 修改“dfs.datanode.max.locked.memory”的参数值,该参数值必须大于“dfs.blocksize”的参数值,小于已挂载的RAM_DISK磁盘的空间大小。
- 单击“保存”,在“保存配置”中单击“确定”,保存完成后选择“更多 > 重启服务”,重启HDFS服务。界面提示“操作成功。”,单击“完成”,HDFS成功启动。
- 在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节点上保存副本数据。
使用约束
- 文件写入
- 第一份副本将从强制机架组中选出,如果在强制机架组中没有可用节点,写入将会失败。
- 第二份副本将从本地客户端机器或是机架组中的随机节点中(当客户端机器机架组不为强制机架组时)选出。
- 第三份副本将从其他机架组中选出。
- 各副本应存放在不同的机架组中。如果所需副本的数量大于可用的机架组数量,则会将多出的副本存放在随机机架组中。
- 由于副本数量的增加或数据块受损导致再次备份时,如果有一份以上的副本缺失或无法存放至强制机架组,将不会进行再次备份。系统将会继续尝试进行重新备份,直至强制组中有正常节点恢复可用状态。
- 如果对机架组策略进行了配置,Balancer将会在同一机架组内移动数据块。
- 如果对机架组策略进行了配置,Mover将会在同一机架组内移动数据块。
- 在写入文件时,节点的选择将严格按照存储策略进行,因此在附加存储类型与强制机架组副本存储类型相同的情况下,如在文件写入后或在删除过程中更改策略,只有强制组的副本不会被删除。
操作步骤
- 在FusionInsight Manager,单击“主机”。勾选指定的主机,选择“更多 > 设置机架”,在“设置机架”中填写新机架的名称。单击“确定”保存机架配置信息。
- 在FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置 > 全部配置”。
- 修改“dfs.block.replicator.classname”的参数值。默认值为“org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy”表示NameNode使用默认算法将数据副本保存到HDFS。
选择“org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithRackGroup”,表示DataNode在保存数据时强制选择指定的机架组。 - 修改“dfs.use.dfs.network.topology”的参数值,设置为“false”,表示在机架组块放置策略中,不再使用DFSNetworkTopology。
- 修改“net.topology.impl”的参数值,设置为“org.apache.hadoop.net.NetworkTopologyWithRackGroup”,表示在机架组块放置策略中,按照树形分层结构的网络拓扑组成计算机集群。
- 修改“dfs.blockplacement.mandatory.rackgroup.name”的参数值,用于指定要选择的强制机架组。强制机架组可以只有一个。将此项留空或不进行配置,强制机架组概念将不会启用。
- 单击“保存”,在“保存配置”中单击“确定”,保存完成后在概览页面选择“更多 > 重启服务”,启动HDFS服务。
界面提示“操作成功。”,单击“完成”,HDFS成功启动。
数据存储策略使用建议
- 本章节中涉及到的两种数据存储策略,在使用前建议先做好数据规划,根据不同的使用场景选择合适的存储策略。
- 分级存储是针对存储介质,如SSD,SAS盘来选择;其它两种存储策略是针对数据节点来做选择。这两类是不同的概念层级。
- 标签存储与强制机架组二者是互斥关系,用户在选择存储策略时,只能择其一。两者都可以搭配分级存储来使用。
- 针对所有的数据存储策略,当前可以同时支持以下几种控制方式:
- 通过dfs.block.replicator.classname控制使用某种副本放置策略,之间的配置互斥(默认放置策略,NodeLabel放置策略,可用空间放置策略,机架组放置策略)。
- 使用分级存储功能。
如果以上3条控制都启动,HDFS的处理顺序是首先根据NodeLabel选择节点范围,再根据副本放置策略筛选节点,最后是在选择的节点范围内使用分级存储功能选择对应的节点和磁盘进行处理。
本文由华为云发布。