SequenceFile

介绍

由于日志文件中每一条日志记录是一行文本。如果想记录二进制类型,纯文本是不合适的。这种情况下,Hadoop的SequenceFile类非常合适。SequenceFile可以作为小文件容器。而HDFS和MapReduce是针对大文件进行优化的,所以通过SequenceFile类型将小文件包装起来,可以获得更高效率的存储和处理。

读写操作

public class SequenceFileDemo {public static final String[] DATA = {"The only thing you really have in your life is time.","And if you invest that time in yourself,","to have great experiences that are going to enrich you,","then you can’t possibly lose.","– Steve Jobs, Entrepreneur"};private static void write(String uri) throws IOException {Configuration conf = new Configuration();FileSystem fs = FileSystem.get(URI.create(uri), conf);Path path = new Path(uri);IntWritable key = new IntWritable();Text value = new Text();SequenceFile.Writer writer = null;try {writer = SequenceFile.createWriter(fs, conf, path, key.getClass(), value.getClass());for (int i = 0; i < 100; i++) {key.set(100 - i);value.set(DATA[i % DATA.length]);System.out.printf("[%s]\t%s\t%s\n", writer.getLength(), key, value);writer.append(key, value);}} finally {IOUtils.closeStream(writer);}}private static void read(String uri) throws IOException {Configuration conf = new Configuration();FileSystem fs = FileSystem.get(URI.create(uri), conf);Path path = new Path(uri);SequenceFile.Reader reader = null;try {reader = new SequenceFile.Reader(fs, path, conf);Writable key = (Writable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);Writable value = (Writable) ReflectionUtils.newInstance(reader.getValueClass(), conf);long position = reader.getPosition();while (reader.next(key, value)) {String syncSeen = reader.syncSeen() ? "*" : "";System.out.printf("[%s%s]\t%s\t%s\n", position, syncSeen, key, value);position = reader.getPosition();}} finally {IOUtils.closeStream(reader);}}public static void main(String[] args) throws IOException {
//        write(args[0]);read(args[0]);}
}

说明

存储在SequenceFile中的键和值并不一定需要是Writable类型。任一可以通过Serialization类实现序列化和反序列化的类型均可被使用。如果使用Writable类型,则可以通过键和值作为参数的next()方法将数据流中的下一条键值对读入变量;否则,需要使用方法:

public Object next(Object key) throws IOException
public Object getCurrentValue(Object val) throws IOException

MapFile

介绍

MapFile是已经排序的SequenceFile,它已经加入用于搜索键的索引。可以将MapFile视为java.util.Map的持久化形式。

读写操作

MapFile的读写操作与SequenceFile类似,可参见基于文件的数据结构:关于MapFile

SequenceFile转换为MapFile

在MapFile中搜索相当于在索引和排序过的SequenceFile中搜索。对MapFile调用fix()静态方法,可以为MapFile重建索引。fix()方法通常用于重建已损坏的索引。
步骤:
1. 对顺序文件进行排序
2. 将MapReduce的输出重命名为data文件
3. 建立index文件

java程序员的大数据之路(7):基于文件的数据结构相关推荐

  1. java程序员的大数据之路(13):Pig入门

    Pig简介 Pig为大型数据集的处理提供了更高层次的抽象. Pig包括两部分: 用于描述数据流的语言,称为Pig Latin. 用于运行Pig Latin程序的执行环境.当前有两个环境:单JVM中的本 ...

  2. java程序员的大数据之路(3):用maven构建Hadoop项目

    背景 由于Hadoop项目多数是比较大的项目,因此我们选择使用构建工具来构建Hadoop项目,这里我们使用的是maven.当然也可以使用Gradle等比较流行的构建工具 构建过程 这里总结一下我使用I ...

  3. java程序员的大数据之路(1):Hadoop安装

    Hadoop伪分布式安装 从今天开始我会在这里记录在大数据学习方面的方法和遇到的一些问题. 首先从最著名的开源平台Hadoop开始学习.参考安装教程,这个教程比较全面,按照步骤一步步安装即可. 安装时 ...

  4. java程序员的大数据之路(12):Hadoop的守护进程

    关键属性 Hadoop守护进程的关键属性大多标记为final,使作业的配置无法覆盖. 典型的core-site.xml配置文件 <?xml version="1.0"> ...

  5. java程序员的大数据之路(9):MapReduce的类型

    概述 Hadoop的MapReduce中,map和reduce函数遵循如下常规格式: map:(K1,V1) -> list(K2,V2) reduce:(K2,list(V2)) -> ...

  6. java程序员的大数据之路(2):创建第一个Hadoop程序

    环境 Ubuntu 16.04 + Hadoop 2.7.4 + Intellij idea 2017.2 + jdk 1.8 创建过程 新建工程 新建一个工程 输入工程名 可以随便给工程起一个名字, ...

  7. java程序员的大数据之路(15):Pig Latin用户自定义函数

    过滤函数 所有的过滤函数都要继承FilterFunc类,并且实现抽象方法exec(),该方法的返回类型为Boolean. 示例代码如下: package com.udf.filter;import o ...

  8. java程序员的大数据之路(14):Pig Latin

    结构 一个Pig Latin程序由一组语句构成,一个语句可以理解为一个操作,或一个命令.语句必须以分号结束. Pig Latin有两种注释方法,双减号表示单行注释.多行注释可以使用/* 和 */表示. ...

  9. java程序员的大数据之路(8):MapReduce的工作机制

    概述 Hadoop运行作业时的整个过程如果所示. 包含如下4个独立的实体. 客户端:提交MapReduce作业. jobtracker:协调作业的运行.它的主类是JobTracker. tasktra ...

最新文章

  1. 细菌绝对定量的方法总结
  2. ipv4和ipv6的区别,如何保护ip地址安全?
  3. java匿名类的用法
  4. 职场思想分享001 | 有多种选择才叫有能力
  5. 大数据分析 es hive_使用Hive和iReport进行大数据分析
  6. 如何安装python3.8_python3.8下载及安装步骤详解
  7. R7-6 A-B (20 分)
  8. Dynamics CRM2013 6.1.1.1143版本号插件注冊器的一个bug
  9. [大数据之Spark]——Transformations转换入门经典实例
  10. 1 Go 语言环境安装
  11. teambition 还是jira_研发管理工具之 Id 比较(Jira/Teambition/TAPD/禅道)
  12. word怎样删除向下的箭头“↓”
  13. 不谋一时不足以谋一域_“不谋万世者,不足谋一时。不谋全局者,不足谋一隅”出自哪里?是什么意思?...
  14. K8s系列之:DNS服务搭建指南
  15. java调用OPC-DA出现0x00000005错误
  16. 半导体物理·笔记之④晶体中原子的电子状态——能带
  17. 二阶常系数齐次线性微分方程的解法
  18. RTL8189ES/ETV/FTV系列模块定频软件操作手册
  19. MP4/MOV/3GP文件的“ftyp”(转)
  20. 搜搜关键词排名查询 - 站长工具

热门文章

  1. 专家支招房贷省钱攻略:公积金贷款最多省19万
  2. 用python做了一个 qq炫舞 机器人
  3. A029_jdbc深入理解
  4. 关于Spring框架中StringUtils常用/易误用方法解析
  5. 支持Wi-Fi通讯的ADW300无线计量仪表介绍 安科瑞 顾语欢
  6. 【动态规划】磁带问题
  7. dolphinscheduler-数据质量-源码分析
  8. 《网页设计基础——HTML注释与CSS注释》
  9. 1602显示屏的使用
  10. R ggplot2 | 用geom_sf()绘制地图