本文结合hadoop : the definitive guide精心而作,包含作者的心血,希望可以帮助大家理解一点hdfs的皮毛,足矣。(charles@xingbod.cn)


hadoop本身自带原始的数据IO操作,包括数据处理的完整,压缩等等。但是面对大数据集,还是需要特殊考虑,还包含hadoop tools中的一些组件,例如序列化框架,硬盘数据存储结构等。

因为数据要在HDFS中分散多处,那么,数据其实不应该有丢失或者损坏。但是,每个磁盘或者网络IO都有可能对读写操作引入错误,但数据变得更大。叠加起来的概率就会更加高。磁盘读写错误率与磁盘本身的状态有关,网络延迟或者故障等也会导致网络IO错误。

如果很难感受IO错误概率的影响,我们可以做一个简单的计算:

假设我们每一次的IO流量是1MB,每一次出现的概率是很低很低的,假设为1/10^7 对于普通磁盘和网络IO大概可以达到这个概率,平常用户单一操作并不会产生什么影响。当时大数据集处理500GB的时候,出现错误的概率:

R=1-(1-10^7)^500*1024=5%

由此可见,在我们传输500GB的时候,有5%的概率产生IO错误。

因此大数据处理的时候就应该仔细考虑这个问题。我们面临的不只是500GB,可能是500TB或者更多海量的数据。IO操作中对数据的校验操作是解决这个问题的一个不可或缺的方法。

常用的做法是在第一次进入系统的时候计算数据校验和。校验和(Checksum)是冗余校验的一种形式。 它是通过错误检测方法,对经过空间(如通信)或者时间(如计算机存储)传送的数据的完整性进行检查的一种简单方法。计算机领域常见的校验和的方法有循环冗余校验(CRC)、MD5、SHA家族等。当传输结束时,接收者可以根据这个数值判断是否接到了所有的数据。如果数值匹配,那么说明传送已经完成。


例如上图,节点1和节点2之间进行文件传输,node1写文件到Node2,Node2收到数据的时候就会进行校验,如果Node1中的checksum和Node2中的不一样,就说明文件传输中被损坏,就会马上抛出checksum exception.这个checksum excepion属于IOException的一个子类。

每一校验的文件的大小默认是512字节,这是由系统默认设置的,也可以人工设置为其他的值(io.bytes.per.checksum).


以上的例子是节点之间或者客服端可节点之间的网络传输的校验。另外一个校验的地点发生在数据节点上面,也就是节点本地系统。数据节点data node维护一个连续的校验和验证日志,他知道每个数据块最后的验证时间,出了与client进行验证,每个节点还会在后台运行datablockscanner,这个程序用来检验存在节点上的所有的数据块,防止bit rot的产生。

bit rot在这里指的是,存储在磁盘中的 数据的 性能和完整性的缓慢变化。

由于HDFS存在至少三个副本,在client进行数据操作,发现数据块校验失败之后,抛出checksu exception,就会报告这个数据块以及他的这个数据节点,名称节点会标记这个 节点上的这个数据块为损坏,组织进行修复。

在本地文件系统里面的校验和是怎么体现出来的呢?校验和保存在哪里?校验和对应的数据块大小改变了怎么办?

其实在hdfs中,在同一个文件夹下面包含每一个文件的校验和,譬如:
文件的名字是filename,
那么
校验文件就是.filename.crc

校验文件包含校验值以及校验文件的大小等信息。因此即使系统中的文件块大小改变,还是可以通过校验文件,读取到校验码对应的文件块大小以及文件块。

当然,除了校验文件保证文件没有出现错误之外,我们还要考虑另外一个问题,大量的数据导致大量的存储需求,因此我们面临着压缩和解压缩,编码和解码的需求压力。hadoop要怎么解决这个问题,下一篇文章我会用代码来说明这个问题。

文件校验以后有机会也会贴出源代码讨论,看机缘吧。


Charles 于2015-12-21 Phnom Penh



版权说明:
本文由Charles Dong原创,本人支持开源以及免费有益的传播,反对商业化谋利。
CSDN博客:http://blog.csdn.net/mrcharles
个人站:http://blog.xingbod.cn
EMAIL:charles@xingbod.cn

