Hadoop SequenceFile

apache原文:http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html


概念:

SequenceFile是一个由二进制序列化过的key/value的字节流组成的文本存储文件,它可以在map/reduce过程中的input/output 的format时被使用。

在map/reduce过程中,map处理文件的临时输出就是使用SequenceFile处理过的。 所以一般的SequenceFile均是在FileSystem中生成,供map调用的原始文件。






在存储结构上,SequenceFile主要由一个Header后跟多条Record组成。


Header主要包含了Key classname,Value classname,存储压缩算法,用户自定义元数据等信息,此外,还包含了一些同步标识,用于快速定位到记录的边界。


每条Record以键值对的方式进行存储,用来表示它的字符数组可依次解析成:记录的长度、Key的长度、Key值和Value值,并且Value值的结构取决于该记录是否被压缩。



数据压缩有利于节省磁盘空间和加快网络传输,SeqeunceFile支持两种格式的数据压缩,分别是:record compression和block compression。


record compression如上图所示,是对每条记录的value进行压缩。


block compression是将一连串的record组织到一起,统一压缩成一个block,如上图。


block信息主要存储了:块所包含的记录数、每条记录Key长度的集合、每条记录Key值的集合、每条记录Value长度的集合和每条记录Value值的集合
注:每个block的大小是可通过io.seqfile.compress.blocksize属性来指定的。



读写实例代码:

分旧API和新API


