Hadoop IO
检测损坏数据的常用方法是第一次进入系统时计算数据的校验和,然后和传输后新生成的校验和进行匹配.若匹配失败,则认为数据被损坏了.常用CRC-32(cyclic redundancy check,循环冗余检查)计算一个32位的任何大小输入的证书校验和
HDFS会在读取数据时校验和,针对数据的每个io.bytes.per.checksum字节都会创建一个单独的校验和,默认为512字节.因此CRC-32校验和是4个字节长,存储开销都小于1%.数据节点负责在存储数据及其校验和验证它们收到的数据.客户端写入数据并且将它发送到一个数据节点上的管线中.在管线的最后一个节点验证校验和.若此节点检测到错误,客户端便收到一个Checksum Exception.这是一个IO Exception.
客户端读取数据节点上的数据时,会验证校验和,将其与数据节点上存储的校验和进行对比,每个数据节点维护一个连续的校验和验证日志.每个数据节点还会在后台运行一个DataBlockScanner定期验证存储在数据几点上的所有块,为了防止物理存储介质中的衰退所造成的数据损坏.
若客户端读取数据块时检测到错误,它在抛出Checksum Exception前报告该坏块以及它试图从名称节点中要读取的数据节点.名称节点将这个块标记为损坏.它会从其他的副本复制一个新的副本,损坏的副本将被删除
Hadoop本地文件系统执行客户端的校验.在写一个名为filename的文件时,文件系统的客户端以透明的方式创建一个隐藏的文件filename.crc.在同一个文件夹下包含每个文件块的校验和.块的大小作为元数据存储在.crc文件中
Checksum File System
LocalFileSystem使ChecksumFileSystem校验文件系统,底层文件系统被称为原始文件系统.可以通过在ChecksumFileSystem中使用gtRanFileSystem()方法来获得
CompressionCodec
CompressionCodec有两个方法用于压缩或解压数据,可以使用createOutputStreamOut()来创建一个CompressionOutputStream.将其压缩格式写入底层的流.调用createOutputStreamIn()获取一个CompressionInputStream,从而从底层的流读取未经压缩的数据
CompressionCodecFactory提供了getCodec()方法,从而将文件扩展名映射到相应的CompressionCodec,此方法接受一个Path对象.若要在本地库应用中大量执行压缩解压任务,可以考虑使用codingpool.
序列化
序列化指的是将结构化对象转为字节流以便通过网络进行传输或写入持久存储的过程,反序列化指的是将自己流转为一系列结构化对象的过程.用于处理进程间通信和持久存储
Writable接口定义了两个方法:一个用于将其状态写入二进制格式的DataOutput流;另一个用于从DataInputStream流读取其状态.在对整数进行编码时,在固定长度格式(IntWritable和LongWritable)和可变长度格式(UIntWritable和ULongWritable)之间,固定长度编码的好处在于值比较均匀的分布在整个值空间中.大多数数字变量往往分布不均匀,所以可变长度编码更节省空间.可变长度编码的另一个好处是可以将VIntWritable编程VLongWritable.
Text类是一种UTF8格式的Writable.Text使用int类型在字符串编码中存储字节数.最大值是.Text类的索引位于编码后的字节系列中,而不是字符串中的Unicode字符.Text类的charAt()返回了一个int类型来表示Unicode代码点.Text类对象的长度是是UTF-8编码的字节数.indexOf()返回一个char类型的编码单元的索引.find()方法是字节偏移量.Text类可以通过set()函数来重用Text实例
NullWritable
NullWritable是一种特殊的Writable.它的序列化是零长度的被用作占位符.
Hadoop有四种Writable集合.分别是ArrayWritable,TwoArrayWritable,MapWritable和SortedMapWritable.ArrayWritable和TwoArrayWritable是Writable针对数组和二维数组实例的实现.MapWritable和SortdMapWritable,每个键/值字段的类型都是此字段序列化格式的一部分.类型保存为单字节,充当一个数组类型的索引.
序列文件
序列文件由一个头部或多个记录组成.前三位字节时SEQ字节作为幻数,紧接着一个版本号.头部包含键/值类的名称,压缩细节,用户定义的元数据和同步标记
MapFile
MapFile是经排序后带索引的SequenceFile,可根据键进行查找
MapFile的fix()方法常用于重建被破坏的索引,从零开始创建新的索引
1.将序列文件number.seq归入一个名为numbr.map的新建目录,后者将变成MapFile
2.Map Reduce的输出被重命名为data文件
3.新建index文件
Hadoop IO的更多相关文章
- Hadoop: LongWritable cannot be cast to org.apache.hadoop.io.IntWritable
写MR Job的时候遇到一个坑爹的异常: LongWritable cannot be cast to org.apache.hadoop.io.IntWritable 当写Map的时候,key的默认 ...
- Hadoop(九)Hadoop IO之Compression和Codecs
前言 前面一篇介绍了Java怎么去查看数据块的相关信息和怎么去查看文件系统.我们只要知道怎么去查看就行了!接下来我分享的是Hadoop的I/O操作. 在Hadoop中为什么要去使用压缩(Compres ...
- Hadoop(十一)Hadoop IO之序列化与比较功能实现详解
前言 上一篇给大家介绍了Hadoop是怎么样保证数据的完整性的,并且使用Java程序来验证了会产生.crc的校验文件.这一篇给大家分享的是Hadoop的序列化! 一.序列化和反序列化概述 1.1.序列 ...
- java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
在 windows 上运行 MapReduce 时报如下异常 Exception in thread "main" java.lang.UnsatisfiedLinkError: ...
- Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
1.window操作系统的eclipse运行wordcount程序出现如下所示的错误: Exception in thread "main" java.lang.Unsatisfi ...
- hive orc压缩数据异常java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.hive.ql.io.orc.OrcSerde$OrcSerdeRow
hive表在创建时候指定存储格式 STORED AS ORC tblproperties ('orc.compress'='SNAPPY'); 当insert数据到表时抛出异常 Caused by: ...
- 关于org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z报错
之前一直出现这个错误,使用的开发工具是IDEA 我感觉似乎是hadoop与windows的操作系统不太适合 于是在project创建 org.apache.hadoop.io.nativeio包,将N ...
- atorg.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:557)
错误原因: 你当前开发环境中{Hadoop_HOME}\bin\hadoop.dll 文件和你当前的hadoop版本不匹配. 解决方案: 网络下载相应版本的hadoop.dll,并将该文件放入c:\ ...
- Hadoop IO基于文件的数据结构详解【列式和行式数据结构的存储策略】
Charles所有关于hadoop的文章参考自hadoop权威指南第四版预览版 大家可以去safari免费阅读其英文预览版.本人也上传了PDF版本在我的资源中可以免费下载,不需要C币,点击这里下载. ...
- [解决]Hadoop 2.4.1 UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0
问题:UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0 我的系统 win7 64位 Hadoop ...
随机推荐
- 中国建设工程造价管理系统 http://zaojiasys.jianshe99.com/cecaopsys/
建造师造价管理系统漏洞提示: 可以绕过,直接进入后台,为了安全起见,我就不多说了,. 里面的数据,从小学,中学,高中,大学,户口,电话,身份等, 很全, 本人没有破坏任何数据,
- 微信跳转外部浏览器下载app
很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接和下载APP,其实这并不难,只要我们实现微信跳转功能即可.下面给大家介绍这个功能 方案实现教程:http://sk ...
- vue做nav切换
话不多说,直接上代码. 关键:通过点击来改变thisindex ,又thisinde == index来控制class是否含active来控制样式 简单效果如下:
- vue-cli webpack配置 简单分析
vue-cli webpack配置分析 入口 从package.json可以看到开发和生产环境的入口. "scripts": { "dev": "no ...
- springMVC的配置与使用
springMVC的配置与使用 spring mvc 核心类与接口 先来了解一下,几个重要的接口与类.现在不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础. DispatcherServ ...
- srping的历史与哲学
历史: 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功, ...
- mpvue学习笔记(二)
六.mpvue入门 http://mpvue.com/ 1.安装 $ vue init mpvue/mpvue-quickstart my-project$ cd my-project$ npm in ...
- maven配置及使用
配置maven工程.从官网下载maven工具,然后解压到磁盘某个目录下即可. 计算机->属性->高级系统设置->环境变量. 新建如下变量: 变量名:MAVEN_HOME 变量值:C: ...
- linux IPtable防火墙 禁止和开放端口
1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放.下面是命令实现: iptables -P INPUT DROPiptables -P FORWARD DROPiptable ...
- JAVA中时间格式(SimpleDateFormat)和数字格式(DecimalFormat)转换详解(转)
时间格式转换SimpleDateFormat: //定义日期的格式 SimpleDateFormat format =new SimpleDateFormat("yyMMdd"); ...