- 浏览: 59791 次
- 性别:
- 来自: 北京
最新评论
-
scu_cxh:
您好,我在学习hadoop方面的东西,想做一个对task监控的 ...
JobClient应用概述 -
bennie19870116:
看不到图呢...
Eclipse下配置使用Hadoop插件
一、背景
Hadoop的MapReduce中多文件输出默认是TextOutFormat,输出为part-r- 00000和part-r-00001依次递增的文件名。hadoop提供了
MultipleOutputFormat类,重写该类可实现定制自定义的文件名。
二、技术细节
1.环境:hadoop 0.19(目前hadoop 0.20.2对MultipleOutputFormat支持不好),linux。
2.实现MultipleOutputFormat代码例子如下:
public class WordCount {
public static class TokenizerMapper extends MapReduceBase implements
Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable count = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
output.collect(word, count);
}
}
}
public static class IntSumReducer extends MapReduceBase implements
Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
result.set(sum);
output.collect(key, result);
}
}
public static class WordCountOutputFormat extends
MultipleOutputFormat<Text, IntWritable> {
private TextOutputFormat<Text, IntWritable> output = null;
@Override
protected RecordWriter<Text, IntWritable> getBaseRecordWriter(
FileSystem fs, JobConf job, String name, Progressable arg3)
throws IOException {
if (output == null) {
output = new TextOutputFormat<Text, IntWritable>();
}
return output.getRecordWriter(fs, job, name, arg3);
}
@Override
protected String generateFileNameForKeyValue(Text key,
IntWritable value, String name) {
char c = key.toString().toLowerCase().charAt(0);
if (c >= 'a' && c <= 'z') {
return c + ".txt";
}
return "result.txt";
}
}
public static void main(String[] args) throws Exception {
JobConf job = new JobConf(WordCount.class);
job.setJobName("wordcount");
String[] otherArgs = new GenericOptionsParser(job, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setOutputFormat(WordCountOutputFormat.class);// 设置输出格式
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
JobClient.runJob(job);
}
}
3.在main函数中设置输出格式,job.setOutputFormat(WordCountOutputFormat.class);实现WordCountOutputFormat类继承MultipleOutputFormat类,重写getBaseRecordWriter和generateFileNameForKeyValue函数,在generateFileNameForKeyValue函数中参数String name为默认的输出part-00000:
public static class WordCountOutputFormat extends
MultipleOutputFormat<Text, IntWritable> {
private TextOutputFormat<Text, IntWritable> output = null;
@Override
protected RecordWriter<Text, IntWritable> getBaseRecordWriter(
FileSystem fs, JobConf job, String name, Progressable arg3)
throws IOException {
if (output == null) {
output = new TextOutputFormat<Text, IntWritable>();
}
return output.getRecordWriter(fs, job, name, arg3);
}
@Override
protected String generateFileNameForKeyValue(Text key,
IntWritable value, String name) {
char c = key.toString().toLowerCase().charAt(0);
if (c >= 'a' && c <= 'z') {
return c + ".txt";
}
return "result.txt";
}
}
4.程序结果为:
-rw-r--r-- 2 root supergroup 7 2010-08-07 17:44 /hua/multipleoutput1/c.txt
-rw-r--r-- 2 root supergroup 6 2010-08-07 17:44 /hua/multipleoutput1/h.txt
-rw-r--r-- 2 root supergroup 7 2010-08-07 17:44 /hua/multipleoutput1/k.txt
-rw-r--r-- 2 root supergroup 6 2010-08-07 17:44 /hua/multipleoutput1/m.txt
-rw-r--r-- 2 root supergroup 28 2010-08-07 17:44 /hua/multipleoutput1/result.txt
-rw-r--r-- 2 root supergroup 6 2010-08-07 17:44 /hua/multipleoutput1/t.txt
如果generateFileNameForKeyValue返回return c + "_" + name + ".txt";结果为:
-rw-r--r-- 2 root supergroup 7 2010-08-07 17:23 /hua/multipleoutput/c_part-00000.txt
-rw-r--r-- 2 root supergroup 6 2010-08-07 17:23 /hua/multipleoutput/h_part-00000.txt
-rw-r--r-- 2 root supergroup 7 2010-08-07 17:23 /hua/multipleoutput/k_part-00000.txt
-rw-r--r-- 2 root supergroup 6 2010-08-07 17:23 /hua/multipleoutput/m_part-00000.txt
-rw-r--r-- 2 root supergroup 28 2010-08-07 17:23 /hua/multipleoutput/result.txt
-rw-r--r-- 2 root supergroup 6 2010-08-07 17:23 /hua/multipleoutput/t_part-00000.txt
三、总结
虽然API用的是0.19的,但是使用0.20的API一样可用,只是会提示方法已过时而已。
发表评论
-
Hadoop的基准测试工具使用(部分转载)
2011-01-21 11:58 1565一、背景由于以前没有 ... -
分布式集群中的硬件选择
2011-01-21 11:58 1004一、背景最近2个月时间一直在一个阴暗的地下室的角落里工作,主要 ... -
Map/Reduce的内存使用设置
2011-01-21 11:57 1608一、背景今天采用10台 ... -
Hadoop开发常用的InputFormat和OutputFormat(转)
2011-01-21 11:55 1458Hadoop中的Map Reduce框架依 ... -
SecondaryNamenode应用摘记
2010-11-04 15:54 1030一、环境 Hadoop 0.20.2、JDK 1.6、 ... -
Zookeeper分布式安装手册
2010-10-27 09:41 1296一、安装准备1、下载zookeeper-3.3.1,地址:ht ... -
Hadoop分布式安装
2010-10-27 09:41 983一、安装准备1、下载hadoop 0.20.2,地址:http ... -
Map/Reduce使用杂记
2010-10-27 09:40 909一、硬件环境1、CPU:Intel(R) Core(TM)2 ... -
Hadoop中自定义计数器
2010-10-27 09:40 1497一、环境1、hadoop 0.20.22、操作系统Linux二 ... -
Map/Reduce中的Partiotioner使用
2010-10-27 09:39 886一、环境1、hadoop 0.20.22 ... -
Map/Reduce中的Combiner的使用
2010-10-27 09:38 1156一、作用1、combiner最基本是实现本地key的聚合,对m ... -
Hadoop中DBInputFormat和DBOutputFormat使用
2010-10-27 09:38 2401一、背景 为了方便MapReduce直接访问关系型数据 ... -
Map/Reduce中公平调度器配置
2010-10-27 09:37 1507一、背景一般来说,JOB ... -
无法启动Datanode的问题
2010-10-27 09:37 2367一、背景早上由于误删namenode上的hadoop文件夹,在 ... -
Map/Reduce的GroupingComparator排序简述
2010-10-27 09:36 1310一、背景排序对于MR来说是个核心内容,如何做好排序十分的重要, ... -
Map/Reduce中分区和分组的问题
2010-10-27 09:35 1103一、为什么写分区和分组在排序中的作用是不一样的,今天早上看书, ... -
关于Map和Reduce最大的并发数设置
2010-10-27 09:34 1216一、环境1、hadoop 0.20.22、操作系统 Linux ... -
关于集群数据负载均衡
2010-10-27 09:33 857一、环境1、hadoop 0.20.22、操作系统 Linux ... -
Map/Reduce执行流程简述
2010-10-27 09:33 957一、背景最近总在弄MR的东西,所以写点关于这个方面的内容,总结 ... -
Hadoop集群中关于SSH认证权限的问题
2010-10-27 09:32 868今天回北京了,想把在外地做的集群移植回来,需要修改ip地址和一 ...
相关推荐
win10下hadoop2.7.2安装包及hadoop.dll和winutils.exe,解决win10下安装hadoop无法使用问题
Hadoop API使用材料,与大家共享!
hadoop插件 使用 直接放在eclipse 工具的目录下
在windows环境下开发hadoop时,需要配置HADOOP_HOME环境变量,变量值D:\hadoop-common-2.7.3-bin-master,并在Path追加%HADOOP_HOME%\bin,有可能出现如下错误: org.apache.hadoop.io.nativeio.NativeIO$Windows....
这个是描述如果设置MultipleOutputFormat,使得mapreduce能够根据文件进行分目录输出
项目负责人tomwhite透过本书详细阐述了如何使用hadoop构建可靠、可伸缩的分布式系统,程序员可从中探索如何分析海量数据集,管理员可以从中了解如何安装和运行hadoop集群。 本书结合丰富的案例来展示如何用hadoop...
Hadoop使用常见问题以及解决方法,简单实用
分布式文件系统软件,Hadoop的命名使用手册,官方简体中文版
hadoop使用sqoop-1.2.0-CDH3B4.tar.gz需要将此包的hadoop-core-0.20.2-CDH3B4拷贝到sqoop/lib目录下
摘要 Hadoop 是一个处理、存储和分析海量的...Hadoop 和 Google 内部使用的分布式计算系统原理相同,其开源特性使其成为分布式计算系统的事实上的国际标准。 Yahoo、Facebook、Amazon,以及国内的百度、阿里巴巴等众多
Hadoop教学使用java_jdk 高可用版本 jdk-8u161-linux-x64.tar.gz java1.8的Linux版本jdk 仅用于教学使用,方便学生下载。
《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf...
hadoop使用distcp问题解决 然后用distcp从1.0.3的集群拷数据到2.0.1的集群中。 遇到问题处理
全面教你在Linux上使用hadoop 启动与关闭 启动HADOOP 1. 进入HADOOP_HOME目录。 2. 执行sh bin/start-all.sh 单个起 :/opt/hadoop-1.0.3/bin/hadoop-daemon.sh start datanode /opt/hadoop-1.0.3/bin/hadoop-...
利用ansible 自动 安装Hadoop 集群
hadoop 使用 maven3.3 仓库 5hadoop 使用 maven3.3 仓库 7
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...
官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程框架,设计用于跨电脑集群来 处理大数据。Hadoop 是一个能够让用户轻松搭建和使用的...
Hadoop使用常见问题以及解决方法.doc Hadoop使用常见问题以及解决方法.doc
Hadoop_Hadoop集群(第4期)_SecureCRT使用 Hadoop_Hadoop集群(第5期)_Hadoop安装配置 Hadoop_Hadoop集群(第5期副刊)_JDK和SSH无密码配置 Hadoop_Hadoop集群(第6期)_WordCount运行详解 Hadoop_Hadoop集群(第7...