我是靠谱客的博主 结实方盒,最近开发中收集的这篇文章主要介绍9 DataNodes are required for the erasure coding policies: RS-6-3-1024k,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CDH6.2.1版本的集群:

172.30.81.203 manager
172.30.81.204 node1
172.30.81.205 node2
172.30.81.206 node3

存在隐患:9 DataNodes are required for the erasure coding policies: RS-6-3-1024k.The number of DataNodes is only 3.

解决方案

使用RS-6-3-1024k编码纠删码策略至少需要9个DataNodes,当前只安装了3个,所以再增加6个DataNodes节点即可解决该问题。
修改编码纠删码策略同样也可以解决,不过会比较麻烦

补充:

纠删码基本操作
1. 查看当前支持的纠删码策略

命令如下

hdfs ec -listPolicies

查看Hadoop版本命令:

hadoop version

目前hadoop-3.0.0beta1共支持5种纠删码策略,分别是:

RS-10-4-1024k:使用RS编码,每10个数据单元(cell),生成4个校验单元,共14个单元,也就是说:这14个单元中,只要有任意的10个单元存在(不管是数据单元还是校验单元,只要总数=10),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

RS-3-2-1024k:使用RS编码,每3个数据单元,生成2个校验单元,共5个单元,也就是说:这5个单元中,只要有任意的3个单元存在(不管是数据单元还是校验单元,只要总数=3),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

RS-6-3-1024k:使用RS编码,每6个数据单元,生成3个校验单元,共9个单元,也就是说:这9个单元中,只要有任意的6个单元存在(不管是数据单元还是校验单元,只要总数=6),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

RS-LEGACY-6-3-1024k:策略和上面的RS-6-3-1024k一样,只是编码的算法用的是rs-legacy,应该是之前遗留的rs算法。

XOR-2-1-1024k:使用XOR编码(速度比RS编码快),每2个数据单元,生成1个校验单元,共3个单元,也就是说:这3个单元中,只要有任意的2个单元存在(不管是数据单元还是校验单元,只要总数=2),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

以RS-6-3-1024k为例,6个数据单元+3个校验单元,可以容忍任意的3个单元丢失,冗余的数据是50%。而采用副本方式,3个副本,冗余200%,却还不能容忍任意的3个单元丢失。因此,RS编码在相同冗余度的情况下,会大大提升数据的可用性,而在相同可用性的情况下,会大大节省冗余空间。

2. 设置纠删码策略

纠删码策略是与具体的路径(path)相关联的。也就是说,如果我们要使用纠删码,则要给一个具体的路径设置纠删码策略,后续,所有往此目录下存储的文件,都会执行此策略。

例子如下

首先在/下创建目录rs-6-3,然后查看其是否设置了纠删码策略,结果显示没有指定策略(新建的目录不会指定策略)

[root@manager ~]# hdfs dfs -mkdir /rs-6-3

[root@manager ~]# hdfs ec -getPolicy -path /rs-6-3

The erasure coding policy of /rs-6-3 is unspecified

接下来,给此目录设置纠删码策略RS-6-3-1024k,此策略名是从前面list策略中查到的。可以看到已经设置成功。

[root@manager ~]# hdfs ec -setPolicy -path /rs-6-3 -policy RS-6-3-1024k

Set erasure coding policy RS-6-3-1024k on /rs-6-3

注意:

RS-6-3-1024k可以直接设置成功,其它的策略需要enable后,才能设置:

设置RS-3-2-1024k,这个需要先enablePolicy

[root@manager ~]# hdfs ec -enablePolicy  -policy RS-3-2-1024k
Erasure coding policy RS-3-2-1024k is enabled
[root@manager ~]# hdfs ec -setPolicy -path /rs-3-2 -policy RS-3-2-1024k
Set erasure coding policy RS-3-2-1024k on /rs-3-2

验证

[root@manager ~]# hdfs ec -getPolicy -path /rs-3-2
RS-3-2-1024k

设置RS-10-4-1024k,如果不enablePolicy,会报错

[root@manager ~]# hdfs dfs -mkdir /rs-10-4
[root@manager ~]# hdfs ec -setPolicy -path /rs-10-4 -policy RS-10-4-1024k

报错:

RemoteException: Policy 'RS-10-4-1024k' does not match any enabled erasure coding policies: [RS-3-2-1024k, RS-6-3-1024k]. An erasure coding policy can be enabled by enableErasureCodingPolicy API.

最后

以上就是结实方盒为你收集整理的9 DataNodes are required for the erasure coding policies: RS-6-3-1024k的全部内容,希望文章能够帮你解决9 DataNodes are required for the erasure coding policies: RS-6-3-1024k所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部