idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序

0.生成jar包
idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第1张图片

1.添加sftp连接
idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第2张图片

idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第3张图片
idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第4张图片

idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第5张图片

2.上传第0步生成的jar包
idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第6张图片

3.linux上运行jar包

idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第7张图片

yarn jar hadoop222-1.0-SNAPSHOT.jar com.mr.PatentCount -Din=/data/patent/cite75_99.txt -Dout=./p_count

等待完成
idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第8张图片

分享java源码:


import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
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.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * @description: .使用MR程序计算专利统计
 **/
public class PatentCount extends Configured implements Tool{

    public static void main(String[] args) throws Exception{
        System.exit(ToolRunner.run(new PatentCount(),args));
    }

    @Override
    public int run(String[] args) throws Exception{
        // 作业配置
        Configuration conf=this.getConf();

        // 指定数据输入和输出的路径
        Path input=new Path(conf.get("in"));
        Path output=new Path(conf.get("out"));

        // 创建Job【作业】对象
        Job job=Job.getInstance(conf,"专利统计");
        job.setJarByClass(this.getClass());

        // Map阶段的配置
        // 配置Map阶段要执行的任务
        job.setMapperClass(PatentCountMapper.class);
        // 配置Map阶段数据输出的数据类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        // 指定Map阶段读取原始数据的方式
        job.setInputFormatClass(TextInputFormat.class);
        // 配置Map阶段要读取的数据的路径
        TextInputFormat.addInputPath(job,input);

        // Reduce阶段的配置
        job.setReducerClass(PatentCountReducer.class);

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

        job.setOutputFormatClass(TextOutputFormat.class);

        TextOutputFormat.setOutputPath(job,output);

        // 提交作业
        return job.waitForCompletion(true)?0:1;
    }

    // Map阶段
    // Map阶段的map方法每执行一次,则处理一行数据;
    // Mapper类有四个泛型参数:
    // 前两个是数据进入Map阶段的k1和v1的数据类型,一般分别为LongWritable【被处理的当前行
    // 数据的偏移量】和Text【当前这一行数据】;
    // 后两个指的是数据被Map任务处理完成之后的中间结果数据k2和v2的数据类型,视需求而定;
    static class PatentCountMapper
            //                  k1       v1   k2       v2
            extends Mapper{

        private Text k2=new Text();
        private IntWritable v2=new IntWritable();

        @Override
        protected void map(
                LongWritable k1,    // 该参数【变量】中所存储是当前处理的某一行数据的偏移量
                Text v1,            // 该参数【变量】中所存储的是当前被处理的某一行数据
                Context context     // 用于联系Map阶段和Shuffle阶段的对象
        ) throws IOException, InterruptedException{
            // 编写Map阶段的处理逻辑
            String[] strs=v1.toString().split("[,]");

            // Text k2=new Text(strs[1]);
            // IntWritable v2=new IntWritable(1);

            this.k2.set(strs[1]);
            this.v2.set(1);

            context.write(this.k2,this.v2);
        }
    }

    // Reduce阶段
    // 前两个泛型参数表示数据进入Reduce的k2和v2的数据类型,该泛型参数由Map阶段的
    // 输出的泛型参数所决定,Reduce阶段输入的k2和[v2]的泛型参数跟Map阶段输出的
    // k2和v2的泛型参数是一致的;
    // 后两个泛型参数表示Reduce阶段输出的k3和v3的数据类型,由需求而定;
    static class PatentCountReducer
            //               k2      v2       k3      v3
            extends Reducer{

        private Text k3=new Text();
        private IntWritable v3=new IntWritable();

        @Override
        protected void reduce(
                Text k2,                    // 专利编号
                Iterable v2s,  // 相同的专利编号对应的v2的集合
                Context context             // 用于联系Reduce阶段和MR框架的对象
        ) throws IOException, InterruptedException{
            this.k3.set(k2.toString());

            int sum=0;
            for(IntWritable v2: v2s){
                sum+=v2.get();
            }
            this.v3.set(sum);

            context.write(this.k3,this.v3);
        }
    }
}

数据格式如下:
idea生成jar包上传服务器 运行MapReduce程序和idea本地运行MapReduce程序_第9张图片

idea本地运行MapReduce程序(本地虚拟机)
修改windows hosts

把四个xml配置文件放在resources里

idea里mapred-site.xml加上

    
    
        mapreduce.job.jar
        D:\\java源码系列\\hadoop222\\target\\hadoop222-1.0-SNAPSHOT.jar
    
    
        mapreduce.app-submission.cross-platform
        true
    

你可能感兴趣的:(学习,hadoop,mapreduce)