本文结合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原理】Hadoop 参数配置 详解

    Hadoop 参数配置 详解 一.常用端口 组件 节点 默认端口 配置 用途说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传 ...

  2. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  3. java IO编程详解

    java IO编程详解 一.Socket 1. Sock概述 Socket,套接字就是两台主机之间逻辑连接的端点.TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP协议是应用层协议 ...

  4. 图解大数据 | 分布式平台Hadoop与Map-Reduce详解

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/84 本文地址:https://www.showmeai.tech/article-d ...

  5. Flink常见的关键技术与特性详解

    转载:http://bigdata.51cto.com/art/201702/531036.htm Flink常见的关键技术与特性详解 Flink项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其 ...

  6. Hadoop Delegation Tokens详解

    转载自:<Hadoop Delegation Tokens详解> https://www.jianshu.com/p/617fa722e057 本文是cloudera公司的一篇技术博客,原 ...

  7. Tengine与Nginx特性详解

    本文链接:https://blog.csdn.net/ChenVast/article/details/77942607 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大 ...

  8. 还在用JDK6的同学,来看看JDK13新特性详解吧

    点击上方"搜云库技术团队"关注,选择"设为星标" 回复"面试题"或"1024"获取 4T 学习资料 在 JDK 版本的世 ...

  9. java11 新特性 详解

    为什么80%的码农都做不了架构师?>>>    引言: 点击-->java10 新特性 详解 点击-->java9 新特性 详解 点击-->java8 新特性 详解 ...

最新文章

  1. 收藏此文,今年你需要的学习资源绝对够了!
  2. ​Leangoo在线SaaS模式的产品结构
  3. 鸿蒙计划什么时候开始,华为鸿蒙计划被曝!研究者是2020应届生,网友:初出茅庐凭啥...
  4. 企业必备:商业智能中应该具备的3种仪表盘(Dashboards)
  5. POJ-1655 Balancing Act 树的重心
  6. 乐理 music theory
  7. 美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout
  8. vue3打包后无法加载页面
  9. Servlet 介绍
  10. FPGA时钟资源使用
  11. RequestDispatcher对象的应用-请求包含
  12. DiscuzX模板制作-主题列表页_左边栏制作_V1
  13. TCPIP详解 卷一核心概念整理
  14. pp助手苹果版_PP助手下线iOS版,曾首发iOS 9完美越狱工具,再见~
  15. NBGI 传说系列历史
  16. 开源应用中心 | KodExplorer高效流畅云端存储协同办公新体验
  17. php h5微信支付签名错误,微信H5支付签名错误
  18. 相见恨晚的编程学习词典!谁还不是南极滑冰的那个崽儿?!
  19. 关于程序员学习的一些想法
  20. Virus total爬虫分享

热门文章

  1. seewo一键投屏在mac电脑上的使用方法
  2. php qq登陆网站实例代码,QQ登陆网站实例代码
  3. Windows 10 升级软件 Windows 10 易升
  4. 软件集合贴:学软件测试必备软件,看这里足足够了
  5. CSDN App产品分析报告
  6. css动画animation详细解读
  7. 阿里云服务器搭建JAVA环境详解(jdk+mysql+tomcat)
  8. Win10+YOLOv5运行记录
  9. c语言tft屏浮点数显示,LCD屏显示小数的程序与心得
  10. NAND FLASH 读写操作 简介