Hadoop的SequenceFile使用(学校实验)

本文介绍了一个使用Hadoop SequenceFile进行小文件封装的实验,包括生成随机文件、SequenceFile封装及三种查询方式实现。实验分为三个步骤:生成小文件、SequenceFile处理和查询操作。关键在于理解SequenceFile的使用,它作为一个容器,能高效处理小文件。查询操作包括按文件名、key或组合查询。
摘要由CSDN通过智能技术生成

感觉最后这个实验还是有点难度的,前前后后花了整整一个下午的时间,只给出实验思路和关键代码,仅供学习参考,千万不要直接抄袭啊。。。

实验题目

  • 本实验要求学生通过SequenceFile实现对多个小文件的封装。
    要求如下:
    • 使用随机数生成以(整数,字符串)为(key,Value)的文本文件,文件的大小内容任意,文件数量不少于100个;
    • 如果需要,可以选择以下代码生成随机文件。
  • 使用SequenceFile对以上文件进行封装,生成一个独立文件,压缩格式任意;
  • 实现以下的三种方式的查询:
    • 给出文件名,可以从序列文件整体读取文件并存储到指定的位置;
    • 给出某个整数的key,可以读取所有该key的数据,并给出所在文件的名称(可以输出到控制台)
    • 给出文件名和整数的key,可以读取该文件中的对应key的数据(可以输出到控制台)。

具体思路

  • 我们将这次的实验任务进行拆解,大概分为三个小模块。
  • (1)生成待处理的文件
    • 设计一段代码,要求可以生成至少100个小文件,同时,每个小文件里面需要有一点点内容。
    • 这个直接利用Java的相关文件IO函数即可。
package org.example;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 生成100个文件,每个文件里面生成随机的数字
 */
public class RandomTxtFileCreator {
   
	public static void main(String[] args) {
   
		long start=System.currentTimeMillis();
		// 生成文件的个数
		int numFiles = 3;
		// 文件里面的数据的条数
		int numRecorders = 10;
		// 指定文件的生成路径
		String uri = "/home/lyp/backend-projects/demo/src/main/java/static";
		Random random = new Random();
		try {
   
			// 循环生成numFiles个文件
			for (int i = 1; i <= numFiles; i++) {
   
				System.out.println("writing file#"+i);
				// 指定当前生成的文件的路径
				FileOutputStream fileOutputStream = new FileOutputStream(uri + "/file" + i);
				// 将每个文件的生成的内容暂时存储到一个列表里面
				List<String> list = new ArrayList<>();
				for (int j = 0; j < numRecorders; j++){
   
					list.add(random.nextInt(numRecorders) + 1 + "\t" + "the recorder #" + j+ " in file#" + i);
				}
				PrintStream pStream = new PrintStream(new BufferedOutputStream(fileOutputStream));
				// 将这个list里面的所有的内容写到当前的这个文件里面
				for (String str : list) {
   
					pStream.println(str);
				}
				pStream.close();
				fileOutputStream.close();
			}
		} catch (Exception e) {
   
			e.printStackTrace(
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值