检测损坏数据的常用方法是第一次进入系统时计算数据的校验和,然后和传输后新生成的校验和进行匹配.若匹配失败,则认为数据被损坏了.常用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. 九度1456胜利大逃亡【BFS】

    时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:4432 解决:1616 题目描述: Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡 ...

  2. 【nowcoder】 4th T1 动态点分治

    题目链接:https://www.nowcoder.com/acm/contest/175/A 题目名字吓死人 std: 我 太可啪了 一道简单的模拟题.虽然我把题意想错了. 按照题意模拟输出和继承. ...

  3. lr12关联,响应乱码

    1.前程贷登录.投标脚本 Action() { //    web_url("登录页", //        "URL=http://120.78.128.25:8765 ...

  4. kafka已生产消息查看

    在测试过程中有用到kafka,由于开发说我往kafka里面生产了消息,通知了对方要消费....看到这块一头雾水 kafka主要2个功能生产和消费 ##查询topic列表 ./kafka-topics. ...

  5. 大量数据的excel导出

    对于大型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了.它的原理很简单,用硬盘空间换内存(就像hash map用空间换时间一样). private void writeToAla ...

  6. idea新建maven工程没有artifacts

    原理,是因为没把新创建好的maven项目给设置成一个可被tomcat部署的web项目 选择个项目路径 配置artifacts,引入到tomcat就可以

  7. As The End of The Year Approaches,The Weighted Blanket Season Begins

    Weight blankets are well known for anxiety, insomnia, depression and so on. It is physical therapy, ...

  8. 《深入分析Java web技术内幕》读书笔记(一)

    1.什么时网站 网站就是利用Html工具制作用于展示特定内容的网页集合,网站也是一种软件. 网站的开发过程需要考虑其完整性.目的性.扩展性和安全性. 2.C/S架构跟B/S架构 C/S架构:客户端和服 ...

  9. HFun.快速开发平台(三)=》通用系统用户选择

    系统中用户的选择使用特别多,将该功能统一实现可提升系统效率. 用户的选择实现相对简单,系统中基本都会提供,HFun.快速开发平台中的实现特点主要有: 1.用户的选择分为单用户选择和多用户选择. 2.用 ...

  10. 使用junit和eclemma进行简单的代码测试

    1.Junit和Hamcrest的安装 可以在https://mvnrepository.com/上面下载所需要的Junit和Hamcrest的jar包,然后在项目中新建一个lib文件夹,将下载好的j ...