Hadoop学习笔记(3) Hadoop I/O
1. HDFS的数据完整性
HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和。datanode负责在验证收到的数据后存储数据及其校验和。正在写数据的客户端将数据及其校验和发送到由一系列datanode组成的管线,管线中的最后一个datanode负责验证校验和。如果datanode检测到错误,客户端便会收到一个ChecksumException异常。
客户端从datanode读取数据时,也会验证校验和,将它们与datanode中存储的校验和进行比较。每个datanode均持久保存有一个用于验证的校验和日志,所以它知道每个数据块的最后一次验证时间。客户端成功验证一个数据块后,会告诉这个datanode,datanode由此更新日志。
不只是客户端在读取数据块时会验证校验和,每个datanode也会在后台线程中运行一个DataBlockScanner,从而定期验证存储在这个datanode上的所有数据块。
客户端在读取数据块时,如果监测到错误,就像namenode报告已损坏的数据块及其正在尝试读操作的这个datanode,最后才抛出ChecksunException异常。namenode将这个已损坏的数据块的复本标记为已损坏,之后安排这个数据块的一个复本复制到另一个datanode,如此一来,数据块的复本因子又回到期望水平。此后,已损坏的数据块复本便被删除。
禁用校验和的方法:在的、使用open()方法读取文件之前,将false值传递给FileSystem对象的setVerifyChecksum()方法。
(1) LocalFileSystem执行客户端的校验和验证,意味着在你写入名为filename的文件时,客户端会在包含每个文件块校验和的同一个目录内新建一个名为filename.crc的隐藏文件。读取文件时需要验证校验和,若检测到错误,LocalFileSystem将抛出ChecksumException异常。
禁用校验和,可使用RawLocalFileSystem代替LocalFileSystem。
(2) ChecksumFileSystem
LocalFileSystem通过ChecksumFileSystem来完成校验,有了该类,向其他文件系统加入校验和就非常简单。
2. 压缩
压缩格式:
所有压缩算法都需要权衡空间/时间:压缩和解压缩速度更快,其代价通常是只能节省少量的空间。表中的压缩工具提供9个不同的选项来控制压缩时间时必须考虑的权衡:-1为优化压缩速度,-9为优化压缩时间。
codec实现了一种压缩-解压缩算法。在Hadoop中,一个对CompressionCodec接口的实现代表一个codec。
(1) 通过CompressionCodec对数据流进行压缩和解压缩
如果要对写入输出数据流的数据进行压缩,可用createOutputStream(OutputStream out)方法新建一个CompressOutputStrean对象,相反,对输入数据流中读取的数据进行解压缩时,调用createInpueStream(InputStream in)获取CompressionInputStream。
public class StreamCompressor{
public static void main(String[] args) {
// 将CompressionCodec实现的完全合格名称作为第一个命令行参数
String codecClassname = args[];
Class<?> codecClass = Class.forName(codecClassname);
Configuration conf = new Configuration(); // 使用ReflectionUtils构建一个新的codec实例
CompressionCodec codec = (CompressionCodec)ReflectUtils.newInstance(codecClass,conf);
// 在System.out上包裹一个压缩方法。
CompressionOutputStream out = codec.createOutputStream(System.out);
IOUtils.copyBytes(System.in,out,,false);
// 调用finish()方法,要求压缩方法完成到压缩数据流的写操作,但不关闭这个数据流
out.finish();
}
}
例:通过GzipCodec的Stream对象对字符串"Text"进行压缩,然后使用gunzip从标准输入中对它进行读取并解压缩:
% echo "Text" | hadoop StreamCompressor org.apache.hadoop.io.compress.GzipCodec | gunzip
(2) 通过CompressionCodecFactory推断CompressCodec
CompressionCodecFactory的getCodec()方法可以将文件扩展名映射到一个CompressionCodec,该方法去文件Path对象欧威参数。
例:由文件扩展名推断而来的codec对文件进行解压缩
public class FileDecompressor{
public static void main(String[] args) {
String uri = args[];
Configuration conf = new Configuration();
FileSystem fs = FileSyste.get(URI.create(uri),conf); Path inputPath = new Path(uri);
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory.getCodec(inputPath);
if(codec == null){
System.err.println("No codec found for "+uri);
System.exit();
}
// 一旦找到对应的codec,便去除文件扩展名行成输出文件名
String outputUri = CompressionCodecFactory.removeSuffix(uri,codec.getDefaultExtension());
InputStream in = null;
OutputStream out = null;
try{
in = codec.createInputStream(fs.open(inputPath));
out = fs.create(new Path(outputUri));
IOUtils.copyBytes(in,out,conf);
}finally{
IOUtils.closeStream(in);
IOUtils.closeStream(out);
}
}
}
例:一个名为file.gz的文件可以通过下面的程序压缩为名为file的文件:
% hadoop FileDecompressor file.gz
下表为压缩codec的属性:
(3) 原生类库
原生类库可以提供压缩/解压缩性能。注意:并非所有格式都有原生实现。
可以通过Java系统的java.library.path属性指定原生代码库。默认情况下,Hadoop会根据自身运行的平台搜索原生代码库。禁用原生代码库,将属性hadoop.native.lib的值设置成false即可。
Hadoop学习笔记(3) Hadoop I/O的更多相关文章
- [转帖]hadoop学习笔记:hadoop文件系统浅析
hadoop学习笔记:hadoop文件系统浅析 https://www.cnblogs.com/sharpxiajun/archive/2013/06/15/3137765.html 1.什么是分布式 ...
- Hadoop学习笔记【Hadoop家族成员概述】
Hadoop家族成员概述 一.Hadoop简介 1.1 什么是Hadoop? Hadoop是一个分布式系统基础架构,由Apache基金会所开发,目前Yahoo!是其最重要的贡献者. Hadoop实现了 ...
- 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告
实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...
- Hadoop学习笔记—6.Hadoop Eclipse插件的使用
开篇:Hadoop是一个强大的并行软件开发框架,它可以让任务在分布式集群上并行处理,从而提高执行效率.但是,它也有一些缺点,如编码.调试Hadoop程序的难度较大,这样的缺点直接导致开发人员入门门槛高 ...
- Hadoop学习笔记—3.Hadoop RPC机制的使用
一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...
- [Hadoop] Hadoop学习笔记之Hadoop基础
1 Hadoop是什么? Google公司发表了两篇论文:一篇论文是“The Google File System”,介绍如何实现分布式地存储海量数据:另一篇论文是“Mapreduce:Simplif ...
- Hadoop学习笔记(3) Hadoop文件系统二
1 查询文件系统 (1) 文件元数据:FileStatus,该类封装了文件系统中文件和目录的元数据,包括文件长度.块大小.备份.修改时间.所有者以及版权信息.FileSystem的getFileSta ...
- Hadoop学习笔记(3) Hadoop文件系统一
1. 分布式文件系统,即为管理网络中跨多台计算机存储的文件系统.HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上.HDFS的构建思路为:一次写入.多次读取是最高效的访问模式.数据集通常由 ...
- 吴裕雄--天生自然Hadoop学习笔记:Hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop实现了一个分布式文件系统(H ...
随机推荐
- 【C#】ORM框架
ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁. Java典型的ORM框架有个:Hibernate,my ...
- wampserver2.5 在 Win7 64位下的相关配置备忘
发现运行和配置这个版本和之前的Wampserver有些差异,特此记录 1).wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b,另外有可能需要安 ...
- 市场上主流的BI产品的“答案之书”
本文来自网易云社区. 从20世纪80年代开始,商业智能的定义出现在人们面前,早期商业智能十分基础和杂乱,不仅仅会把数据处理放进去.还包含有一些可视化方面内容等.这个时期的BI主要的功能是支持多维分析和 ...
- JavaWeb中MVC的使用--以管理系统举例
开发环境:JavaSE1.7.JavaEE7.0.JSTL1.2.2.Web2.3.MySQL5.5.28 系统分析与功能设计: 本系统实现商品信息的管理,应包括以下几个功能: 商品信息列表:列出所有 ...
- (原创)Codeforces Round #550 (Div. 3) A Diverse Strings
A. Diverse Strings time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- 【Java】Strategy Pattern
前言 如果说,商场打折针对不同的时节,比如双十一.圣诞节.春节这些值得促销的好日子,进行不同程度的降价打折从而获得最大程度上的收益,如果有一群鸭子,只会游泳.嘎嘎叫,但是某一天某种类型的鸭子学会了飞, ...
- poj2417(Baby-Step Giant-Step)
题目链接:http://poj.org/problem?id=2417 题意:求满足给出 P, N, B, 求满足条件 BL == N (mod P) 的最小 L, 若不存在则输出 no soluti ...
- socket 中read返回0的情况
当client,调用read(socketfd,buffer,n)时,返回0的情况: 1.server端调用了close(soketfd)函数 2.server调用了close(fd,SHUT_WR) ...
- kuangbin专题十六 KMP&&扩展KMP POJ2752 Seek the Name, Seek the Fame
The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the l ...
- 我的web安全工程师学习之路——规划篇
据网上收集的web安全工程师需要掌握哪些技能,职位要求以及如何入门,加上学习网易推出的web安全工程师微专业课程,为了进一步学习,所以给自己做了一些小小规划,也希望给同样想成为web安全工程师的同仁们 ...