package filedemo;import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.SequenceFile.Reader;
import org.apache.hadoop.io.SequenceFile.Writer;
import org.apache.hadoop.io.Text;
import org.junit.Test;public class SequenceFileDemo2 {@Testpublic void writerOldApi() throws Exception {// String uri = "file:///D://B.txt"; //本地windowsString uri = "hdfs://hello110:9000/testdata/oldApi.seq";Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI(uri), conf, "hadoop");Path path = new Path(uri);IntWritable key = new IntWritable();Text value = new Text();Writer writer = null;try {// 方法一 writer = SequenceFile.createWriter(fs, conf, path,// key.getClass(), value.getClass());该方法已过时writer = new Writer(fs, conf, path, key.getClass(), value.getClass());for (int i = 0; i < 100; i++) {key.set(i);value.set("now the number is :" + i);System.out.printf("[%s]\t[%s]\t%s\t%s\n", "写入",writer.getLength(), key, value);writer.append(key, value);}} finally {IOUtils.closeStream(writer);}}@Testpublic void readerOldApi() throws Exception {// String uri = "file:///D://B.txt"; //本地windowsString uri = "hdfs://hello110:9000/testdata/oldApi.seq";Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI(uri), conf, "hadoop");Path path = new Path(uri);IntWritable key = new IntWritable();Text value=new Text();Reader reader =null;try {reader=new Reader(fs, path, conf);while(reader.next(key, value)){System.out.printf("[%s]\t%s\t%s\n", "读取", "key", key);System.out.printf("[%s]\t%s\t%s\n", "读取", "value", value);}} finally {IOUtils.closeStream(reader);}}@Testpublic void writerNewApi() throws Exception {/** windows环境使用hdfs://的时候,如果没有使用FileSystem指定用户,* 那么会以当前windows用户去访问,如果当前windows用户名和Linux的不同,则会报错:* Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=xxxx* 故而本demo用了 file://* 解决方法:* 1、修改windows当前用户名为相应的linux-hadoop的用户。win10系统较难修改用户名。* 2、在linux上增加当前windows用户为hadoop的用户*///String uri = "hdfs://hello110:9000/testdata/newApi.seq"; String uri = "file:///D://newApi.seq";Configuration conf = new Configuration();Path path = new Path(uri);IntWritable key = new IntWritable();Text value = new Text();Writer writer = null;try {writer = SequenceFile.createWriter(conf,Writer.file(path), Writer.keyClass(key.getClass()),Writer.valueClass(value.getClass()));for (int i = 0; i < 100; i++) {key.set(i);value.set("now the new number is :" + i);System.out.printf("[%s]\t%s\t%s\n", writer.getLength(), key, value);writer.append(key, value);}} finally {IOUtils.closeStream(writer);}}@Testpublic void readerNewApi() throws Exception {String uri = "file:///D://newApi.seq";Configuration conf = new Configuration();Path path = new Path(uri);IntWritable key = new IntWritable();Text value = new Text();Reader reader=null;try {reader=new Reader(conf, Reader.file(path));while(reader.next(key, value)){System.out.printf("[%s]\t%s\t%s\n", "读取", "key", key);System.out.printf("[%s]\t%s\t%s\n", "读取", "value", value);}} finally {IOUtils.closeStream(reader);}}}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习算法平台alink_Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

Alink漫谈(十二) &#xff1a;在线学习算法FTRL 之 整体设计[Toc]0x00 摘要Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台&#xff0c;是业界首个同时支持批式算法、流式算法的机器学习平台。本文和下文将介绍在线学习算法FTRL在Alink中是如何实现的&a…

探测器反向偏压_近红外和可见光双模有机光电探测器

更多精彩&#xff0c;点击上方蓝字关注我们&#xff01;中英标题近红外和可见光双模有机光电探测器Near-infrared and Visible Light Dual-mode Organic Photodetectors图文导读研究报告了一种具有三层可见光吸收体/光学间隔层/近红外(NIR)光吸收体结构的双模有机光电探测器(OP…

html里post请求404,请求登陆页面post请求404错误,OPTIONS请求通过

点击登录的时候option请求是通过的&#xff0c;但post请求失败。服务端代码app.js&#xff1a;const express require(‘express’)const bodyParser require(‘body-parser’)const cors require(‘cors’)const router require(’./router/index’)// 创建 express 应用c…

python贪吃蛇毕业设计_【干货|python项目实例——贪吃蛇】- 环球网校

【摘要】当今世界充满了各种数据&#xff0c;而python是其中一种的重要组成部分。然而&#xff0c;若想其有所应用&#xff0c;我们需要对这些python理论进行实践。其中包含很多有趣的的过程&#xff0c;然后将其用于某些方面。其中一种应用就是python项目实例。今天环球网校的…

PWA即将推向所有Chrome平台

\看新闻很累&#xff1f;看技术新闻更累&#xff1f;试试下载InfoQ手机客户端&#xff0c;每天上下班路上听新闻&#xff0c;有趣还有料&#xff01;\\\大多数人应该都听说了微软已经着手在Windows商店中增加PWA&#xff0c;这是一个重磅消息&#xff01;\\\\渐进增强式Web应用…

c++代码转为go_Go语言学习笔记六--string编码

分解探索string编码转为byte数组func main() {s : "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 为什么是15呢?for _, v : range []byte(s) {fmt.Printf("%X ",v) //%X 转为16进制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21…

steam游戏时长计算机,我加入steam五年了,盘点下我买过的22款正版单机游戏

我加入steam五年了&#xff0c;盘点下我买过的22款正版单机游戏2020-02-17 10:50:07104点赞72收藏37评论大家好吖&#xff0c;在2015年的时候朋友就推荐了我入坑steam&#xff0c;不过那个时候更多的知道这是个dota启动器&#xff0c;慢慢的steam也越来越出名啦&#xff0c;中国…

AdPlayBanner:功能丰富、一键式使用的图片轮播插件

概述 AdPlayBanner&#xff1a;功能丰富、一键式使用的图片轮播插件详细 代码下载&#xff1a;http://www.demodashi.com/demo/11312.html AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件&#xff0c;主要用以自动或者手动地播放轮播图&#xff0c;提供了Fresco、…

pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...

点击上方“AI派”&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”导读只需要添加几行代码&#xff0c;就可以得到更快速&#xff0c;更省显存的PyTorch模型。你知道吗&#xff0c;在1986年Geoffrey Hinton就在Nature论文中给出了反向传播算法&#xff1f;此外&…

引入静态变量_Common Lisp变量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常简单&#xff1a;只是用一个名字空间&#xff0c;所有表达式中相应位置的值应该是明确的。Common Lisp和Scheme最大的不同是&#xff0c;函数名字空间和数据的名字空间是分离的。操作函数名字空间的语句包括&#xff0c;defun&#xff…

c理c利用计算机怎么弹,通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的...

通过汇编一个简单的C程序&#xff0c;分析汇编代码理解计算机是如何工作的计算机的工作方式&#xff1a;现代计算机的基本体系结构都是采用冯诺依曼结构&#xff0c;冯诺依曼的设计思想最重要之处是"存储程序"的这个概念。计算机的工作过程&#xff0c;就是执行程序的…

Linux安装MySQL的两种方法

原文链接&#xff1a;http://blog.csdn.net/superchanon/article/details/8546254 --------------------------------------------------------------------------------------- 1. 运行平台&#xff1a;CentOS 6.3 x86_64&#xff0c;基本等同于RHEL 6.3 2. 安装…

jenkins 手动执行_想知道如何用Jenkins自动执行Python脚本输出测试报告?

前言在用python做自动化测试时&#xff0c;我们写好代码&#xff0c;然后需要执行才能得到测试报告&#xff0c;这时我们可以通过 Jenkins 来进一步完成自动化工作。借助Jenkins&#xff0c;我们可以结合 Git/SVN 自动拉取代码&#xff0c;可以设置定时构建&#xff0c;接着就可…

VR 影院,约吗?

世界第一家 VR 影院已经开张&#xff0c;朋友&#xff0c;去不&#xff1f; 世界第一家 VR 影院正式开张 &#xff08;无大屏的 VR 电影院&#xff09; 在被称为 VR 元年的 2016 年&#xff0c;越来越多的人加入了这个新兴的领域&#xff0c;各种传统应用也在被 VR 包装之后以…

redis cluster 分布式锁_关于分布式锁原理的一些学习与思考redis分布式锁,zookeeper分布式锁...

首先分布式锁和我们平常讲到的锁原理基本一样&#xff0c;目的就是确保&#xff0c;在多个线程并发时&#xff0c;只有一个线程在同一刻操作这个业务或者说方法、变量。在一个进程中&#xff0c;也就是一个jvm 或者说应用中&#xff0c;我们很容易去处理控制&#xff0c;在jdk …

sp烘焙流程_小手雷-PBR材质流程(一)——(基本材质)

小手雷-PBR材质流程(一)Substance Painter生存手册经过了12个章节的讲解后&#xff0c;已经完结了(&#xff61;&#xff65;ω&#xff65;&#xff61;)相信大家经过了生存手册这一基础教程过后&#xff0c;对Substance Painter这款软件已经有了比较坚实的基础了&#xff0c;…

怎样呵护友谊_呵护真正的友情,助力漫长的人生

友情&#xff0c;即友谊&#xff0c;是指朋友和朋友之间的感情。它是一种很美妙的东西&#xff0c;可以让你在失落的时候变得高兴起来&#xff0c;可以让你走出苦海&#xff0c;去迎接新的人生。它就像一种你无法说出又可以感到快乐无比的东西。只有拥有真正朋友的人&#xff0…

【Day41】Python之路——AJAX

什么是AJAX AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 优点: 不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页内容 不需要任何浏览器插件&#xff0c;但需要用户允许JavaScript在浏览器上执行 同源…

aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?

OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文&#xff01;)命令行界面&#xff1a;openssl aes-256-cbc -salt -in filename -out filename.encPython以PyCrypto包的形式支持AES&#xff0c;但它只提供工具。如何使用Python / PyCrypto解密使用OpenSSL加密的文件&#…

VUE-搜索过滤器

VUE非常实用的搜索过滤&#xff0c;喜欢点个赞哦 废话不多说&#xff0c;先来看看效果 1 引入vue <script src"https://cdn.jsdelivr.net/npm/vue"></script>2 HTML <div id"app"><input v-modelsearch /><ul v-if"search…