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 ...
随机推荐
- 前台ajax请求php后台返回成功却进error方法解决
最近几天一直都在解决error问题,周末都没能好好过,悲痛万分,想逃走
- java Arrays.asList方法注意事项
1. 简介 Arrays.asList()方法可以将数组转化为长度固定的列表. 该方法强调了列表的长度是固定的,因此不能使用list的add和remove方法修改list长度. 2. 示例 impor ...
- centos 7安装python 3
linux-Centos7安装python3并与python2共存 1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的 ...
- YOLT:将YOLO用于卫星图像目标检测
之前作者用滑动窗口和HOG来进行船体监测,在开放水域和港湾取得了不错的成绩,但是对于不一致的复杂背景,这个方法的性能会下降.为了解决这个缺点,作者使用YOLO作为物体检测的流水线,这个方法相比于HOG ...
- win7安装loadrunner 安装相关问题解决方案
安装loadrunner缺少2.8 sp1组件解决方案 这是因为注册表缺少FullInstallVer和Version,归根到底是madc安装的的问题 以下是解决方法: 1.运行regedit,打开注 ...
- 常见排序算法JAVA实现
1.冒泡排序,时间复杂度:最好:T(n) = O(n) ,情况:T(n) = O(n2) ,平均:T(n) = O(n2) public int[] bubbleSort(int[] nums) { ...
- vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件
vue-calendar-component 基于 vue 2.0 开发的轻量,高性能日历组件 占用内存小,性能好,样式好看,可扩展性强 原生 js 开发,没引入第三方库 Why Github 上很多 ...
- javascript事件流机制
(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div ...
- 第4天:scipy库
一.SciPy库概述 1.numpy提供向量和矩阵的相关操作,高级计算器 2.SciPy在统计.优化.插值.数值积分.视频转换等,涵盖基础科学计算相关问题. (额,对统计和概率,数理完全一窍不通) 3 ...
- python(元组,不可修改序列)
元组也是序列,区别于列表,它不可更改,语法简单只要加逗号隔开即可 1.1,2,3 (1,2,3) 2.42, (42,) 3.3*(40+2) 126 3*(40+2,) (42,42,42) 4.x ...