hadoop job 未跑满资源_macOS:使用IntelliJ IDEA连接本地Hadoop

本文的所有操作是建立在本地已经配置好Hadoop和java环境的基础上,若未完成,请去这个链接先学习好

loner:Hadoop 在mac本地的配置​zhuanlan.zhihu.com

本文参考博客

macOS:使用IntelliJ IDEA远程连接Hadoop​blog.csdn.net
4f71b25719818167fbd937d89a40dfe5.png

首先使用intelliJ IDEA 配置指定的jdk

这里操作其实只需要在java class 里面运行就可以了,命名进入

7d97ee6048b5fd13caf8527f3e77802a.png

老样子进入project structure (File-Project Structure: 快捷键command+;)

f3d1157b5a7ab5b87481f8cc6fcd4833.png

先检查SDK的情况,如果默认显示就是这样的,则就这样,如果不是添加(那个+号),路径基本上在mac上都差不多是这样的/Library/Java/JavaVirtualMachine/前应该都是一样的。

b2db617f470ba4731335ad9a4e01b442.png

然后进入到Project的情况

02b86044e3cd541526cb9b88ae642408.png

然后进入到module,导入依赖(dependencies)

95cebeb0e93f2e7dc85fb34a996aaebe.png

0c745c19ad47ed430b27479aef2713fa.png

选择JARs or directories,按照下面操作多批次的导入解压后Hadoop的位置

注意这儿Hadoop的位置是解压后的安装包在share->hadoop

930b0c14f736252f3e370782ce578190.png

依次导入8个依赖,一个一个手动加,然后Apply,OK

1c1109b6b45a9255d00ef76901c25696.png

编译和运行

运行如下WordCount.java

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.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 WordCount {

    public static class TokenizerMapper
            extends Mapper<Object, Text, Text, IntWritable>{

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context
        ) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer
            extends Reducer<Text,IntWritable,Text,IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                           Context context
        ) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

3aa516c6573455b92dc9d36318301720.png

3fdc9eea36bcda4bc0098f1b030201f5.png

选择application后需要配置如下,name随意,最重要的是Main class: 保证名字和你new的java文件名字一致,input和output是等会要放入的文件,输入和输出

ca2b7ad8f0edc5fbd26acff7a5feeabc.png

配置输入文件

这里我刚刚在configuration里面写了我的输入文件叫input,需要配置输入路径,这里在(src同级目录下)新建一个文件夹input,并且把你需要输入的文件放进去,这儿还是之前的pg100.txt

9de6dd1866ea27e272a85d25d2831795.png

运行

84fd9ed119ae5f64fb52904aa4c2200e.png

出现如下情况

2d23e7f47b1773f0a5e19f71d522f483.png

cf29e56442d5ae4c12495ff068fc8e91.png

和之前在terminal里运行成功的一模一样,成功后会出现一个 output的文件夹,由于output的先天特性,它无法覆盖,所以下次运行的时候请删除之前的那个,或者你改个名字(我后来好像看见这个可以用其他方法覆盖的,这里就不做涉及)

7db850fe4847c1cd2ee965a901127e4c.png

到现在位置,Hadoop的教程都已经结束,无论是阿里云Hadoop的配置,运行WordCount.java还是mac本地的Hadoop运行调试,还是借助IDEA直接单机模式运行,都已经完成了。如果有不明白的,请关注我的专栏,里面有详细的步骤。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值