二、TopN问题解决方案

本文介绍如何利用Hadoop的MapReduce框架解决TopN问题,特别是针对唯一键的情况。通过SequenceFileWriterForTopN函数生成sequence文件,接着在TopNMapper中进行处理,配合HadoopUtil辅助函数实现。最后将编译后的jar包部署到Hadoop环境进行执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用hadoop的map/reduce解决TopN问题(唯一键)

首先使用SequenceFileWriterForTopN函数生成sequence文件,

SequenceFileWriterForTopN函数代码如下:

package chap03.mapreduce;

import java.io.IOException;
import java.net.URI;
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.hive.ql.parse.HiveParser_IdentifiersParser.intervalLiteral_return;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;

import shapeless.newtype;

public class SequenceFileWriterForTopN {
	
	public static void main(String[] args) throws IOException {
		if(args.length!=2)
			throw new IOException("usage:java org.chap03.mapreduce.SequenceFileWriterForTopN <hdfs-path> <number-of-entries>");
		Random rand=new Random();
		final String uri=args[0];   //HDFS路径
		final int N=Integer.parseInt(args[1]);  //sequence文件中输入个数
		
		Configuration conf=new Configuration();
		FileSystem fs=FileSystem.get(URI.create(uri), conf);
		
		Path path=new Path(uri);
		Text key=new Text();
		IntWritable value=new IntWritable();
		
		SequenceFile.Writer writer=null;
		
		writer=SequenceFile.createWriter(fs, conf, path,key.getClass(),value.getClass());
		try {
			for(int i=1;i<N;i++) {
				int randomInt=rand.nextInt(1000);//生成1000个数
				key.set("cat"+i);
				value.set(randomInt);
				System.out.println(key+"\t"+value);
				writer.append(key, value);
			}
		} finally {
			IOUtils.closeStream(writer);
		}
		
		
	}
}


然后定义map,reduce,driver函数

TopNMapper函数代码如下:

package chap03.mapreduce;

import java.io.IOException;
import java.util.SortedMap;
import java.util.TreeMap;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;



//NullWritable是Writable的一个特殊类&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值