基于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分布式文件系统(HDFS)的工作原理至关重要。下面将详细阐述Hadoop的核心组件、HDFS的特性以及如何在Hadoop环境中...
在升级Hadoop版本或迁移系统时,必须确保这些库文件与新环境匹配,并进行适当的更新或迁移。 总之,“Hadoop64位库文件”压缩包是Hadoop在64位系统上运行的基石,包含了与操作系统交互所需的底层支持。正确地部署和...
在Hadoop 0.19.x版本中,提供了一个名为`MultipleOutputFormat`的类,它允许MapReduce任务输出多个文件并自定义文件名。但是,从Hadoop 0.20.x开始,`MultipleOutputFormat`及其所在包的类被标记为"已过时",这意味...
这个版本包含了所有必要的组件,如HDFS、MapReduce和YARN(Yet Another Resource Negotiator),它们是Hadoop生态系统的核心部分。 1. **安装Java运行环境**: Hadoop是基于Java的,因此在Windows上搭建Hadoop环境...
- **TaskTracker**(旧版本Hadoop)/ **NodeManager**(新版本Hadoop YARN):运行在各个节点上,执行由JobTracker/ResourceManager分配的任务。 - **Mapper**:处理输入数据,将原始数据转换为键值对。 - **...
这个过程涉及到多个步骤,包括安装必要的软件、配置环境变量以及整合Eclipse插件,以便在集成开发环境中无缝运行Hadoop程序。下面将详细介绍这个配置过程。 首先,你需要下载以下软件: 1. **Java Development Kit...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的出现为大数据处理提供了高效、可靠...此外,通过对旧版本的研究,你可以发现一些经典问题和它们的解决方案,这对于解决新版本中的类似问题可能会有所帮助。
这个特定的压缩包文件 "centos6.5-hadoop-2.6.4.tar.gz" 是为在CentOS 6.5操作系统上安装Hadoop 2.6.4版本准备的。本文将详细讲解如何在CentOS 6.5系统中安装和配置Hadoop,以及Hadoop的基本工作原理。 首先,我们...
Hadoop-eclipse-plugin-2.6.0.jar是对应Hadoop 2.6.5版本的插件文件,它包含了与Hadoop集成所需的类和资源。 安装步骤如下: 1. **下载插件**:找到并下载与你的MyEclipse版本兼容的Hadoop-eclipse-plugin-2.6.0....
这个“hadoop中文文档”提供了对Hadoop 0.18版本的详细解释,虽然不是最新的版本,但对于初学者而言,它是理解Hadoop基本概念、架构以及操作流程的理想资源。以下是基于该文档可能涵盖的一些关键知识点的详细解释: ...
HDFS是一个分布式文件系统,它将大文件分割成多个块,并在集群中的多台机器上存储这些数据块的副本,增强了数据的容错性和可用性。HDFS的设计原则是高吞吐量数据访问,而不是低延迟,因此非常适合批处理任务。 三、...
Hadoop在运行过程中会在多个地方留下运行痕迹,包括但不限于日志文件、监控指标等,这对于故障排查和性能调优至关重要。 #### 六、MapReduce源码分析总结 深入分析MapReduce的源代码可以帮助理解其内部实现细节,...
此外,开发人员还需要了解如何编写符合新版本API的Mapper和Reducer类,以适应这些变化。 总的来说,理解并正确使用这些JAR包对于开发和部署在Hadoop集群上的MapReduce应用程序至关重要。正确配置和使用这些库可以...
2. 下载Hadoop:从Apache官方网站获取最新稳定版Hadoop,根据系统选择合适的版本。 3. 解压Hadoop:将下载的压缩包解压到指定目录,如 `/opt/hadoop`。 4. 配置环境变量:在`~/.bashrc`或`~/.bash_profile`文件中...
本文将深入探讨Hadoop Common 0.23.8版本,这个jar文件是Hadoop用户进行数据处理的重要资源。 Hadoop Common是Hadoop项目的基础模块,包含了Hadoop运行所必需的各种通用库和实用程序。这个组件不仅为HDFS(Hadoop...
需要注意的是,Hadoop支持三种运行模式:单机单节点模式、单机多节点的伪分布模式和多机多节点分布模式。 二、Hadoop和Eclipse的结合 Hadoop可以与Eclipse集成,以便于项目的开发和调试。首先,需要下载Eclipse,...
需要手动创建一个名为input的目录,用于存放Hadoop需要处理的输入文件,同时还需要创建输出目录,用来存放程序运行后的结果。 在Hadoop中有多种运行模式,包括本地模式(LocalMode)和伪分布式模式(Pseudo-...