HDFS的I/O主要是三个方面:
  一致性
  HDFS在一致性上面主要是通过校验和(checksum)来实现;从client发起写入的时候会校验一下文件内容,但是发生在pipeline的最后一个节点的时候。为什么没有在最早的一个节点来校验呢?因为在复制到后续节点的时候可能发生丢包导致异常情况;在最后一个节点做了这件事情就保证了pipeline的这一条线任何一点有问题都会回滚;
  可以不用checksum,这个是通过client端使用的类决定的;如果采用的是RawLocalFileSysem则是禁用checkSum,如果采用的是CheckSumFileSystem(本身这个类抽象类,继承类是LocalFileSystem),则是代表启用Checksum;如果采用RawLocalFileSystem则是关闭checksum;

  压缩
  好处是存储方面:节省空间,传输:加速网络传输。压缩就存在解码问题,交给Codec来处理;在Hadoop里面有Cachec Pool的对象,避免频繁创建Codec对象影响性能。
  压缩要考虑一个问题,就是文件的分片;如果一种压缩方式不支持分片,那么map就无法并行进行处理一个压缩块了,现在只有bzip2是支持分片的,其他的gizp,LZO等都不支持分片;这个要考虑;
  MapReduce的处理流程处处都是和压缩有关系,比如mapreduce从hdfs中读取数据是要解压缩,处理完是后,作为中间结果保存是要进行压缩(不强制,可配置),shuffle传输过程直接处理压缩的中间结果,然后到了reduce端在进行解压缩。

  序列化
  到底什么是序列化?将结构化的对象转变为字节流(二进制)就是序列化。为什么要序列化,因为要存储和传输;序列化包括两方面,一方面是要转化为字节流,另外一方面就是要通过格式来整合值;只有这样才能够序列化之后反序列化;还有都把那些内容序列化等,这些细节处理很多序列化框架处理都是不一样;比如java原生的序列化就会把类名也给序列化;但是Writable则不会做这件事情。所以序列化一般都是经历两个过程,首先是将结构化的对象转化为某种格式,然后再对格式进行转化;比如对象的xml序列化,首先根据注解将对象转为xml格式,然后再对xml进行字节流处理。这个格式就是为了在反序列化的时候遵循的原则;比如文本文件,\r就是换行。
  序列化的框架包括:
  1)Writable,writable是mapreduce里面标准的序列化的处理类;
  2)AVRO,是Hadoop之父Doug Cutting主持开发的,一种跨语言性很好的IDL语言(可以根据文件生成java类)。其实Parquet出来之后,其优势是明显优于AVRO的,但是在Hadoop权威指南中,AVRO仍然放在的第一的位置上面描述;AVRO是json格式(序列化格式为JSON,类似于xml),压缩自选。
  3)Parquet,一种列式存储序列化格式;性能很高;
  4)Sequence File,一种可以适合于存储二进制字段的序列化类型,SequenceFiles是格式的;就是通过这种格式,保证了Sequence File相对高效的读取;文本文件只有回车特殊字符,导致再度取得时候要不断分析当前字节是否是回车,这种模式对于一行字符数不多的文本文件来讲是可以接受的,但是如果是blob这种大数据的存储,这种遍历的模式已经不再使用;但是SequenceFile不同,格式中专门定义了长度为,可以合理的跳转到相应的位置,这就是协议(格式)的优势。
  那么关于AVRO和SequenceFile的差别是什么Doug Cutting在内部一封邮件中解释了一下,手下是AVRO的互操作性很好 ,IDL语言,可以支持python,c++,Java,c等;第二个就是AVRO是有版本的(Versioning),对于数据结构的修改AVRO可以进行记录。

