1.集群和硬件配置
编码和解码工作会消耗HDFS客户端和DataNode上的额外CPU。
纠删码文件也分布在整个机架上,以实现机架容错。这意味着在读写条带化文件时,大多数操作都是在机架上进行的。因此,网络带宽也非常重要。
对于机架容错,拥有足够数量的机架也很重要,每个机架所容纳的块数不超过EC奇偶校验块的数。机架数量=(数据块+奇偶校验块)/奇偶校验块后取整。
比如对于EC策略RS(6,3),这意味着最少3个机架(由(6 + 3)/ 3 = 3计算),理想情况下为9个或更多,以处理计划内和计划外的停机。对于机架数少于奇偶校验单元数的群集,HDFS无法维持机架容错能力,但仍将尝试在多个节点之间分布条带化文件以保留节点级容错能力。因此,建议设置具有类似数量的DataNode的机架。
2.纠删码策略设置
纠删码策略由参数dfs.namenode.ec.system.default.policy指定,默认是RS-6-3-1024k,其他策略默认是禁用的。
可以通过hdfs ec [-enablePolicy -policy <policyName>]命令启用策略集。
3.启用英特尔ISA-L(智能存储加速库)
默认RS编解码器的HDFS本机实现利用Intel ISA-L库来改善编码和解码计算。要启用和使用Intel ISA-L,需要执行三个步骤。
建立ISA-L库;
使用ISA-L支持构建Hadoop;
使用-Dbundle.isal将isal.lib目录的内容复制到最终的tar文件中。使用tar文件部署Hadoop。确保ISA-L在HDFS客户端和DataNode上可用。
| 软件 | 版本 |
| ----------------------------------------------------------- | ------- |
| Hadoop | 3.1.4 |
| [isa-l](https://github.com/intel/isa-l/releases) | 2.28.0 |
| [nasm](https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/) | 2.14.02 |
| yasm | 1.2.0 |
1.安装yasm和nasm
#在Hadoop集群所有节点上安装yasm和nasm。
yum install -y yasm
yum install -y nasm
#注意:isa-l-2.28.0对nasm和yasm有版本要求,低版本在安装时会报错。
2.编译安装isa-l-2.28.0
#在Hadoop集群所有节点上编译安装isa-l-2.28.0。
tar -zxvf isa-l-2.28.0.tar.gz
cd isa-l-2.28.0
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
make -f Makefile.unx
#检查libisal.so*是否成功
ll /lib64/libisal.so*
############如果有,则跳过##############
############如果没有有,则复制##############
cp bin/libisal.so bin/libisal.so.2 /lib64
3.Hadoop上检查是否启用isa-l
Native library checking:
hadoop: true /usr/hdp/3.0.0.0-1634/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
zstd : false
snappy: true /usr/hdp/3.0.0.0-1634/hadoop/lib/native/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
ISA-L: true /lib64/libisal.so.2 -------------> Shows that ISA-L is loaded.
命令:
hdfs ec
Usage: bin/hdfs ec [COMMAND]
[-listPolicies]
[-addPolicies -policyFile <file>]
[-getPolicy -path <path>]
[-removePolicy -policy <policy>]
[-setPolicy -path <path> [-policy <policy>] [-replicate]]
[-unsetPolicy -path <path>]
[-listCodecs]
[-enablePolicy -policy <policy>]
[-disablePolicy -policy <policy>]
[-help <command-name>]
常用参数:
[-setPolicy -path <path> [-policy <policy>] [-replicate]] #在指定路径的目录上设置擦除编码策略。 #path:HDFS中的目录。这是必填参数。设置策略仅影响新创建的文件,而不影响现有文件。 #policy:用于此目录下文件的擦除编码策略。默认RS-6-3-1024k策略。 #-replicate在目录上应用默认的REPLICATION方案,强制目录采用3x复制方案。replicate和-policy <policy>是可 选参数。不能同时指定它们。
[-getPolicy -path < path >] #获取指定路径下文件或目录的擦除编码策略的详细信息。
[-unsetPolicy -path < path >] #取消设置先前对目录上的setPolicy的调用所设置的擦除编码策略。如果该目录从祖先目录继承了擦除编码策略 ,则unsetPolicy是no-op。在没有显式策略集的目录上取消策略将不会返回错误。
[-listPolicies] #列出在HDFS中注册的所有(启用,禁用和删除)擦除编码策略。只有启用的策略才适合与 setPolicy命令一起使用。
[-addPolicies -policyFile <文件>] #添加用户定义的擦除编码策略列表。
[-listCodecs] #获取系统中支持的擦除编码编解码器和编码器的列表。
[-removePolicy -policy <policyName>] #删除用户定义的擦除编码策略。
[-enablePolicy -policy <policyName>] #启用擦除编码策略。
[-disablePolicy -policy <policyName>] #禁用擦除编码策略。
|