文档章节

Hadoop中的MultipleOutput使用(45)

肖鋭
 肖鋭
发布于 2014/08/12 14:22
字数 543
阅读 1034
收藏 2

原数据:

            

预想处理后的结果:

            

   MyMapper.java

package com.xr.text;

import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MyMapper extends Mapper<LongWritable, Text, Text, Text> {

	protected void map(LongWritable key, Text value,Context context)
			throws IOException, InterruptedException {
		String[] split = value.toString().split(";");
		context.write(new Text(split[0]), new Text(split[1]));
	}
	
}

  MyReducer.java

package com.xr.text;

import java.io.IOException;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;

public class MyReducer extends Reducer<Text, Text, Text, Text> {
	private MultipleOutputs mos;
	
	/**
	 * start before set MultipleOutputs;
	 */
	protected void setup(Context context) throws IOException,
			InterruptedException {
		mos = new MultipleOutputs(context);
	}

	protected void reduce(Text k1, Iterable<Text> value,Context context)
			throws IOException, InterruptedException {
		String key = k1.toString();
		for(Text t : value){
			if("中国".equals(key)){
				mos.write("china",new Text("中国"), t);
			}else if("美国".equals(key)){
				mos.write("usa",new Text("美国"),t);
			}else if("中国人".equals(key)){
				mos.write("cpeople",new Text("中国人"),t);
			}
		}
	}

	/**
	 * close MultipleOutputs;
	 */
	protected void cleanup(Context context)
			throws IOException, InterruptedException {
		mos.close();
	}
}

  JobTest.java

package com.xr.text;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
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 JobTest {
	
	public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
		String inputPath = "hdfs://192.168.75.100:9000/1.txt";
		String outputPath = "hdfs://192.168.75.100:9000/ceshi";
		Job job = new Job();
		job.setJarByClass(JobTest.class);
		job.setMapperClass(MyMapper.class);
		/**
		 * set MultipleOutput file name
		 */
		MultipleOutputs.addNamedOutput(job, "china", TextOutputFormat.class, Text.class, Text.class);
		MultipleOutputs.addNamedOutput(job, "usa", TextOutputFormat.class, Text.class, Text.class);
		MultipleOutputs.addNamedOutput(job, "cpeople", TextOutputFormat.class, Text.class, Text.class);
		
		job.setReducerClass(MyReducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(Text.class);
		
		
		FileInputFormat.setInputPaths(job, new Path(inputPath));
//		Configuration conf = new Configuration();
//		FileSystem fs = FileSystem.get(conf);
//		
//		if(fs.exists(new Path(outputPath))){
//			fs.delete(new Path(outputPath), true);
//		}
		FileOutputFormat.setOutputPath(job, new Path(outputPath));
		
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}

运行过程中报错:

14/08/12 12:44:02 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

14/08/12 12:44:02 ERROR security.UserGroupInformation: PriviledgedActionException as:Xr cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Xr\mapred\staging\Xr-1514460710\.staging to 0700

Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Xr\mapred\staging\Xr-1514460710\.staging to 0700

    at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689)

    at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662)

    at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509)

    at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344)

    at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189)

    at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116)

    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:918)

    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:912)

    at java.security.AccessController.doPrivileged(Native Method)

    at javax.security.auth.Subject.doAs(Subject.java:396)

    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149)

    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:912)

    at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)

    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)

    at com.xr.text.JobTest.main(JobTest.java:37)

错误解决方案:

        1.    把hadoop-core-1.1.2.jar中的FileUtil.class删除.

        2.    再把/org/apache/hadoop/fs/FileUtil.java从源码中copy出来

               

        3.    注释checkReturnValue()方法

       

运行时再次报错:

        java.lang.OutOfMemoryError: Java heap space

解决方案:

        


ok,job顺利执行。

生成以下文件:

        





                                                                                                                Date:2014.08.12 14:25

                                                                                                                Name:Xr















© 著作权归作者所有

肖鋭
粉丝 10
博文 62
码字总数 29531
作品 0
朝阳
程序员
私信 提问
centos单机安装Hadoop2.6

一,安装环境 硬件:虚拟机 操作系统:Centos 6.4 64位 IP:10.51.121.10 主机名:datanode-4 安装用户:root 二,安装JDK 安装JDK1.6或者以上版本。这里安装jdk1.6.0_45。 下载地址:http:...

x163麦芽糖
2016/11/09
28
0
HDFS 恢复某时刻删除的文件

Hadoop有一个“垃圾回收站”的功能,用于恢复在过去一段时间内被删除文件。若某个文件被删除了多次,你还可以恢复具体哪一次删除的文件。该功能默认是关闭状态,若想开启,需要在$HADOOP_HOM...

ericquan8
2015/11/01
279
0
hadoop环境初始化搭建

一、首先把hadoop二进制包和jdk的文件包download下来,并放置到合适目录的路径来解压(步骤省略) 二、在主机器上的hadoop解压出来的目录创建一个目录是专门放置hdfs的文件,把解压好的jdk包传...

wsw26
2017/12/13
0
0
win7下安装hadoop2.7.3报错了

hadoop-mapreduce-client-shuffle-2.7.3.jar;F:\cywin2\home\Administrator\hadoop-2. 7.3\share\hadoop\mapreduce\hadoop-mapreduce-examples-2.7.3.jar STARTUP_MSG: build = https://git-......

天池番薯
2017/07/19
118
1
Linux命令行下运行Hadoop单元测试

最近在学习Hadoop,在虚拟机上面的Centos系统下搭建了一个单机的Hadoop系统,对照《Hadoop权威指南》一边看一边运行里面的例子。由于大部分程序员都是用Eclipse来开发Hadoop程序,但我习惯于...

chyileon
2013/05/29
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

微信公众号开发 (4) 网页授权

一、前言 微信公众号开发 (1) 微信接入认证成为开发者 微信公众号开发 (2) 消息处理 微信公众号开发 (3) 菜单处理 本文将实现 网页授权 获取用户基本信息 网页授权流程 填写网页授权回调域名...

郑清
28分钟前
29
0
号外!号外!百度语音开源库更新了

开源:ReactNative集成百度语音开源库,在这篇文章中作者开源了一个ReactNative集成百度语音合成的组件库,今天通过查看Github上的关于开源react-native-baidu-vtts 的issues,有朋友提到了一...

凌宇之蓝
34分钟前
141
1
【springcloud】之Eureka Server集群搭建

Eureka是微服务架构中的注册中心,专门负责服务的注册与发现 ,里面有一个注册表,保存了各服务所在的机器和端口号 下面我们开始配置 在这里,我配置了两个eureka server 1.新建springboot+...

西元yg
54分钟前
73
0
0120 springboot集成Mybatis和代码生成器

在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子 . spring-jdbc封装的比较少...

春天springcarter
55分钟前
131
0
re.search和re.match有什么区别?

Python re模块中的search()和match()函数有什么区别? 我已经阅读了文档 ( 当前文档 ),但是我似乎从未记得它。 我一直在查找并重新学习它。 我希望有人会用示例清楚地回答它,以便(也许)...

技术盛宴
55分钟前
57
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部