检测损坏数据的常用方法是第一次进入系统时计算数据的校验和,然后和传输后新生成的校验和进行匹配.若匹配失败,则认为数据被损坏了.常用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的更多相关文章

  1. 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的默认 ...

  2. Hadoop(九)Hadoop IO之Compression和Codecs

    前言 前面一篇介绍了Java怎么去查看数据块的相关信息和怎么去查看文件系统.我们只要知道怎么去查看就行了!接下来我分享的是Hadoop的I/O操作. 在Hadoop中为什么要去使用压缩(Compres ...

  3. Hadoop(十一)Hadoop IO之序列化与比较功能实现详解

    前言 上一篇给大家介绍了Hadoop是怎么样保证数据的完整性的,并且使用Java程序来验证了会产生.crc的校验文件.这一篇给大家分享的是Hadoop的序列化! 一.序列化和反序列化概述 1.1.序列 ...

  4. 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: ...

  5. 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 ...

  6. 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: ...

  7. 关于org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z报错

    之前一直出现这个错误,使用的开发工具是IDEA 我感觉似乎是hadoop与windows的操作系统不太适合 于是在project创建 org.apache.hadoop.io.nativeio包,将N ...

  8. atorg.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:557)

    错误原因: 你当前开发环境中{Hadoop_HOME}\bin\hadoop.dll 文件和你当前的hadoop版本不匹配.  解决方案: 网络下载相应版本的hadoop.dll,并将该文件放入c:\ ...

  9. Hadoop IO基于文件的数据结构详解【列式和行式数据结构的存储策略】

    Charles所有关于hadoop的文章参考自hadoop权威指南第四版预览版 大家可以去safari免费阅读其英文预览版.本人也上传了PDF版本在我的资源中可以免费下载,不需要C币,点击这里下载. ...

  10. [解决]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 ...

随机推荐

  1. linux 一键安装lnmp环境

    ①,登陆后运行:screen -S lnmp ②.如果提示screen: command not found 命令不存在可以执行:     yum install wget  ③. 执行命令:wget ...

  2. gevent模块学习(一)

    1.Event类,事件主要用于Greenlet之间的异步通信 e = gevent.event.Event() -> Event 说明: 创建一个信号对象 e.set() -> None ...

  3. 【转】C# 中Linq查询所有上级节点或所有下级节点

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  4. eclipse常用工具

    Eclipse 保存文件时自动格式化代码 很多同学不知道Eclipse有个很有用的功能,就是自动格式源代码的功能,一般大家都是直接Ctrl+Shift+F手动格式化,多浪费时间. 其实Eclipse里 ...

  5. dockerfile语法规则

    编写Dockerfile 在前面的章节,我们学习了通过docker命令来下载镜像,运行镜像,在容器中部署自己的程序,最后将容器提交到自己的镜像中.但是,这并不是Docker推荐的镜像构建方式.在这一章 ...

  6. idea使用错误及技巧总结合集(一)

    --- Cannot start process, the working directory 'E:\algorithm\algorithm' does not exist 1.点击run后再点击e ...

  7. Cronolog日志分割、定时清理

    阿里云发送短信提示服务器磁盘占用到80%警报短信 经过排查发现tomcat日志文件达到10个多G,手动删除过久的日志文件后恢复到50% 但是catalina.out文件还有6个G 解决方法 一.安装C ...

  8. pip 在win10下安装

    http://blog.csdn.net/yupu56/article/details/50470970C:\Users\sunof\AppData\Local\Programs\Python\Pyt ...

  9. C语言:递归函数n!

    #include <stdio.h> long recursion(int n); void main(){ int n; long result; printf("input ...

  10. using Newtonsoft.Json;

    using Newtonsoft.Json;    //数组转义为json  string result = JsonConvert.SerializeObject(list1);   //josn转 ...