hadoop--mapreduce代码:WordCount

本文介绍了一个基于Hadoop的词频统计应用示例,包括Mapper和Reducer的具体实现细节,展示了如何通过MapReduce编程模型来处理大规模文本数据的词频统计任务。

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

package com.hadoop.sample;

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.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.util.GenericOptionsParser;

public class WordCount {
	//继承mapper接口,设置map的输入类型为<Object,Text>
	//输出类型为<Text,IntWritable>
	public static class Map extends Mapper<Object,Text,Text,IntWritable>{
		//one表示单词出现一次
		private static IntWritable one = new IntWritable(1);
		//word存储切下的单词
		private Text word = new Text();
		public void map(Object key,Text value,Context context) throws IOException,InterruptedException{
			//对输入的行切词
			StringTokenizer st = new StringTokenizer(value.toString());
			while(st.hasMoreTokens()){
				word.set(st.nextToken());//切下的单词存入word
				context.write(word, one);
			}
		}
	}
	//继承reducer接口,设置reduce的输入类型<Text,IntWritable>
	//输出类型为<Text,IntWritable>
	public static class Reduce extends Reducer<Text,IntWritable,Text,IntWritable>{
		//result记录单词的频数
		private static IntWritable result = new IntWritable();
		public void reduce(Text key,Iterable<IntWritable> values,Context context) throws IOException,InterruptedException{
			int sum = 0;
			//对获取的<key,value-list>计算value的和
			for(IntWritable val:values){
				sum += val.get();
			}
			//将频数设置到result
			result.set(sum);
			//收集结果
			context.write(key, result);
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		Configuration conf = new Configuration();
		//检查运行命令
		String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
		if(otherArgs.length != 2){
			System.err.println("Usage WordCount <int> <out>");
			System.exit(2);
		}
		//配置作业名
		Job job = new Job(conf,"word count");
		//配置作业各个类
		job.setJarByClass(WordCount.class);
		job.setMapperClass(Map.class);
		job.setCombinerClass(Reduce.class);
		job.setReducerClass(Reduce.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
		FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}

}
<think>嗯,用户在使用Hadoop 3.1.3运行WordCount示例时遇到了连接ResourceManager的问题,需要查看相关日志来排查。首先,我需要回忆Hadoop的日志文件通常存放在哪里。根据引用[3]和[4],Hadoop的配置文件在$HADOOP_HOME/etc/hadoop目录下,而日志可能存放在安装目录的logs子目录里。用户需要检查ResourceManager的日志,可能的位置是$HADOOP_HOME/logs/下的yarn相关文件。 接下来,用户可能遇到的连接问题可能有多种原因,比如网络配置错误、服务未启动、端口被占用或者防火墙设置。需要引导用户检查ResourceManager是否正在运行,可以通过jps命令查看Java进程。然后,确认配置文件是否正确,特别是yarn-site.xml中的资源管理器地址是否正确,如引用[4]提到的配置文件路径,用户需要检查yarn.resourcemanager.hostname或相关属性是否正确指向目标主机。 另外,网络连通性也很重要。用户需要测试ResourceManager所在节点的IP和端口是否可访问,比如使用telnet或curl检查端口是否开放。例如,ResourceManager的默认端口是8032,8030,8031等,需要确认这些端口是否被正确配置且在防火墙中开放。 日志分析方面,用户需要查看ResourceManager的日志文件,查找错误或异常信息。常见的错误可能包括连接超时、认证失败或资源不足。同时,客户端的日志也可能提供线索,比如应用程序提交时的错误信息。 如果用户按照这些步骤仍然无法解决问题,可能需要进一步检查Hadoop的环境变量配置是否正确,如JAVA_HOME是否设置,参考引用[3]中的Java版本是否正确。此外,确认所有节点的配置文件一致,特别是多节点集群中,配置同步非常重要。 最后,建议用户尝试重启Hadoop服务,有时候服务可能因为临时问题未能正确启动。同时,查阅Hadoop官方文档或社区支持,看看是否有已知的问题或解决方案。</think>### 排查Hadoop WordCount连接ResourceManager问题的步骤 #### 1. **确认ResourceManager服务状态** - 使用`jps`命令检查ResourceManager是否运行: ```bash jps | grep ResourceManager ``` 若未显示进程,需启动服务: ```bash yarn --daemon start resourcemanager ``` 引用配置路径:$HADOOP_HOME/etc/hadoop/yarn-site.xml[^4]。 #### 2. **检查关键配置文件** - **yarn-site.xml**:确保`yarn.resourcemanager.hostname`指向正确的主机名/IP,例如: ```xml <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop301</value> <!-- 需与实际主机名一致 --> </property> ``` - **core-site.xml**:确认`fs.defaultFS`指向有效的NameNode地址: ```xml <property> <name>fs.defaultFS</name> <value>hdfs://hadoop301:8020</value> </property> ``` 配置文件路径参考:$HADOOP_HOME/etc/hadoop/。 #### 3. **验证网络与端口** - 使用`telnet`测试端口连通性(默认ResourceManager端口为8032): ```bash telnet hadoop301 8032 ``` 若不通,检查防火墙规则: ```bash firewall-cmd --list-ports | grep 8032 ``` #### 4. **分析日志文件** - **ResourceManager日志路径**: ```bash tail -f $HADOOP_HOME/logs/yarn-*-resourcemanager-*.log ``` 关注以下错误类型: - `Connection refused`: 服务未启动或端口冲突 - `Authentication failed`: 安全认证配置错误 - `No route to host`: 网络隔离或DNS解析问题 - **客户端日志**(如提交WordCount任务时): ```bash grep "RMProxy" $HADOOP_HOME/logs/hadoop-*-client-*.log ``` #### 5. **补充验证步骤** - **环境变量检查**: ```bash echo $JAVA_HOME # 需与引用[3]中的Java版本一致(1.8.0_311) echo $HADOOP_HOME # 应指向/opt/softs/hadoop3.1.3[^1] ``` - **服务重启**: ```bash stop-yarn.sh && start-yarn.sh ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值