Hadoop RawFileSystem 和 CheckSumFileSystem

Hadoop中支持广泛的文件系统,从本地文件系统到HDFS。

在这些文件系统的底层,由checksumfilesystem和rawfilesystem提供了基础支持

rawfilesystem是所有文件系统最底层的组件,其功能就是用最接近操作系统本身的方式生成和处理文件

checksumfilesystem是hadoop数据完整性保证的核心,其工作于rawfilesystem之上,使用rawfilesystem进行基础的数据读写操作。此外,checksumfilesystem还为写入的数据进行CRC校验,它会为被书写的文件创建一个同名的,以.crc结尾的隐藏文件用于保存该文件的完整性信息。

在checksumfilesystem的保证下,hdfs,http,localfilesystem等其它文件系统专心于自己的业务逻辑而不必关心底层数据的写入以及完整性校验信息。


以下的代码说明了rawfilesystem和checksumfilesystem的工作方式:

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RawLocalFileSystem;


public class CRawFileSystemWriter
{
	public static void main(String[] arrArgvs) throws UnsupportedEncodingException, IOException
	{
		Configuration confDefault = new Configuration();
		FileSystem fsRaw = new RawLocalFileSystem();
		fsRaw.initialize(URI.create("file:///home/doraemon/Codes/Noob_Learning/HDFS/RawFileSystem/bin/RawFile.test"), confDefault);
		OutputStream osWritter = fsRaw.create(new Path("file:///home/doraemon/Codes/Noob_Learning/HDFS/RawFileSystem/bin/RawFile.test"));
		osWritter.write(new String("这是一个测试程序").getBytes("utf-8"));
		osWritter.close();
		
		FileSystem fsLocal = new LocalFileSystem();
		fsLocal.initialize(URI.create("file:///home/doraemon/Codes/Noob_Learning/HDFS/RawFileSystem/bin/CheckSumFile.test"), confDefault);
		osWritter = fsLocal.create(new Path("file:///home/doraemon/Codes/Noob_Learning/HDFS/RawFileSystem/bin/CheckSumFile.test"));
		osWritter.write(new String("这是一个测试程序").getBytes("utf-8"));
		osWritter.close();
	}
}

我新建了两个类的实例,一个是raw文件的,一个是Local的,Local使用了checksum,而checksum使用了raw

程序执行后,我的目录中有以下的文件:

-rwxrwxrwx 1 doraemon doraemon      24 Jul 23 19:56 CheckSumFile.test
-rw-rw-r-- 1 doraemon doraemon      12 Jul 23 19:56 .CheckSumFile.test.crc
-rw-rw-r-- 1 doraemon doraemon      24 Jul 23 19:56 RawFile.test

可以看出,Raw写的文件是没有校验和信息的,而Local的因为使用了CheckSum,所以是有校验和信息保存的。


你可能感兴趣的:(苦逼坑爹Hadoop)