分享

使用intellij idea在本地开发hadoop程序

本帖最后由 levycui 于 2017-9-19 15:14 编辑
问题导读:
1、如何使用intellij idea本地调试hadoop?
2、如何在idea中建立hadoop项目?
3、如何导入hadoop的jar包文件?
4、如何在idea运行hadoop程序?




我的intellij idea版本是14,hadoop版本2.6,使用《hadoop权威指南》的天气统计源码作为示例。
下面附上源码,数据集在http://hadoopbook.com/code.html可以下载1901和1902两年数据:
[mw_shl_code=python,true]package com.hadoop.maxtemperature;

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

public class MaxTemperatureMapper
        extends Mapper<LongWritable, Text, Text, IntWritable> {  //注1
    private static final int MISSING = 9999;
    @Override
    public void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        String line = value.toString();
        String year = line.substring(15, 19);
        int airTemperature;
        if (line.charAt(87) == '+') { // parseInt doesn't like leading plus signs
            airTemperature = Integer.parseInt(line.substring(88, 92));
        } else {
            airTemperature = Integer.parseInt(line.substring(87, 92));
        }
        String quality = line.substring(92, 93);
        if (airTemperature != MISSING && quality.matches("[01459]")) {
            context.write(new Text(year), new IntWritable(airTemperature));
        }
    }
}[/mw_shl_code]

[mw_shl_code=python,true]package com.hadoop.maxtemperature;


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

public class MaxTemperatureReducer
        extends Reducer<Text, IntWritable, Text, IntWritable> {
    @Override
    public void reduce(Text key, Iterable<IntWritable> values,
                       Context context)
            throws IOException, InterruptedException {
        int maxValue = Integer.MIN_VALUE;
        for (IntWritable value : values) {
            maxValue = Math.max(maxValue, value.get());
        }
        context.write(key, new IntWritable(maxValue));
    }
}[/mw_shl_code]

[mw_shl_code=python,true]package com.hadoop.maxtemperature;


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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class MaxTemperature {
    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("Usage: MaxTemperature <input path> <output path>");
            System.exit(-1);
        }
        Job job = new Job();
        job.setJarByClass(MaxTemperature.class);
        job.setJobName("Max temperature");

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setMapperClass(MaxTemperatureMapper.class);
        job.setReducerClass(MaxTemperatureReducer.class);

        job.setOutputKeyClass(Text.class);              //注1
        job.setOutputValueClass(IntWritable.class);

        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}[/mw_shl_code]

1、首先在hadoop官网上下载hadoop到本地(不需要进行环境变量的配置,仅仅只用下载hadoop的包即可)。
2、打开intellij idea创建一个空项目,并且将源码粘贴进去,如图
20150426111609005.png

这时可以看见代码中的许多类是无法识别的,别急。接下来打开project structure,在左侧找到modules
20150426111747044.png

3、点击下方箭头天假jar或目录
20150426112112035.png

4、将刚才下载的hadoop目录下的share文件夹中的相应目录添加进来
20150426112210176.png

5、点击左侧的artifacts,添加一个空jar
20150426112209702.png

6、输入jar的名称,这里我们输入maxtemperature
20150426112418792.png

7、点击output layout下方的小箭头,选择module output,然后勾选我们的项目,点击确定
20150426112605309.png

8、这时候,刚才显示的各种包和类的缺失错误信息就全部没有了。
20150426112828680.png

9、接下来,点击右上角的edit configurations,如果当前没有application则新建一个application
20150426113020766.png

10、application的名字我们这里取MaxTemperature,然后main class需要输入org.apache.hadoop.util.RunJar,再点击program arguments,填写参数,如下:
其中,第一个参数之前在project structure中填写的jar文件路径,第二个参数是输入文件的目录,第二个参数是输出文件的路径
20150426113154032.png

11、然后,我们需要新建一个输入路径,并将输入文件放进去,(输出文件不要创建,这个由系统自己创建)
20150426113415353.png

12、点击运行,却发现有错误提示,显示找不到类:
20150426113612921.png

13、经过查阅资料,发现刚才填写参数的地方着了一个参数,需要将main函数所在类的路径添加进去:
20150426113618297.png

14、再点击运行,发现运行成功
20150426113837221.png

15、这时候,在项目目录下面生成了一个output目录,里面则存放了运行结果
20150426113825031.png

20150426113945596.png

来源:http://blog.csdn.net/programmer_wei/article/details/45286749
作者:oo笨小孩oo

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条