WordCount的编写和jar包集群上运行

WordCount的编写

WordCount是MapReuduce的一个入门小程序,需要编写三个类,分别对应MR中的Map阶段、Reduce阶段以及任务提交阶段。

WcMap编写

package MRwordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/***
 * mapper类
 * 数据输入类型是K,V类型--》LongWritable, Text
 * 数据输出类型是K,V类型--》Text, IntWritable
 */
public class WcMap extends Mapper<LongWritable, Text,Text, IntWritable> {
    //快捷键
    //实现父类 alt+insert

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //获取一行数据,MapReduce默认按行读取
        String line = value.toString();
        //切分数据,按空格切分
        String[] fields = line.split(" ");
        //遍历获取每一个单词
        for(String s:fields){
            //输出并拼接

            //System.out.println(s);
            context.write(new Text(s),new IntWritable(0));
        }
    }
}

WcReduce编写

package MRwordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/***
 * Reducer类
 * 数据输入类型K,V--》Text, IntWritable
 * 数据输出类型K,V--》Text, IntWritable
 */
public class WcReduce extends Reducer<Text, IntWritable,Text, IntWritable> {
    //直接实现父类方法 快捷键ctrl+o
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        //定义一个计数器
        int count=0;
        //累加计数
        for(IntWritable value :values){

            //IntWritable转换成int类型
            count++;
        }
        //输出
        context.write(key,new IntWritable(count));
    }
}

WcDriver编写

package MRwordcount;


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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

public class WcDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //实例化配置文件
        Configuration conf = new Configuration();
        //定义一个job任务
        Job job = Job.getInstance(conf);
        //配置job的信息
        job.setJarByClass(WcDriver.class);
        //指定自定义的mapper、mapper的数据类型到job中
        job.setMapperClass(WcMap.class);
        job.setOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        //指定自定义的reduce以及reduce的输出数据类型,总输出类型

        job.setReducerClass(WcReduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //配置输入数据的路径,这一部分演示的在本地运行
        FileInputFormat.setInputPaths(job,new Path("D:\\BigdataTest\\WordCount.txt"));

        //配置输出数据的路径
        FileOutputFormat.setOutputPath(job,new Path("D:\\BigdataTest\\WordRes"));

        /*//配置输入数据的路径,这一部分是打包上传到集群运行
        FileInputFormat.setInputPaths(job,new Path(args[0]));

        //配置输出数据的路径
        FileOutputFormat.setOutputPath(job,new Path(args[1]));*/

        //提交任务
        job.waitForCompletion(true);
    }
}

结果展示

输入文件:
在这里插入图片描述
输出结果:
在这里插入图片描述

jar包集群上运行

上面的过程都是在本地运行的,接下来将写好的程序打包,上传到集群运行。

打包

可以使用maven的自动打包。
在这里插入图片描述
打好的包可以在控制台中找到它的本地路径:
在这里插入图片描述

上传到集群并运行

linux系统的上传下载命令分别是rz、sz,使用rz命令上传jar包和需要输入的数据文件。
将数据文件上传到HDFS。

hdfs dfs -moveFromLocal D:\\BigdataTest\\WordCount.txt /mytest

在这里插入图片描述
运行jar包:

hadoop jar /opt/module/hadoop-2.8.4/myjar/hadooptest-1.0-SNAPSHOT.jar MRwordcount.WcDriver /mytest/WordCount.txt /mytest/output

需要注意的是,指定要运行的包含main函数的类的名字要写全(包含包的名字)。
查看最终结果:
在这里插入图片描述

### 回答1: Hadoop集群运行WordCount的步骤如下: 1. 准备数据:将需要统计的文本数据上传到Hadoop集群中的HDFS文件系统中。 2. 编写MapReduce程序:编写WordCountMapReduce程序,其中包括Mapper类和Reducer类。 3. 打包程序:将编写好的MapReduce程序打包成jar包。 4. 提交作业:使用hadoop jar命令jar包提交到Hadoop集群运行。 5. 查看结果:等待作业运行完成后,在Hadoop集群中查看统计结果。 具体的步骤可以参考Hadoop官方文档或者其他相关教程。 ### 回答2: Hadoop是一款分布式计算框架,通过将数据分散到不同的机器上处理,从而实现了大规模数据的快速处理。Hadoop集群运行需要通过分布式计算任务进行实现。Wordcount是Hadoop的一个经典实例,可以用来计算数据中每个单词出现的次数。 在Hadoop集群运行Wordcount首先需要准备数据,将数据上传到Hadoop文件系统HDFS中,可以使用Hadoop命令行工具或Hadoop API将数据上传到Hadoop中。上传完数据后,需要编写MapReduce程序对数据进行处理。MapReduce是Hadoop的计算模型,它将输入数据划分成若干分片,每个分片由一个Map任务处理,并将结果输出到一个临时文件,在Reduce任务中对这个临时文件进行整合从而得到最终结果。 在编写程序时,需要定义Map和Reduce的业务逻辑。在Wordcount中,Map任务的业务逻辑是读取每个文档中的单词,并将每个单词作为Key值输出,Value值设置为1,表示出现的次数。Reduce任务的业务逻辑是将相同Key的Value值进行累加,从而得出每个单词出现的总次数。 最后,将编写好的MapReduce程序打包上传到Hadoop集群中,通过YARN ResourceManager调度Map和Reduce任务分配给不同的计算节点执行。任务执行完成后,结果将输出到指定的输出目录中。 总的来说,Hadoop集群运行Wordcount需要进行以下几步操作:准备数据、编写MapReduce程序、上传程序并提交任务、等待任务运行完成并输出结果。在程序运行过程中需要进行日志跟踪和任务管理,以确保任务的正常运行和结果正确输出。 ### 回答3: Hadoop集群运行wordcount是Hadoop的一个基本例子,用于理解Hadoop MapReduce框架的运行方式。下面是具体步骤: 1.安装Hadoop 首先需要在每一台机器上安装Hadoop集群,并配置好环境变量。在安装完成后,需要测试安装是否成功,可以执行hadoop version命令,能够看到输出Hadoop的版本信息,则说明Hadoop已安装成功。 2.编写MapReduce作业 在该集群运行wordcount需要编写MapReduce作业,这个作业包含了map和reduce方法代码。在map方法中,通过空格将每个单词分离出来,并将其映射到一个键值对中;在reduce方法中,将所有相同键值对的值加起来,得到对应单词出现的频率。 3.上传文件到HDFS 需要将要处理的文件上传到HDFS中。可以使用以下命令将文件上传到HDFS中: ``` hadoop fs -mkdir /input hadoop fs -put input_file /input ``` 4.提交MapReduce作业 可以使用以下命令提交MapReduce作业: ``` hadoop jar wordcount.jar WordCount /input /output ``` 其中,wordcount.jar是MapReduce的Java代码打包好的JAR文件,后面跟着两个参数,第一个参数是输入文件所在的路径(HDFS中的路径),第二个参数是输出文件所在的路径。 5.查看结果 等待作业完成后,可以通过以下命令查看结果: ``` hadoop fs -cat /output/part-r-00000 ``` 其中,part-r-00000是reduce任务的输出文件名称。 通过以上步骤,就可以在Hadoop集群运行wordcount作业并获取结果。需要注意的是,在实际生产环境中,需要对Hadoop集群进行更细致的配置和优化,以确保作业可以在最短时间内完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值