共计 2416 个字符,预计需要花费 7 分钟才能阅读完成。
为了保证数据的完整性,一般采用数据校验技术:
1、奇偶校验技术
2、md5,sha1 等校验技术
3、CRC-32 循环冗余校验技术
4、ECC 内存纠错校验技术
HDFS 数据完整性
1、HDFS 以透明方式校验所有写入的数据,可以通过 io.bytes.per.checksum 属性设置,字节数默认是 512 字节,创建一个单独的校验和,如果节点检测数据错误,就会报 CheckSumException 异常。
2、除了在读取数据时进行验证,数据节点也会在后台运行一个线程
DataBlockscanner(数据块检测程序)周期性的验证存储在数据节点上的所有块。
3、一旦检测到 corruptblock,在 heartbeat 阶段,DN 会收到 NN 发来的 Block Command,从其他数据块中拷贝一份新的 replica(备份块)。
本地文件系统
如果使用本地文件系统 file:///,在写一个文件 file 的时候,会隐式创建一个 file.crc 文件,包含每个数据块的 checksum。
使用 FileSystem.setVerifyChecksum(false) 来禁用校验和验证,也可以在 shell 命令中使用 -ignoreCrc 选项。
禁用校验的方法还可以通过 RawLocalFilesystem 原生支持校验和,
1、通过设置 fs.file.impl 的值为 org.apache.Hadoop.fs,RawLocalFileSystem
2、建立它的实例
LocalFileSystem 继承于 ChecksumFileSystem,
ChecksumFileSystem 提供了文件校验的系统功能。
package org.apache.hadoop.fs;
/**********************************************************
Implement the FileSystem API for the raw local filesystem.
*************************************************************/
public class RawLocalFileSystem extends FileSystem {
}
public abstract class ChecksumFileSystem extends FilterFileSystem {
}
public class LocalFileSystem extends ChecksumFileSystem {
}
验证是否存在 file.crc 文件
package Compress;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.ChecksumFileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
public class CheckpointFileSystem {
public static void main(String[] args) throws IOException {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, “DeCodec”);
// 打包运行必须执行的方法
job.setJarByClass(CheckpointFileSystem.class);
LocalFileSystem localFileSystem = ChecksumFileSystem.getLocal(conf);
System.out.println(
localFileSystem.getChecksumFile(new Path(“/liguodong/data”)));
}
}
[root@master liguodong]# yarn jar checksum.jar
/liguodong/.data.crc
Hadoop 如何修改 HDFS 文件存储块大小 http://www.linuxidc.com/Linux/2013-09/90100.htm
将本地文件拷到 HDFS 中 http://www.linuxidc.com/Linux/2013-05/83866.htm
从 HDFS 下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm
将本地文件上传至 HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm
HDFS 基本文件常用命令 http://www.linuxidc.com/Linux/2013-09/89658.htm
Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm
《Hadoop 实战》中文版 + 英文文字版 + 源码【PDF】http://www.linuxidc.com/Linux/2012-10/71901.htm
Hadoop: The Definitive Guide【PDF 版】http://www.linuxidc.com/Linux/2012-01/51182.htm
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-06/118462.htm