MR之SequenceFile具体解释
package com.leaf.hadoop.second; import java.util.Random; 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.Text;
//$ hadoop jar SequenceWriteSample.jar SequenceWriteSample
public class SequenceWriteSample { private static String meg = "hello world";
public static void main(String[] args) throws Exception{
Configuration conf = new Configuration();//获取环境变量
FileSystem fs = FileSystem.get(conf);//获取文件系统
Path path = new Path("sequenceFile");//定义路径
Random rand = new Random();
SequenceFile.Writer write = new SequenceFile.Writer(fs, conf, path, IntWritable.class, Text.class);
for(int i=0;i<100;i++){
write.append(new IntWritable(rand.nextInt(100)), new Text(meg));//写操作,隐藏的为每一行加入一个偏移量
//System.out.println(write.getLength());
}
IOUtils.closeStream(write);//将写出流关闭
} /*
* createWriter()方法的源代码;
* public static Writer createWriter(FileSystem fs,Configuration conf,Path name,Class keyClass,Class valClass)throws IOException{
return createWriter(fs,conf,name,keyClass,valClass,getCompressionType(conf));
}
*CompressionType类用以对SequenceFile写入的文件设定是否进行压缩处理
*
*CompressionType.NONE:表示不正确不论什么数据进行压缩从而直接进行存储
*CompressionType.RECORD:表示只压缩key而对value不进行压缩
*CompressionType.BLOCK:表示对全部的key与value都进行压缩
*/ /**
* write实例还隐藏的为每一行加入一个偏移量,用于获取当前文件的移动位置。
* 并按一定顺序生成相应的"同步位置"(Sync position),同步位置是
* 生成在SequenceFile文件的内部划分位置处。同步位置详细使用方法见SequenceFile.Reader
*/
}
class SequenceReaderSample{//执行命令:$ hadoop jar SequenceReaderSample.jar SequenceReaderSample
public static void main(String[] args)throws Exception{
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);//获取文件系统
Path path = new Path("cool.txt");//定义输出路径
SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, conf);//创建实例 IntWritable key = new IntWritable();//创建待读入Key实例
Text value = new Text();//创建待读入value实例
while(reader.next(key,value)){
System.out.println(key+"======"+value);//打印已读取键值对
}
IOUtils.closeStream(reader);//关闭读入流
}
/**
* 相对于SequenceFile.Writer方法
* SequenceFile.Reader提供了查找同步位置的方法,通过返回一个布尔值确认是否已经读取到偏移位置
* public boolean syncSeen(){return syncSeen}
*
* 同步位置(Sync Position)的作用:
*
*
*/ /*
* reader中源代码
* public synchronized boolean next(Writable key, Writable val)
throws IOException {
boolean more = next(key); //推断下一个值是否存在
if (more) //存在则进行操作
getCurrentValue(val); //获得相应的值
return more;
}
keyIn = new DataInputStream(keyInFilter); //创建输入流
public synchronized boolean next(Writable key) throws IOException {
…
key.readFields(keyIn); //用读方法进行数据读取
…
}
*
*/
/**
* 继续查看reader方法:
* …
*key.readFields(valBuffer); //通过 key 读入数据
*valBuffer.mark(0); //标记
*if (valBuffer.getPosition() != keyLength) //推断已读取位置
*throw new IOException(key + " read " + valBuffer.getPosition() + " bytes, should read " +
*keyLength); //抛出异常
*}
*…
*解析:首先key的对象读取一个偏移位置,依据其二进制生成详细事例,然后将位置归零,
* 假设此时偏移位置与key的长度不同样则抛出错误。 注:next进行键值读取的时候,必须有一个给定偏移量。
* 而同一时候假设偏移量大于key的长度则产生异常。 而解决的方法是通过获取文件的偏移位置后。从偏移的边界
* 開始读取。然后将整个值读入key中。
*
* Reader同一时候还提供了一个sync(long position)方法,将位置定位到当前位置的下一个同步位置開始读取。
* 案例代码例如以下:
*/
}
class SyncPositionSample{
public static void main(String[] args)throws Exception{
Configuration conf = new Configuration();//获取环境变量
FileSystem fs = FileSystem.get(conf);//获取文件系统
Path path = new Path("leaf.txt");//获取路径
SequenceFile.Reader reader = new SequenceFile.Reader(fs,path,conf);//创建reader实例
IntWritable key = new IntWritable();//设置存放实例
Text value = new Text();
reader.sync(0);//读取同步点
while(reader.next(key,value)){//将数据读入实例中
System.out.println(key+"-"+value);
}
}
}
MR之SequenceFile具体解释的更多相关文章
- MR案例:输出/输入SequenceFile
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File).在SequenceFile文件中,每一个key-value对被看做是一条记 ...
- Hadoop基础-MapReduce的常用文件格式介绍
Hadoop基础-MapReduce的常用文件格式介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MR文件格式-SequenceFile 1>.生成SequenceF ...
- 使用2个MR计算
转载:http://www.cnblogs.com/sharpxiajun/p/5205496.html 最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spar ...
- Shell脚本编程具体解释
第12章 Shell脚本编程 l Shell命令行的执行 l 编写.改动权限和运行Shell程序的步骤 l 在Shell程序中使用參数和变量 l 表达式比較.循环结构语句和条件结构语句 l ...
- xsd的解释说明
schema教程 XML Schema是以XML语言为基础的,它用于可替代DTD.一份XML schema文件描写叙述了XML文档的结构XML Schema语言也被称为XML Schema Defin ...
- Hadoop Hive sql 语法详细解释
Hive 是基于Hadoop 构建的一套数据仓库分析系统.它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,能够将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...
- 国内首家MR头显公司于CES惊艳亮相
在刚刚过去的CES2017大会上,我们看到了许多较为优秀的VR产品,而在这里面,有一家名不见经传的中国公司易瞳发布了一款兼具VR和AR功能的头显VMG-MARK.它的外观与联想VR和骁龙VR820等产 ...
- Hadoop基础-SequenceFile的压缩编解码器
Hadoop基础-SequenceFile的压缩编解码器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Hadoop压缩简介 1>.文件压缩的好处 第一:较少存储文件占用 ...
- MR中使用sequnceFIle输入文件
转换原始数据为块压缩的SequenceFIle import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.C ...
随机推荐
- Windows系统中 JDK安装及环境配置
需要安装jdk的第一步就是先去官网下载好JDK,选择需要的版本. Windows系统 1.将下载好的压缩包解压,点击解压得到的jdk执行文件开始安装.在安装过程中会弹出两个安装,一个是jdk,一个是j ...
- 《HTTP协议详解》读书笔记---请求篇之消息报头
不管是请求消息还是响应消息都包含消息报头,那么消息报头包含哪些内容?他们都代表什么含义呢?以下将带着 这些问题去学习消息报头. http消息(不管是请求消息还是响应消息)都是由开始行,消息报头(可选) ...
- Leetcode 650.只有两个键的键盘
只有两个键的键盘 最初在一个记事本上只有一个字符 'A'.你每次可以对这个记事本进行两种操作: Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的). Past ...
- Unity --yield return
1.yield return null; //暂停协同程序,下一帧再继续往下执行 yield new WaitForFixedUpdate (); //暂停协同程序,等到下一次调用FixedUpdat ...
- LAMP第三部分php配置和mysql配置
9. 配置防盗链http://www.lishiming.net/thread-71-1-1.html 防止别人的网站,放你网站图片的链接, 位置一般情况下在 /usr/local/apache/co ...
- 异常为"当IDENTITY_INSERT设置为OFF时" 解决办法
当 IDENTITY_INSERT 设置为 OFF 时,不能向表"A" 中的标识列插入显示值. 一般来说是自增ID造成的. 因此可以在数据库insert语句前加上 SET iden ...
- Vue2.0 - 构造器的延伸 Vue.extend
Vue.extend 返回的是一个“扩展实例构造器”,也就是预设了部分选项的Vue实例构造器.经常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件名称作为标签的自定义元 ...
- Spring aop报错:com.sun.proxy.$Proxyxxx cannot be cast to yyy
在使用Spring AOP时,遇到如下的错误: Exception in thread "main" java.lang.ClassCastException: com.sun.p ...
- [usaco jan 09] 安全路径 travel [最短路径树]
题面: 传送门 思路: 既然最后一条边不能走,那么就一定是换了一条路,一条不经过这最后一条边的路 如果想要这条路最短,那么其在路上一定尽可能多地走了最短路径 因此,我们对这张图跑一遍从1开始的单源最短 ...
- python获取目录下文件夹名称
path = '/opt' dirs = os.listdir(path) for dir in dirs: print dir