`
zhangbaoming815
  • 浏览: 149905 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop新版本多文件输出

阅读更多

基于Hadoop 1.0.1版本编写,在hadoop 1.0.1 + 版本应该都可以使用

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

public class MultipleOutputFile
{
    public static class TokenizerMapper extends
            Mapper<LongWritable, Text, Text, IntWritable>
    {

        private final static IntWritable one = new IntWritable(1);

        private Text word = new Text();

        public void map(LongWritable key, Text value, Context context)
                throws IOException, InterruptedException
        {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens())
            {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer extends
            Reducer<Text, IntWritable, Text, IntWritable>
    {
        private MultipleOutputs<Text, IntWritable> mos;
        @Override
        protected void setup(Context context) throws IOException,
                InterruptedException
        {
            mos = new MultipleOutputs<Text, IntWritable>(context);
        }

        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                Context context) throws IOException, InterruptedException
        {
            int sum = 0;
            for (IntWritable val : values)
            {
                sum += val.get();
            }
            result.set(sum);
            mos.write("text", key, new IntWritable(1));
            mos.write("seq", key, result);
            context.write(key, result);
        }

        @Override
        protected void cleanup(Context context)
                throws IOException, InterruptedException
        {
            // 流操作必须有,否则在数据量小的情况,数据全部停留在缓冲区中
            mos.close();
        }
    }

    public static void main(String[] args) throws IOException,
            InterruptedException, ClassNotFoundException
    {
        Configuration conf = new Configuration();

        Job job = new Job(conf, "word count");
        
        FileInputFormat.addInputPaths(job, args[0]);
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        
        job.setJarByClass(MultipleOutputFile.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setReducerClass(IntSumReducer.class);
        
        job.setOutputFormatClass(TextOutputFormat.class);
        
        MultipleOutputs.addNamedOutput(job, "text",
                TextOutputFormat.class,
                Text.class, IntWritable.class);
        
        MultipleOutputs.addNamedOutput(job, "seq",
                TextOutputFormat.class,
                Text.class, IntWritable.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

 

分享到:
评论

相关推荐

    Hadoop示例程序合并文件

    这个示例程序“Hadoop示例程序合并文件”旨在演示如何在Hadoop环境下整合多个文件,这对于理解Hadoop分布式文件系统(HDFS)的工作原理至关重要。下面将详细阐述Hadoop的核心组件、HDFS的特性以及如何在Hadoop环境中...

    Hadoop64位库文件

    在升级Hadoop版本或迁移系统时,必须确保这些库文件与新环境匹配,并进行适当的更新或迁移。 总之,“Hadoop64位库文件”压缩包是Hadoop在64位系统上运行的基石,包含了与操作系统交互所需的底层支持。正确地部署和...

    大数据与云计算培训学习资料 Hadoop的MapReduce中多文件输出 共9页.pdf

    在Hadoop 0.19.x版本中,提供了一个名为`MultipleOutputFormat`的类,它允许MapReduce任务输出多个文件并自定义文件名。但是,从Hadoop 0.20.x开始,`MultipleOutputFormat`及其所在包的类被标记为"已过时",这意味...

    win hadoop 开发文件

    这个版本包含了所有必要的组件,如HDFS、MapReduce和YARN(Yet Another Resource Negotiator),它们是Hadoop生态系统的核心部分。 1. **安装Java运行环境**: Hadoop是基于Java的,因此在Windows上搭建Hadoop环境...

    hadoop的核心文件

    - **TaskTracker**(旧版本Hadoop)/ **NodeManager**(新版本Hadoop YARN):运行在各个节点上,执行由JobTracker/ResourceManager分配的任务。 - **Mapper**:处理输入数据,将原始数据转换为键值对。 - **...

    Windows 7 or 10 eclipse hadoop2.7.1 配置需要文件和工具

    这个过程涉及到多个步骤,包括安装必要的软件、配置环境变量以及整合Eclipse插件,以便在集成开发环境中无缝运行Hadoop程序。下面将详细介绍这个配置过程。 首先,你需要下载以下软件: 1. **Java Development Kit...

    hadoop-1.0.1.tar.gz官方版本

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的出现为大数据处理提供了高效、可靠...此外,通过对旧版本的研究,你可以发现一些经典问题和它们的解决方案,这对于解决新版本中的类似问题可能会有所帮助。

    hadoop安装包centos6.5-hadoop-2.6.4.tar.gz

    这个特定的压缩包文件 "centos6.5-hadoop-2.6.4.tar.gz" 是为在CentOS 6.5操作系统上安装Hadoop 2.6.4版本准备的。本文将详细讲解如何在CentOS 6.5系统中安装和配置Hadoop,以及Hadoop的基本工作原理。 首先,我们...

    myeclipse开发hadoop插件

    Hadoop-eclipse-plugin-2.6.0.jar是对应Hadoop 2.6.5版本的插件文件,它包含了与Hadoop集成所需的类和资源。 安装步骤如下: 1. **下载插件**:找到并下载与你的MyEclipse版本兼容的Hadoop-eclipse-plugin-2.6.0....

    hadoop中文文档

    这个“hadoop中文文档”提供了对Hadoop 0.18版本的详细解释,虽然不是最新的版本,但对于初学者而言,它是理解Hadoop基本概念、架构以及操作流程的理想资源。以下是基于该文档可能涵盖的一些关键知识点的详细解释: ...

    linux下编译过的hadoop jar包--hadoop-2.7.2.zip

    HDFS是一个分布式文件系统,它将大文件分割成多个块,并在集群中的多台机器上存储这些数据块的副本,增强了数据的容错性和可用性。HDFS的设计原则是高吞吐量数据访问,而不是低延迟,因此非常适合批处理任务。 三、...

    Hadoop学习总结.doc

    Hadoop在运行过程中会在多个地方留下运行痕迹,包括但不限于日志文件、监控指标等,这对于故障排查和性能调优至关重要。 #### 六、MapReduce源码分析总结 深入分析MapReduce的源代码可以帮助理解其内部实现细节,...

    hadoop mr程序0.20之后版本所需jar包

    此外,开发人员还需要了解如何编写符合新版本API的Mapper和Reducer类,以适应这些变化。 总的来说,理解并正确使用这些JAR包对于开发和部署在Hadoop集群上的MapReduce应用程序至关重要。正确配置和使用这些库可以...

    最新Hadoop学习笔记

    2. 下载Hadoop:从Apache官方网站获取最新稳定版Hadoop,根据系统选择合适的版本。 3. 解压Hadoop:将下载的压缩包解压到指定目录,如 `/opt/hadoop`。 4. 配置环境变量:在`~/.bashrc`或`~/.bash_profile`文件中...

    hadoop-common-0.23.8.jar_hadoop_

    本文将深入探讨Hadoop Common 0.23.8版本,这个jar文件是Hadoop用户进行数据处理的重要资源。 Hadoop Common是Hadoop项目的基础模块,包含了Hadoop运行所必需的各种通用库和实用程序。这个组件不仅为HDFS(Hadoop...

    Hadoop课程实验和报告——Hadoop安装实验报告

    需要注意的是,Hadoop支持三种运行模式:单机单节点模式、单机多节点的伪分布模式和多机多节点分布模式。 二、Hadoop和Eclipse的结合 Hadoop可以与Eclipse集成,以便于项目的开发和调试。首先,需要下载Eclipse,...

    Hadoop创建详细过程

    需要手动创建一个名为input的目录,用于存放Hadoop需要处理的输入文件,同时还需要创建输出目录,用来存放程序运行后的结果。 在Hadoop中有多种运行模式,包括本地模式(LocalMode)和伪分布式模式(Pseudo-...

Global site tag (gtag.js) - Google Analytics