`

编写WordCount程序

 
阅读更多

 

编写自己WordCount程序

package rock.lee.wordcount;

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;

public class MyWordCount {

	/**
	 * @author Rock Lee
	 * 
	 * @Description 
	 * LongWritable,输入
	 * key类型 Text, 
	 * 输入value类型 
	 * Text, 输出key类型
	 * IntWritable,输出vlaue类型
	 */
	static class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
		private static final IntWritable ONE = new IntWritable(1);

		@Override
		protected void map(LongWritable key, Text value,
				Mapper<LongWritable, Text, Text, IntWritable>.Context context)
				throws IOException, InterruptedException {

			//读取每行的数据
			String lineValue = value.toString();
			//对每行数据进行分割\r\n\t
			StringTokenizer stzer = new StringTokenizer(lineValue);
			Text text = new Text();
			while (stzer.hasMoreTokens()) {
				//获取分割后的每个值
				String val = stzer.nextToken();
				//key值
				text.set(val);
				//key-->value
				context.write(text, ONE);
			}
		}
	}
	
	/**
	 * 
	 * @author Rock Lee
	 *  
	 * @Description
	 */
	static class MyReduce extends Reducer<Text, IntWritable, Text, IntWritable> {

		@Override
		protected void reduce(Text key, Iterable<IntWritable> values,Reducer<Text, IntWritable, Text, IntWritable>.Context context)
				throws IOException, InterruptedException {
			int sum = 0;
			for (IntWritable val : values) {
				sum+= val.get();
			}
			context.write(key, new IntWritable(sum));
		}
	}

	public static void main(String[] args) throws Exception {
		//获取配置信息
		Configuration configuration = new Configuration();
		
		//创建任务,设置名称
		Job job = new Job(configuration,"WC");
		
		//设置任务运行类
		job.setJarByClass(MyWordCount.class);
		
		//设置Mapper和Reducer类
		job.setMapperClass(MyMapper.class);
		job.setReducerClass(MyReduce.class);
		
		//设置输入/输出路径
		FileInputFormat.addInputPath(job, new Path(args[0]));
		FileOutputFormat.setOutputPath(job, new Path(args[1]));
		
		//设置输出结果key/value类型
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		
		//提交任务,等待运行结果,并在客户端显示运行信息
		boolean success = job.waitForCompletion(true);
		System.exit(success?0:1);
		
	}
}

 将程序打包成wc.jar上传到Linux上,创建文件one、two

[root@centos data]# more one
hello word bye word
[root@centos data]# more two
hello word bye hadoop

 把文件上传到HDFS上,目录为/opt/wc/input

[root@centos data]# hadoop fs -lsr /
-rw-r--r--   1 root supergroup         21 2015-06-11 04:08 /opt/wc/input/one
-rw-r--r--   1 root supergroup         23 2015-06-11 04:08 /opt/wc/input/two

运行wc.jar

[root@centos data]# hadoop jar wc.jar /opt/wc/input/ /opt/wc/output
Warning: $HADOOP_HOME is deprecated.

15/06/11 04:29:10 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
15/06/11 04:29:10 INFO input.FileInputFormat: Total input paths to process : 2
15/06/11 04:29:10 INFO util.NativeCodeLoader: Loaded the native-hadoop library
15/06/11 04:29:10 WARN snappy.LoadSnappy: Snappy native library not loaded
15/06/11 04:29:10 INFO mapred.JobClient: Running job: job_201506110402_0006
15/06/11 04:29:11 INFO mapred.JobClient:  map 0% reduce 0%
15/06/11 04:29:32 INFO mapred.JobClient:  map 50% reduce 0%
15/06/11 04:29:42 INFO mapred.JobClient:  map 100% reduce 0%
15/06/11 04:30:05 INFO mapred.JobClient:  map 100% reduce 100%
15/06/11 04:30:05 INFO mapred.JobClient: Job complete: job_201506110402_0006
15/06/11 04:30:05 INFO mapred.JobClient: Counters: 29
15/06/11 04:30:05 INFO mapred.JobClient:   Job Counters
15/06/11 04:30:05 INFO mapred.JobClient:     Launched reduce tasks=1
15/06/11 04:30:05 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=40074
15/06/11 04:30:05 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
15/06/11 04:30:05 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
15/06/11 04:30:05 INFO mapred.JobClient:     Launched map tasks=2
15/06/11 04:30:05 INFO mapred.JobClient:     Data-local map tasks=2
15/06/11 04:30:05 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=21707
15/06/11 04:30:05 INFO mapred.JobClient:   File Output Format Counters
15/06/11 04:30:05 INFO mapred.JobClient:     Bytes Written=30
15/06/11 04:30:05 INFO mapred.JobClient:   FileSystemCounters
15/06/11 04:30:05 INFO mapred.JobClient:     FILE_BYTES_READ=96
15/06/11 04:30:05 INFO mapred.JobClient:     HDFS_BYTES_READ=260
15/06/11 04:30:05 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=160215
15/06/11 04:30:05 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=30
15/06/11 04:30:05 INFO mapred.JobClient:   File Input Format Counters
15/06/11 04:30:05 INFO mapred.JobClient:     Bytes Read=44
15/06/11 04:30:05 INFO mapred.JobClient:   Map-Reduce Framework
15/06/11 04:30:05 INFO mapred.JobClient:     Map output materialized bytes=102
15/06/11 04:30:05 INFO mapred.JobClient:     Map input records=4
15/06/11 04:30:05 INFO mapred.JobClient:     Reduce shuffle bytes=102
15/06/11 04:30:05 INFO mapred.JobClient:     Spilled Records=16
15/06/11 04:30:05 INFO mapred.JobClient:     Map output bytes=74
15/06/11 04:30:05 INFO mapred.JobClient:     CPU time spent (ms)=820
15/06/11 04:30:05 INFO mapred.JobClient:     Total committed heap usage (bytes)=413466624
15/06/11 04:30:05 INFO mapred.JobClient:     Combine input records=0
15/06/11 04:30:05 INFO mapred.JobClient:     SPLIT_RAW_BYTES=216
15/06/11 04:30:05 INFO mapred.JobClient:     Reduce input records=8
15/06/11 04:30:05 INFO mapred.JobClient:     Reduce input groups=4
15/06/11 04:30:05 INFO mapred.JobClient:     Combine output records=0
15/06/11 04:30:05 INFO mapred.JobClient:     Physical memory (bytes) snapshot=313032704
15/06/11 04:30:05 INFO mapred.JobClient:     Reduce output records=4
15/06/11 04:30:05 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=1127878656
15/06/11 04:30:05 INFO mapred.JobClient:     Map output records=8

  /opt/wc/output目录不能存在,如果存在会有异常

Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory /opt/wc/output already exists

 查看结果

[root@centos data]# hadoop fs -text /opt/wc/output/part-r-00000
Warning: $HADOOP_HOME is deprecated.

bye     2
hadoop  1
hello   2
word    3

 通过web方式,访问50075端口查看,这种方式不能直接通过IP访问,只能通过Linux主机名称,所以要在windows的hosts文件配置主机名称到IP地址的映射



 

WorldCount程序流程详解

 

 

 



 

  • 大小: 19.4 KB
  • 大小: 447.3 KB
分享到:
评论

相关推荐

    实验3 分析和编写 WordCount 程序 (2021).html

    实验3 分析和编写 WordCount 程序 (2021).html

    centos下配置hadoop环境并运行wordcount程序

    最详细hadoop配置教程!centos下完美运行wordcount程序,从无到有,初学者必备!我自己亲自试了一遍并加以修改,准确无误~

    Hadoop的单机伪分布式搭建和运行第一个WordCount程序

    使用Java编写WordCount程序, import Hadoop的相关包,包括org.apache.hadoop.example.wordcount。 2. 配置WordCount程序 配置WordCount程序的运行参数,包括输入文件、输出文件和Mapper、Reducer的配置。 3. ...

    实验2-在Hadoop平台上部署WordCount程序1

    四、编写WordCount程序 WordCount程序通常用Java编写,需要实现`Mapper`和`Reducer`接口。`Mapper`负责读取输入数据,分词并生成键值对(, 1&gt;),而`Reducer`则汇总这些键值对,得到每个单词的总频次。 ```java ...

    实验2-在Hadoop平台上部署WordCount程序-孙淼1

    实验2的目的是在Hadoop平台上部署WordCount程序,以此来理解和体验云计算的基础应用。这个实验主要涉及以下几个关键知识点: 1. **Linux系统基础**:实验要求学生具备Linux系统的使用知识,包括基本的命令行操作、...

    实验8 Flink初级编程实践

    3. **编写Java代码**:在IntelliJ IDEA中,使用Java API编写WordCount程序,这是数据分析的基本示例,统计文本中的单词出现频率。 4. **构建与打包**:借助Maven,一个项目管理和综合工具,将Java源代码编译、打包...

    eclipse下运行wordcount

    3. **编写WordCount程序**:"WordCount.java"通常包含两个主要部分:`Mapper`和`Reducer`。Mapper负责将输入文本分割成单词,Reducer则统计每个单词的总数。 ```java // 简化的WordCount示例 public static ...

    基于HDFS的spark分布式Scala程序测试

    在IntelliJ IDEA中创建一个新的Scala项目,并添加必要的依赖库(如Spark Core),就可以按照上面的方式编写WordCount程序。 #### 四、验证程序正确性 在完成程序编写后,需要验证程序是否能够正确运行并得到预期的...

    将hadoop与java的编译器idea相连

    为了实现Hadoop与Java编译器IntelliJ IDEA的连接,并在此基础上编写WordCount程序,首先需要确保具备以下环境: 1. **安装JDK 1.8**:这是基础中的基础,所有后续操作都需要在一个有效的JDK环境下进行。如果系统中...

    大数据实验报告Windows环境下安装Spark及RDD编程和Spark编程实现wordcount.doc

    * 使用 Spark 编程实现 wordcount Scala 程序,首先需要导入 spark 的 jar 包,然后编写 wordcount 程序。 * 使用 SparkContext 对象来创建 RDD,并使用 textFile 方法读取文件。 * 使用 flatMap 方法将每一行文本...

    实验报告模板 - 大数据应用-实验八.docx

    通过编写WordCount程序,学生们能够直观地感受到Flink的流式处理能力,为后续更深入的大数据学习打下了坚实基础。实验过程流畅,按照老师提供的文档进行,使学习过程更为高效,激发了学生对大数据领域的探索兴趣。

    使用IDEA开发Scala程序.docx

    在src/main/scala目录下,创建一个名为"WordCount.scala"的文件,编写WordCount程序的核心逻辑。 6. 配置pom.xml文件。这是Maven的项目对象模型文件,需要在此文件中声明Spark和Scala的依赖,以及其他必要的库。 7...

    nc111nt_wordcount_

    例如,在Python中,可以使用pyspark库来编写WordCount程序。 对于压缩文件"nc111nt",如果它包含的是文本数据,可能需要先解压,然后用上述方法进行处理。如果是结果文件,可能存储了每个单词及其计数,可以解析...

    flink安装包以及wordcount

    2. **编写WordCount程序**: 使用Java或Scala,创建一个Flink程序,导入必要的库,并定义一个Source(数据输入)、Transformation(如flatMap和keyBy)和Sink(数据输出)。 ```java import org.apache.flink.api....

    《大数据技术原理与应用》实验一WordCount.pdf

    实验步骤包括在Hadoop分布式文件系统(HDFS)上创建输入文件目录,将本地文件上传到HDFS,并使用IntelliJ IDEA创建Java项目来编写WordCount程序。在Java代码中,定义了两个类:Map和Reduce。Map类实现了Mapper接口,...

    使用Scala设计WordCount程序

    使用Scala设计WordCount程序 软件环境: hadoop-2.6.5.tar.gz spark-1.6.2-bin-hadoop2.6.tgz scala-2.10.4.gz scala-SDK-4.0.0-vfinal-2. 11-linux.gtk.x86_64.tar.gz

    Hadoop下Eclipse用Java编程实现WordCount

    2. **编写WordCount程序**: - 实现`Mapper`接口处理输入数据,统计单词出现次数。 - 实现`Reducer`接口汇总各个`Mapper`的结果。 - 创建`Job`实例,并设置输入输出路径。 - 调用`Job.waitForCompletion(true)`...

    MapReduce开发 大数据 入门 学习

    编写WordCount程序时,需要继承Mapper和Reducer类,重写map和reduce方法。Mapper的map方法处理输入的, value&gt;对,将其拆分为单词并生成新的, 1&gt;对;Reducer的reduce方法对相同key的value求和,得到单词的总数。最后...

    WordCount:用C ++编写的Word Count程序

    在C++中编写WordCount程序,需要掌握的关键概念包括字符串操作、输入/输出流(I/O Stream)、文件处理和简单的数据结构。 首先,程序通常从读取文件开始。C++中的`fstream`库提供了读取和写入文件的能力。例如,...

Global site tag (gtag.js) - Google Analytics