编写自己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程序流程详解
相关推荐
实验3 分析和编写 WordCount 程序 (2021).html
最详细hadoop配置教程!centos下完美运行wordcount程序,从无到有,初学者必备!我自己亲自试了一遍并加以修改,准确无误~
使用Java编写WordCount程序, import Hadoop的相关包,包括org.apache.hadoop.example.wordcount。 2. 配置WordCount程序 配置WordCount程序的运行参数,包括输入文件、输出文件和Mapper、Reducer的配置。 3. ...
四、编写WordCount程序 WordCount程序通常用Java编写,需要实现`Mapper`和`Reducer`接口。`Mapper`负责读取输入数据,分词并生成键值对(, 1>),而`Reducer`则汇总这些键值对,得到每个单词的总频次。 ```java ...
实验2的目的是在Hadoop平台上部署WordCount程序,以此来理解和体验云计算的基础应用。这个实验主要涉及以下几个关键知识点: 1. **Linux系统基础**:实验要求学生具备Linux系统的使用知识,包括基本的命令行操作、...
3. **编写Java代码**:在IntelliJ IDEA中,使用Java API编写WordCount程序,这是数据分析的基本示例,统计文本中的单词出现频率。 4. **构建与打包**:借助Maven,一个项目管理和综合工具,将Java源代码编译、打包...
3. **编写WordCount程序**:"WordCount.java"通常包含两个主要部分:`Mapper`和`Reducer`。Mapper负责将输入文本分割成单词,Reducer则统计每个单词的总数。 ```java // 简化的WordCount示例 public static ...
在IntelliJ IDEA中创建一个新的Scala项目,并添加必要的依赖库(如Spark Core),就可以按照上面的方式编写WordCount程序。 #### 四、验证程序正确性 在完成程序编写后,需要验证程序是否能够正确运行并得到预期的...
为了实现Hadoop与Java编译器IntelliJ IDEA的连接,并在此基础上编写WordCount程序,首先需要确保具备以下环境: 1. **安装JDK 1.8**:这是基础中的基础,所有后续操作都需要在一个有效的JDK环境下进行。如果系统中...
* 使用 Spark 编程实现 wordcount Scala 程序,首先需要导入 spark 的 jar 包,然后编写 wordcount 程序。 * 使用 SparkContext 对象来创建 RDD,并使用 textFile 方法读取文件。 * 使用 flatMap 方法将每一行文本...
通过编写WordCount程序,学生们能够直观地感受到Flink的流式处理能力,为后续更深入的大数据学习打下了坚实基础。实验过程流畅,按照老师提供的文档进行,使学习过程更为高效,激发了学生对大数据领域的探索兴趣。
在src/main/scala目录下,创建一个名为"WordCount.scala"的文件,编写WordCount程序的核心逻辑。 6. 配置pom.xml文件。这是Maven的项目对象模型文件,需要在此文件中声明Spark和Scala的依赖,以及其他必要的库。 7...
例如,在Python中,可以使用pyspark库来编写WordCount程序。 对于压缩文件"nc111nt",如果它包含的是文本数据,可能需要先解压,然后用上述方法进行处理。如果是结果文件,可能存储了每个单词及其计数,可以解析...
2. **编写WordCount程序**: 使用Java或Scala,创建一个Flink程序,导入必要的库,并定义一个Source(数据输入)、Transformation(如flatMap和keyBy)和Sink(数据输出)。 ```java import org.apache.flink.api....
实验步骤包括在Hadoop分布式文件系统(HDFS)上创建输入文件目录,将本地文件上传到HDFS,并使用IntelliJ IDEA创建Java项目来编写WordCount程序。在Java代码中,定义了两个类:Map和Reduce。Map类实现了Mapper接口,...
使用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
2. **编写WordCount程序**: - 实现`Mapper`接口处理输入数据,统计单词出现次数。 - 实现`Reducer`接口汇总各个`Mapper`的结果。 - 创建`Job`实例,并设置输入输出路径。 - 调用`Job.waitForCompletion(true)`...
编写WordCount程序时,需要继承Mapper和Reducer类,重写map和reduce方法。Mapper的map方法处理输入的, value>对,将其拆分为单词并生成新的, 1>对;Reducer的reduce方法对相同key的value求和,得到单词的总数。最后...
在C++中编写WordCount程序,需要掌握的关键概念包括字符串操作、输入/输出流(I/O Stream)、文件处理和简单的数据结构。 首先,程序通常从读取文件开始。C++中的`fstream`库提供了读取和写入文件的能力。例如,...