本地调试hadoop mapreduce踩坑记录

相信大家踩过无数hadoop的天坑, 我只是想在windows上调试下程序为什么这么麻烦呢?

hadoop安装

能正确安装hadoop是调试程序的关键。。

  • 下载地址:http://archive.apache.org/dist/hadoop/core/
    我选择的是2.7.1版本的

  • 配置环境变量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 配好环境变量,在命令行运行 hadoop version,会报错
    如果此时出现以下错误:The system cannot find the batch label specified - make_command_arguments(有可能是中文的)

解决办法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 继续hadoop version, 可能还会报错, 报一个logs文件找不到,这里没图了, 根据提示,我们自己建出来。
    在这里插入图片描述
  • 如果还有点问题, 需要重启电脑, 可能可以解决
  • 现在可以写mapreduce程序了
    pom文件(记得用对应版本的)
<dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.1</version>
        </dependency>
    </dependencies>

map

import org.apache.commons.lang.StringUtils;
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;

public class WcMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        System.out.println("--->Map-->" + Thread.currentThread().getName());
        String[] words = StringUtils.split(value.toString(), ' ');
        for (String w : words) {
            context.write(new Text(w), new IntWritable(1));
        }
    }
}

reduce

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

public class WcReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        System.out.println("--->Reducer-->" + Thread.currentThread().getName());
        int sum = 0;
        for (IntWritable i : values) {
            sum = sum + i.get();
        }
        context.write(key, new IntWritable(sum));
    }
}

启动程序

public class RunWcJob {
    public static void main(String[] args) throws Exception {
        // 创建本次mr程序的job实例
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        // 指定本次job运行的主类
        job.setJarByClass(RunWcJob.class);

        // 指定本次job的具体mapper reducer实现类
        job.setMapperClass(WcMapper.class);
        job.setReducerClass(WcReducer.class);

        // 指定本次job map阶段的输出数据类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        // 指定本次job reduce阶段的输出数据类型 也就是整个mr任务的最终输出类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        // 指定本次job待处理数据的目录 和程序执行完输出结果存放的目录
        FileInputFormat.setInputPaths(job, "D:\\hadoop\\input");
        FileOutputFormat.setOutputPath(job, new Path("D:\\hadoop\\output"));

        // 提交本次job
        boolean b = job.waitForCompletion(true);

        System.exit(b ? 0 : 1);
    }
}

然后在本地文件夹D:\hadoop\input下新建 words.txt,内容为上面给出的输入内容作为输入,同样输出文件夹为output(文件夹要不存在),那么直接运行程序:
可能出现的错误:

  • java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    原因:
    没有拷贝winutils拷贝到hadoop-2.7.1bin目录下或者没有配置HADOOP_HOME环境变量或者配置HADOOP_HOME环境变量没生效
    解决:
    1.下载winutils拷贝到hadoop-2.7.1/bin目录下
    2.检查环境变量是否配置
    3.如果已经配置好环境变量,重启idea或这台电脑,有可能是环境变量没生效

下载地址:https://github.com/steveloughran/winutils
记得找对应版本的

  • Exception in thread “main” java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
    解决:
    将前面下载的文件(https://github.com/steveloughran/winutils)bin目录下的hadoop.dll复制到C:\Windows\System32下,启动idea
有这样的结果说明成功了, 去output目录下看看。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值