HDFS(二)的更多相关文章

  1. HDFS(二) 底层通信原理——RPC 及 动态代理

    一.RPC(Remote Procedure Call  ) :远程过程调用 1.RPC是远程过程调用协议,实现调用者和被调用者二地之间的连接和通信.其基本通信模型是基于client/server进程 ...

  2. HDFS二.HDFS实现分布式文件存储---体系结构

    单击模式(Standalone): 单机模式是Hadoop的默认模式.当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置.在这种默认模式下所有3个XML文件均为 ...

  3. Hadoop 学习之路(六)—— HDFS 常用 Shell 命令

    1. 显示当前目录结构 # 显示当前目录结构 hadoop fs -ls <path> # 递归显示当前目录结构 hadoop fs -ls -R <path> # 显示根目录 ...

  4. windows上传文件到 linux的hdfs

    一.windows上传文件到 linux的hdfs 1.先在 centos 上开启 hdfs, 用 jps 可以看到下面信息, 说明完成开启 2.在win上配置 hadoop (https://www ...

  5. 将爬取的实习僧网站数据传入HDFS

     一.引言: 作为一名大三的学生,找实习对于我们而言是迫在眉睫的.实习作为迈入工作的第一步,它的重要性不言而喻,一份好的实习很大程度上决定了我们以后的职业规划. 那么,一份好的实习应该考量哪些因素呢? ...

  6. 什么是HDFS?算了,告诉你也不懂。

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 上一篇已经讲解了「大数据入门」的相关基础概念和知 ...

  7. 【Spark】Spark-shell案例——standAlone模式下读取HDFS上存放的文件

    目录 可以先用local模式读取一下 步骤 一.先将做测试的数据上传到HDFS 二.开发scala代码 standAlone模式查看HDFS上的文件 步骤 一.退出local模式,重新进入Spark- ...

  8. hbase优化之region合并和压缩

    HBASE操作:(一般先合并region然后再压缩) 一 .Region合并: merge_region   'regionname1','regionname2' ,'true'  --true代表 ...

  9. Apache Druid架构原理与应用场景

    为了帮助卖家提高运营水平,卖家管理后台会展示一些访客.订单等趋势和指标数据,如PV,UV,转化率,GMV等: 这些指标的计算依靠前端埋点和订单详情等数据,其特点是数据量大,并有一定的实时性要求. Dr ...

  10. Hadoop专有名词

    Hadoop专有名词 一. HDFS 二. MapReduce 1.MRAppMaster:MapReduce Application Master 负责整个过程调度和协调的 2.MapTask:在M ...

随机推荐

  1. Gruntjs提高生产力(一)

    gruntjs是一个基于nodejs的自动化工具,只要熟悉nodejs或者又一定js经验就可以熟练应用. 1. 安装 a. 保证已安装了nodejs,并带有npm b.安装客户端命令行工具,grunt ...

  2. jquery基础 笔记一

    一. 1. vsdoc: 在Visual Studio中需要引入此版本的jquery类库才能启用智能感知.如:jquery-1.3.2-vsdoc2.js<body> <div id ...

  3. URAL 1203 Scientific Conference 简单dp 难度:0

    http://acm.timus.ru/problem.aspx?space=1&num=1203 按照结束时间为主,开始时间为辅排序,那么对于任意结束时间t,在此之前结束的任务都已经被处理, ...

  4. vue环境的搭建

    一.首先要安装nodejs : 别去官网下,慢的要死,这是国内的什么版本都有.地址 这是我下载的. 然后就傻瓜式安装. 验证是否安装成功 二.node.js的环境变量的新建.  //我安装的路径是D: ...

  5. 重置input checked

    <!-- 作者:duke 时间:2018-10-24 描述: 重置input 样式--> <!DOCTYPE HTML><html> <head> &l ...

  6. zookeeper的c API 单线程与多线程问题 cli_st和cli_mt

    同样的程序,在centos和ubuntu上都没有问题,在solaris上问题却多多,据说是solaris管理更加严格. zookeeper_init方法,在传入一个错误的host也能初始化出一个非空的 ...

  7. echarts-detail---散点图

    data4 = [{ xAxis: result.AvgEvaluate, seriesId: ', name: '基干360综合分' }, { yAxis: evalue, seriesId: ', ...

  8. java.io.IOException: Unable to establish loopback connection

    1.错误描述 Starting preview server on port 8080 Modules: HTML5 (/HTML5) 2017-06-17 11:13:04.823:INFO::ma ...

  9. 我也说说Emacs吧(4) - 光标的移动

    在说基本编辑命令之前,我们先加一个小tip,说说如何将函数和键绑定在一起. (define-key global-map [?\C-l] 'recenter-top-bottom) define-ke ...

  10. IOS开发 多线程编程 - NSThread

    每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...