MapReduce是一种编程模型,用于处理和生成大数据集,它由两个主要阶段组成:Map阶段和Reduce阶段,在Map阶段,输入数据被分割成多个独立的块,然后每个块被映射到一个键值对,在Reduce阶段,所有具有相同键的键值对被组合在一起,并使用一个reduce函数进行处理。
以下是一个简单的MapReduce应用示例,用于统计文本中单词的出现次数:
1、编写Mapper类:
import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class WordCountMapper 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 { String[] words = value.toString().split("\s+"); for (String w : words) { word.set(w); context.write(word, one); } } }
2、编写Reducer类:
import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } }
3、编译并运行MapReduce应用:
确保已经安装了Hadoop和Java环境,将上述代码保存为WordCountMapper.java
和WordCountReducer.java
文件,使用以下命令编译这两个类:
$ javac classpathhadoop classpath
d wordcount_classes WordCountMapper.java WordCountReducer.java
编译成功后,会生成一个名为wordcount_classes
的目录,其中包含编译后的.class
文件,创建一个名为wordcount.jar
的JAR包,包含所有编译后的类:
$ jar cvf wordcount.jar C wordcount_classes/ .
使用以下命令运行MapReduce作业:
$ hadoop jar wordcount.jar org.apache.hadoop.examples.WordCount input_path output_path
input_path
是HDFS上存储输入数据的路径,output_path
是要将结果写入的HDFS路径。
$ hadoop jar wordcount.jar org.apache.hadoop.examples.WordCount /user/hadoop/input /user/hadoop/output
运行完成后,可以在HDFS上查看output_path
目录下的结果。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/825056.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复