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具体解释的更多相关文章

  1. MR案例:输出/输入SequenceFile

    SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File).在SequenceFile文件中,每一个key-value对被看做是一条记 ...

  2. Hadoop基础-MapReduce的常用文件格式介绍

    Hadoop基础-MapReduce的常用文件格式介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MR文件格式-SequenceFile 1>.生成SequenceF ...

  3. 使用2个MR计算

    转载:http://www.cnblogs.com/sharpxiajun/p/5205496.html 最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spar ...

  4. Shell脚本编程具体解释

    第12章 Shell脚本编程   l  Shell命令行的执行 l  编写.改动权限和运行Shell程序的步骤 l  在Shell程序中使用參数和变量 l  表达式比較.循环结构语句和条件结构语句 l ...

  5. xsd的解释说明

    schema教程 XML Schema是以XML语言为基础的,它用于可替代DTD.一份XML schema文件描写叙述了XML文档的结构XML Schema语言也被称为XML Schema Defin ...

  6. Hadoop Hive sql 语法详细解释

    Hive 是基于Hadoop 构建的一套数据仓库分析系统.它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,能够将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

  7. 国内首家MR头显公司于CES惊艳亮相

    在刚刚过去的CES2017大会上,我们看到了许多较为优秀的VR产品,而在这里面,有一家名不见经传的中国公司易瞳发布了一款兼具VR和AR功能的头显VMG-MARK.它的外观与联想VR和骁龙VR820等产 ...

  8. Hadoop基础-SequenceFile的压缩编解码器

    Hadoop基础-SequenceFile的压缩编解码器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Hadoop压缩简介 1>.文件压缩的好处 第一:较少存储文件占用 ...

  9. MR中使用sequnceFIle输入文件

    转换原始数据为块压缩的SequenceFIle import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.C ...

随机推荐

  1. python 中单例模式

    1.什么是单例模式: 单例模式是指一个类有且只有一个实例对象,创建一个实例对象后,再创建实例是返回上一次的对象引用.(简单的讲就是两个实例对象的ID相同,节省了内存空间) 2.单例模式的创建: 举例创 ...

  2. 直接选择排序(java)

    直接选择排序的逻辑非常简单,数组{A1.......An}  先在{A1........An}去获取最小的  与A1交换位置   然后在{A2..........An}中取出最小的  与A2交换位置. ...

  3. [转]完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

    HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. HTML5的新标签元素有: <header&g ...

  4. 【转】UGUI EventSystem

    EventSystem   The EventSystem is a way of sending events to objects in the application based on inpu ...

  5. 【bzoj2721】[Violet 5]樱花 数论

    题目描述 输入 输出 样例输入 2 样例输出 3 题解 数论 设1/x+1/y=1/m,那么xm+ym=xy,所以xy-xm-ym+m^2=m^2,所以(x-m)(y-m)=m^2. 所以解的数量就是 ...

  6. 编程风格——UNIX 高手的 10 个习惯

    引言 当您经常使用某个系统时,往往会陷入某种固定的使用模式.有时,您没有养成以尽可能最好的方式做事的习惯.有时,您的不良习惯甚至会导致出现混乱.纠正此类缺点的最佳方法之一,就是有意识地采用抵制这些坏习 ...

  7. linux系统——线程

    linux系统线程 1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个 ...

  8. set基本用法-----2

    #include<cstdio> #include<iostream> #include<cstdlib> #include<cmath> #inclu ...

  9. 修改手機的 input source 及 charger 及 usb 相關電路後,容易忽略的事項

    input source 及 charger 需要注意, 是否可以在關機的狀況下充電, 當然 開機充電 是一定要的. usb 部分需要注意, 是否可以在沒有電或者是有電的狀況下 download 程式 ...

  10. javascript 表格隔行换色

    用到的知识点: 获取表格元素 tbody 和 rows都是有索引的 这里我们只有一组tbody所以 索引是0 偶数行 索引取余2为0 奇数行 索引取余2不为0 通过 遍历行索引设置相应的颜色. < ...