前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MapReduce编程初体验(idea+VMware):统计一个文档里的单词数量

MapReduce编程初体验(idea+VMware):统计一个文档里的单词数量

作者头像
用户4870038
发布2021-02-05 11:43:12
5280
发布2021-02-05 11:43:12
举报

将在idea里的java代码放在VMware里运行,具体操作步骤 java代码与在idea里的差不多,只有WordCountDriverLinux 做了一点改变 其他的代码参考 MapReduce编程初体验(idea):统计一个文档里的单词个数

编写 WordCountDriverLinux 类

代码语言:javascript
复制
package com.czxy.test01;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * @author Hxm
 * @version v 1.0
 * @date 2019/11/12 16:01
 */
public class WordCountDriverLinux extends Configured implements Tool {
    /**
     * 将自己的 map  Reduce 代码添加到框架中
     */
    @Override
    public int run(String[] strings) throws Exception {
        //1.实例一个 Job
        Job job = Job.getInstance(new Configuration(), "wordCount12");
		
		//设置具体的任务类
        job.setJarByClass(WordCountDriverLinux.class);

        //2.设置读取数据的class
        job.setInputFormatClass(TextInputFormat.class);
        //  设置读取数据的路径 文件需要在hdfs
        //如果指定的是一个文件夹,那么就读取这个文件夹下的所有文档
        //如果指定的是一个具体的文档,那么就读取这个文档
        TextInputFormat.addInputPath(job,new Path("hdfs://192.168.100.11:8020/aaaa"));

        //3.设置map
        job.setMapperClass(WordCountMap.class);
        //  设置map输出的类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);

        //4.设置reduce
        job.setReducerClass(WordCountReduce.class);
        //  设置reduce的输出的类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);

        //5.设置输出数据的class
        job.setOutputFormatClass(TextOutputFormat.class);
        //  设置输出数据的路径  
        //hdfs上这个输出路径不能存在
        TextOutputFormat.setOutputPath(job,new Path("hdfs://192.168.100.11:8020/bbbb"));

        job.setNumReduceTasks(3);

        //6.等待代码执行(返回状态码)
        return job.waitForCompletion(true)?0:1;
    }

    public static void main(String[] args) throws Exception {
        //调用执行
        int run = ToolRunner.run(new WordCountDriverLinux(), args);
    }
}

java代码写完后,将代码打 jar 包

在打jar包之前,需要先清除之前的 jar

在这里插入图片描述
在这里插入图片描述

在进行打 jar 包的操作

在这里插入图片描述
在这里插入图片描述

在target里会出现两个 jar 包: test-1.0-SNAPSHOT.jar 这个 jar 比较小,因为里面只有代码。 original-test-1.0-SNAPSHOT.jar 这个 jar 包比较大,因为里面不仅有代码,还有项目运行所依赖的包。为了在虚拟机里运行不因为缺少包而导致报错,所以建议使用这个 jar 包。

把 jar 包放到虚拟机里

在这里插入图片描述
在这里插入图片描述

把需要读取的文档放到hdfs上

代码语言:javascript
复制
[root@node01 ~]# hdfs dfs -mkdir /aaaa
[root@node01 ~]# hdfs dfs -put wordcount.txt /aaaa/wordcount.txt
[root@node01 ~]# hdfs dfs -ls /aaaa
Found 1 items
-rw-r--r--   4 root supergroup        227 2019-11-15 16:37 /aaaa/wordcount.txt

执行运行 jar 包的命令

代码语言:javascript
复制
[root@node01 ~]# hadoop jar original-test-1.0-SNAPSHOT.jar com.czxy.test01.WordCountDriverLinux

说明: original-test-1.0-SNAPSHOT.jar :需要执行的 jar 包 com.czxy.test01.WordCountDriverLinux :运行的java类

查看文件 看计算的效果

代码语言:javascript
复制
[root@node01 ~]# hdfs dfs -cat /bbbb/part-r-00000
hbase   3
hive    1
spark   6
aaa     1
flume   5
hadoop  3
kafka   3
word    1
count   2
redis   5
storm   5
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编写 WordCountDriverLinux 类
  • java代码写完后,将代码打 jar 包
  • 在进行打 jar 包的操作
  • 把 jar 包放到虚拟机里
  • 把需要读取的文档放到hdfs上
  • 执行运行 jar 包的命令
  • 查看文件 看计算的效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档