在配置了伪分布式hadoop集群后,接下来就可以写MapReduce程序,在集群中运行并且可以调试。一般来说需要将代码打成jar包,然后在hadoop集群中使用hadoop jar命令来运行,但是这样无法调试打断点,因此IDEA远程调试是有必要的。

本地准备hadoop包

将安装了hadoop集群的tar包,在window选择一个目录,进行解压保存一份。

window下使用IDEA远程调试伪分布式hadoop集群

IDEA中导包

IDEA中建立Module后,需要导入依赖jar包,来源就是上面解压的share目录下的jar包,需要在对应Module点击Dependencies导入common、hdfs、MapReduce和yarn下的包,导入后效果如图。

window下使用IDEA远程调试伪分布式hadoop集群

准备winutils.exe等文件

hadoop天然对window开发不友好,因此需要添加如下插件,将其整体粘贴到本地hadoop的bin目录下,并且双击winutils.exe文件运行一下。如果不设置,后面运行MapReduce会提示winutils文件找不到的错误。

window下使用IDEA远程调试伪分布式hadoop集群

window环境变量

以上配置完成后,依然是无法远程调试的,还需要修改window环境变量,添加本地hadoop的bin目录,并且还需要添加HADOOP_USER_NAME这样系统变量。

(1)hadoop环境变量设置。

window下使用IDEA远程调试伪分布式hadoop集群

(2)添加HADOOP_USER_NAME系统变量,值为root,如果不设置后面运行MapReduce会报权限不够。

 window下使用IDEA远程调试伪分布式hadoop集群

准备MapReduce程序

再完成上面的配置后,才能到这一步。这里简单的准备一个MapReduce程序,就是统计一段文本中单词出现的次数,需要使用空格拆分每行数据。

mapper类

package com.boe.mapreduce02;

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类,来完成Map阶段
 */
public class CharMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //每行读取
        //context 用它写到reducer
        String[] str = value.toString().split(" ");
        for (String c : str) {
            context.write(new Text(c),new IntWritable(1));
        }
    }
}
View Code

相关文章:

  • 2021-08-06
  • 2021-07-02
  • 2021-08-26
  • 2021-09-10
  • 2022-12-23
  • 2021-10-25
猜你喜欢
  • 2022-12-23
  • 2021-07-23
  • 2021-08-15
  • 2021-09-23
  • 2021-04-02
  • 2021-11-14
相关资源
相似解决方案