一、创建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的数据

    1. hadoop jar hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar teragen 1024000 /ec_test/test

    image.png
    2.不丢块get100M文件所需时间
    脚本如下:

    1. #!/bin/bash
    2. start=$(date +%s)
    3. echo `hadoop fs -get /ec_test/test`
    4. end=$(date +%s)
    5. take=$(( end - start ))
    6. echo Time taken to execute commands is ${take} seconds.
    7. ~

    执行如下:
    image.png
    花费时间3s
    3.丢块get100M文件所需时间
    无丢块:
    hdfs fsck /ectest -list-corruptfileblocksimage.png
    制造丢块:
    直接DN节点上删除⽂件⼀个block的⼀个副本
    获取block名称及位置信息
    hdfs fsck /ec_test/test -files -blocks -locations
    image.png
    查找块位置
    find / -name “*blk
    -9223372036840515792320127912*”
    image.png
    删除blk
    -9223372036840515792与副本
    rm -rf blk-9223372036840515792 blk-9223372036840515792_320127912.meta

    get数据报错,但是可以get下来
    image.png
    用时4s
    get下来的数据正常
    image.png

    测试场景2:
    1T的数据损坏一个块,完全恢复需要多少时间;
    1.hdfs随机生成1T数据

    1. hadoop jar hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar teragen 10240000000 /ec_test/test

    image.png
    2.制造块丢失
    直接DN节点上删除⽂件⼀个block的⼀个副本
    获取block名称及位置信息
    hdfs fsck /ectest/test -files -blocks -locations
    image.png
    3.查找块所在位置:
    find / -name “*blk
    -9223372036840432720*”
    image.png
    4.删除blk-9223372036840432720与副本
    rm -rf blk
    -9223372036840432720 blk_-9223372036840432720_322342286.meta

    5.

    测试场景3:
    10T的数据损坏一个块,完全恢复需要多少时间;
    1.hdfs随机生成10T数据

    1. hadoop jar hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar teragen 102400000000 /ec_test/test