实训笔记:MapReduce基本使用 hadoop Mac系统

实训笔记:MapReduce基本使用 hadoop Mac系统,第1张

环境:

hadoop 3.3.2

macos

jdk 1.8

一、新建工程

1.打开IDEA,新建Maven工程

 2.导入依赖

打开pox.xml文件

导入hadoop-client依赖:

添加至和中间


        
            org.apache.hadoop
            hadoop-client
            3.3.2
        
    

注意 3.3.2中的版本号是否与自己的一致

点击右边的按钮,下载依赖:

 

等待IDEA下方进度条下载完成

二、编写程序

创建文件夹,名字自己自行命名

src>main>java>com.chinahitech.demo

在该文件夹下创建.java文件: 

编写WordCountMapper

package com.chinahitech.demo;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

public class WordCountMapper extends Mapper {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] words = value.toString().split(" ");
        for (String word : words) {
            context.write(new Text(word), new LongWritable(1));
        }
    }
}

 编写WordCountReducer

package com.chinahitech.demo;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;

public class WordCountReducer extends Reducer {
    @Override
    protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
        int count = 0;
        for (LongWritable value : values) {
            count += value.get();
        }
        context.write(key, new LongWritable(count));
    }
}

编写WordCountDriver

package com.chinahitech.demo;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCountDriver {
    public static void main(String[] args) throws Exception {
        //配置文件对象
        Configuration conf = new Configuration();
        // 创建作业实例
        Job job = Job.getInstance(conf, WordCountDriver.class.getSimpleName());
        // 设置作业驱动类
        job.setJarByClass(WordCountDriver.class);
        // 设置作业mapper reducer类
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);
        // 设置作业mapper阶段输出key value数据类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        //设置作业reducer阶段输出key value数据类型 也就是程序最终输出数据类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        // 配置作业的输入数据路径
        FileInputFormat.addInputPath(job, new Path("/wordcount"));
        // 配置作业的输出数据路径
        Path output = new Path("/wordcount/output");
        FileOutputFormat.setOutputPath(job,output );
        //判断输出路径是否存在 如果存在删除
        FileSystem fs = FileSystem.get(conf);
        if(fs.exists(output)){
            fs.delete(output,true);
        }
        // 提交作业并等待执行完成
        boolean resultFlag = job.waitForCompletion(true);
        //程序退出
        System.exit(resultFlag ? 0 :1);
    }
}

FileInputFormat.addInputPath(job, new Path("/wordcount"));
 为输入路径,根据这里下面创建文件夹      

Path output = new Path("/wordcount/output");

为输出路径,为程序自动创建

点击IDEA窗口右侧的Maven键

Lifecycle>package(双击)

这时会在target下生成.jar包,我将.jar包放在了opt同级目录下,方便使用 

三、测试:统计样本数据中每个单词出现的次数 

创建目录,即上面的输入路径

hadoop fs -mkdir /wordcount

创建样本文件,并输入数据

(vim具体 *** 作:按a键,进入INSERT模式;输入文件数据;按esc键,输入:wq,回车) 

vim word.txt

将文件上传至HDFS 

hadoop fs -put /Users/m/word.txt /wordcount

http://localhost:9870/explorer.html#/wordcount

 

可以看出已经上传成功

运行

hadoop jar MRDemo-1.0-SNAPSHOT.jar com.chinahitech.demo/WordCountDriver

这里的MRDemo-1.0-SNAPSHOT.jar为路径,根据自己的jar包位置进行修改

com.chinahitech.demo/WordCountDriver为包中的含有main函数的java文件,根据自己的路径和名字进行修改 

运行结果: 

 

查看HDFS上生成文件

hadoop fs -cat /wordcount/output/part-r-00000

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/790760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存