Hadoop IO 特性详解(1)的更多相关文章

  1. Hadoop IO 特性详解(2)

    (本文引用了microheart,ggjucheng的一些资料,在此感谢.charles觉得知识无价,开源共享无价) 这一次我们接着分析文件IO校验的相关代码,看看最底层是如何实现这种大数据集的文件校 ...

  2. Hadoop IO 特性详解(2)【文件校验】

    (本文引用了microheart,ggjucheng的一些资料,在此感谢.charles觉得知识无价,开源共享无价) 这一次我们接着分析文件IO校验的相关代码,看看最底层是如何实现这种大数据集的文件校 ...

  3. Hadoop IO 特性详解(1)【数据完整性】

    本文结合hadoop : the definitive guide精心而作,包含作者的心血,希望可以帮助大家理解一点hdfs的皮毛,足矣.(charles@xingbod.cn) hadoop本身自带 ...

  4. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  5. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  6. 点击--》java9 新特性 详解

    引言: 点击-->java9 新特性 详解 点击-->java8 新特性 详解 正题: 1.局部变量var 将前端思想var关键字引入java后段,自动检测所属于类型,一种情况除外,不能为 ...

  7. java10 新特性 详解

    引言: 点击-->java9 新特性 详解 点击-->java8 新特性 详解 正题: 1.局部变量var 将前端思想var关键字引入java后段,自动检测所属于类型,一种情况除外,不能为 ...

  8. hadoop基础-SequenceFile详解

    hadoop基础-SequenceFile详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.SequenceFile简介 1>.什么是SequenceFile 序列文件 ...

  9. Hadoop RPC机制详解

    网络通信模块是分布式系统中最底层的模块,他直接支撑了上层分布式环境下复杂的进程间通信逻辑,是所有分布式系统的基础.远程过程调用(RPC)是一种常用的分布式网络通信协议,他允许运行于一台计算机的程序调用 ...

随机推荐

  1. 点击bindingNavigatorAddNewItem 关联的dataGridView不会新增一行

    方法一. 在设计界面,修改bindingNavigator1的属性AddNewItem 为“(无)”: 方法二. 在设计器自动生成的代码中找到这一行:             // bindingNa ...

  2. 函数声明提升机制在浏览器中的bug

    JavaScript 解释器中存在一种变量声明被提升(hoisting)的机制,也就是说变量(函数)的声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面. 但通过测试, ...

  3. css两列自适应宽度布局(左定宽,右自适应)

    1.利用BFC: <div id="root"> <div class="left">左</div> <div cla ...

  4. .Net版SQLite无法访问网络位置的数据库文件-winOpen,os_win.c 36702异常

    最近一个C#小程序,希望将SQLite数据库放在网络共享的位置,让多个客户端同时访问.却发现SQLite连接不上该网络位置的数据库,而如果数据库在本地则一切正常. 例如将SQLite数据库 test. ...

  5. js将json数据动态生成表格

    今天开发中遇到需要展示动态数据的问题, 具体要求是后端传来的json字符串,要在前端页面以table表格的形式展示, 其实没啥难的,就是拼接table标签,纯属体力活,于是自己写了个呆萌,保存起来,以 ...

  6. zTree返回的菜单列表中根据权限打勾

    需求:管理员登录后台后可以为角色添加菜单,同时要能看到该角色已经拥有的菜单. 想法一:刚开始写的时候很迷茫,因为我们有可能会为该角色增加别的菜单,所以不能只加载该角色已经拥有的菜单,只加载该角色的菜单 ...

  7. 洛谷 P1262 间谍网络

    传送门 题目大意:A能揭发B,B能揭发C..某些人可以被收买,如果收买A,那么A,B,C..的情报都可以得到. 求能否得到所有情报,如果可以最少花费多少钱去收买. 题解:tajian缩点 dfs/bf ...

  8. linux 使用asciinema 进行命令行屏幕录制共享

    1. 安装 yum install asciinema 2. 使用 录制 asciinema rec filename(可选,方便进行后期的回放play) 同时生成一个url 地址方便传递 https ...

  9. iis部署网页时应该避免的特殊端口

    1 tcpmux 7 echo 9 discard 11 systat 13 daytime 15 netstat 17 qotd 19 chargen 20 ftp data 21 ftp cont ...

  10. hadoop之 Zookeeper 分布式应用程序协调服务

    (1) Zookeeper 在 Hadoop 集群中的作用 Zookeeper 是分布式管理协作框架,Zookeeper 集群用来保证 Hadoop 集群的高可用,(高可用的含义是:集群中就算有一部分 ...