一、创建hdfs测试目录
hdfs dfs -mkdir /ec_test
二、设置并开启RS-6-3-1024k策略
hdfs ec -setPolicy -policy RS-6-3-1024k -path /ec_test
hdfs ec -enablePolicy -policy RS-6-3-1024k
三、查看ec策略是否开启
hdfs ec -getPolicy -path /ec_test
四、测试
测试场景1:
get 文件:文件大小100M/300M,EC缺一个数据块和不缺数据块分别需要多少时间;
1.向hdfs集群随机生成100M的数据
hadoop jar hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar teragen 1024000 /ec_test/test
2.不丢块get100M文件所需时间
脚本如下:
#!/bin/bash
start=$(date +%s)
echo `hadoop fs -get /ec_test/test`
end=$(date +%s)
take=$(( end - start ))
echo Time taken to execute commands is ${take} seconds.
~
执行如下:
花费时间3s
3.丢块get100M文件所需时间
无丢块:
hdfs fsck /ectest -list-corruptfileblocks
制造丢块:
直接DN节点上删除⽂件⼀个block的⼀个副本
获取block名称及位置信息
hdfs fsck /ec_test/test -files -blocks -locations
查找块位置
find / -name “*blk-9223372036840515792320127912*”
删除blk-9223372036840515792与副本
rm -rf blk-9223372036840515792 blk-9223372036840515792_320127912.meta
get数据报错,但是可以get下来
用时4s
get下来的数据正常
测试场景2:
1T的数据损坏一个块,完全恢复需要多少时间;
1.hdfs随机生成1T数据
hadoop jar hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar teragen 10240000000 /ec_test/test
2.制造块丢失
直接DN节点上删除⽂件⼀个block的⼀个副本
获取block名称及位置信息
hdfs fsck /ectest/test -files -blocks -locations
3.查找块所在位置:
find / -name “*blk-9223372036840432720*”
4.删除blk-9223372036840432720与副本
rm -rf blk-9223372036840432720 blk_-9223372036840432720_322342286.meta
5.
测试场景3:
10T的数据损坏一个块,完全恢复需要多少时间;
1.hdfs随机生成10T数据
hadoop jar hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar teragen 102400000000 /ec_test/test