检测损坏数据的常用方法是第一次进入系统时计算数据的校验和,然后和传输后新生成的校验和进行匹配.若匹配失败,则认为数据被损坏了.常用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. mac系统 安装pip,用python读写excel(xlrd、xlwt)安装

    1: 先安装python, 下载地址:https://www.python.org/downloads/release/python-372/ 2: 安装pip 下载一个get-pip.py的文件  ...

  2. shell脚本学习之case用法及实例

    case语句和判断语句[if...elif...else]功能类似;当在逻辑判断比较简单的情况下,比后者的代码量要少许多.case用法,用变量来匹配某值,如果匹配成功则执行它下面的命令,直到 ;;为止 ...

  3. 【调试基础】Part 2 文本字符

    01 字节存储顺序 大端:低字节存在高地址,高字节存在低地址.eg:IBM: 小端:低字节存在低地址,高字节存在高地址.eg:INTEL: 02 字符集 ASCII:128=26小写 + 26大写 + ...

  4. spyder中让生成的图像单独在窗口中显示

    IPython 支持两种形式的绘图 终端输出图像新窗口输出图像方式 1 能够非常方便的保存输出记录(如将`IPython 终端输出转换成 Html 文件) 方式 2 则可以交互式的放大.拖动图片,并且 ...

  5. Spring Boot:Spring Boot 中 Redis 的使用

    Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储.相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化.除此 ...

  6. java根据输入的字符串和字节数来截取,输出对应字节数的字符串

    public class Test { //要进行截取操作的字符串 static String ss; //截取的字符串的字节数 static int n; public static void ma ...

  7. Java代码调用服务器上的Shell脚本

    Java代码调用服务器上的Shell脚本 这里主要是因为我们报表平台有用到用户手工录入的数据作为结果数据且需要纳入saiku去展示 如我们所知,saiku不会自动刷新,所以需要在数据更新接口中调用服务 ...

  8. FastReport导出PDF乱码的问题

    1.电脑查看乱码,替换文本控件,使用RichObject,而不使用TextObject 2.电脑查看正常,手机查看乱码,导出的时候选择包含字体: Enbeded Fonts勾选框

  9. 开通blog,记录学习历程

    2017.12.15日,开通blog,用于回忆知识点的记录和整理. 开通本blog主要做以下几点事情: 1.巩固知识点,基础打牢: 2.在基础牢固的基础上,学习流行的框架: 3.在框架牢固的基础上学习 ...

  10. spring boot 全局配置属性一览

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...