HDFS(二)
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(二)的更多相关文章
- HDFS(二) 底层通信原理——RPC 及 动态代理
一.RPC(Remote Procedure Call ) :远程过程调用 1.RPC是远程过程调用协议,实现调用者和被调用者二地之间的连接和通信.其基本通信模型是基于client/server进程 ...
- HDFS二.HDFS实现分布式文件存储---体系结构
单击模式(Standalone): 单机模式是Hadoop的默认模式.当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置.在这种默认模式下所有3个XML文件均为 ...
- Hadoop 学习之路(六)—— HDFS 常用 Shell 命令
1. 显示当前目录结构 # 显示当前目录结构 hadoop fs -ls <path> # 递归显示当前目录结构 hadoop fs -ls -R <path> # 显示根目录 ...
- windows上传文件到 linux的hdfs
一.windows上传文件到 linux的hdfs 1.先在 centos 上开启 hdfs, 用 jps 可以看到下面信息, 说明完成开启 2.在win上配置 hadoop (https://www ...
- 将爬取的实习僧网站数据传入HDFS
一.引言: 作为一名大三的学生,找实习对于我们而言是迫在眉睫的.实习作为迈入工作的第一步,它的重要性不言而喻,一份好的实习很大程度上决定了我们以后的职业规划. 那么,一份好的实习应该考量哪些因素呢? ...
- 什么是HDFS?算了,告诉你也不懂。
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 上一篇已经讲解了「大数据入门」的相关基础概念和知 ...
- 【Spark】Spark-shell案例——standAlone模式下读取HDFS上存放的文件
目录 可以先用local模式读取一下 步骤 一.先将做测试的数据上传到HDFS 二.开发scala代码 standAlone模式查看HDFS上的文件 步骤 一.退出local模式,重新进入Spark- ...
- hbase优化之region合并和压缩
HBASE操作:(一般先合并region然后再压缩) 一 .Region合并: merge_region 'regionname1','regionname2' ,'true' --true代表 ...
- Apache Druid架构原理与应用场景
为了帮助卖家提高运营水平,卖家管理后台会展示一些访客.订单等趋势和指标数据,如PV,UV,转化率,GMV等: 这些指标的计算依靠前端埋点和订单详情等数据,其特点是数据量大,并有一定的实时性要求. Dr ...
- Hadoop专有名词
Hadoop专有名词 一. HDFS 二. MapReduce 1.MRAppMaster:MapReduce Application Master 负责整个过程调度和协调的 2.MapTask:在M ...
随机推荐
- HDU 1693 插头dp入门详解
放题目链接 https://vjudge.net/problem/22021/origin 给出一个n*m的01矩阵,1可走0不可通过,要求走过的路可以形成一个环且可以有多个环出现,问有多少不同的 ...
- vue本地项目静态资源管理
vue本地项目静态资源管理 统一放在src/static里面css,images,js index.html里面使用重置样式 <link rel="stylesheet" h ...
- Spring写配置文件时不提示怎么办?
想要编写xml文件时代码提示,其实只要配置了相应的xsd文件即可,xsd文件也就是xml文件的一个约束.就是决定了你xml文件中可以写哪些东西. xsd文件是xml文件的元数据文件. 以bean标签为 ...
- 报错:Type mismatch: cannot convert from Object to Car
问题描述: 一个非常简单的spring项目,用静态工厂方法配置bean实例.项目的目录结构如下: 代码如下: Car.java package com.tt.spring.beans.factory; ...
- Linux:col命令详解
col 经常用于将说明文件转存为纯文本以方便阅读 语法 col(选项) 选项 -b:过滤掉所有的控制字符,包括RLF和HRLF: -f:滤掉RLF字符,但允许将HRLF字符呈现出来: -x:以多个空格 ...
- sar工具使用详细介绍
一:命令介绍:参考资料:http://linux.die.net/man/1/sar sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工 ...
- 如何使用JFinal开发javaweb
介绍开始: 编辑器:MyEclipse; 数据库:MySQL; 服务器:tomcat; 1 首先新建web项目 要强调的是Target runtime必须选择为None.然后点击两次Next,选中创建 ...
- SpringMVC札集(08)——文件上传
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- Linux usleep for shell
/**************************************************************************** * Linux usleep for she ...
- vue自定义指令v-scroll(directive)
vue开发中,很多地方如果说都用到了某一方法,我们就可以进行指令化封装,通过自定义指令来实现这里通过两个例子说明vue-Directive的使用 1.v-focus 主要用来实现页面加载进来的时候文本 ...