reoger的记录

--以后的你会感激现在那么努力的自己

0%

intellij IDEA 配置hadoop开发环境

在参考了众多的参考资料之后,终于搭建搭建起了了intellij-IDEA开发hadoop环境,下面就记录一下开发环境的建立过程,以免日后遗忘。

开发工具和基础环境准备

首先,本次采用的开发工具选用的是intellij-IDEA,在进行本次开发之前需要将intellij-IDEA下载并安装好,并配置好java的JDK。下面是我本次配置开发环境之前的基础环境,本次采用的是hadoop 2.6.0的版本。

1
2
3
4
5
IntelliJ IDEA 2017.2.4
Build #IC-172.4155.36, built on September 12, 2017
JRE: 1.8.0_152-release-915-b11 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

在下载好hadoop之后,我们便可以开始本次环境的配置了。

创建项目

这一步非常的简单,我们用IDEA创建一下普通的java项目即可。


创建项目完成之后是这个样子的。

添加示例代码

我们先不管三七二十一,在我们的项目中,先copy下面三个类,用来检测环境是否搭建好。
第一个类WordCountMapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
import java.util.StringTokenizer;

public class WordCountMapper extends Mapper<LongWritable,Text,Text,IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();

@Override
protected void map(LongWritable 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);
}
}
}

第二个类:WordCountReducer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;


import java.io.IOException;


public class WordCountReducer extends Reducer<Text,IntWritable,Text,IntWritable> {

private IntWritable result = new IntWritable();

@Override
protected 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);
}
}

第三个测试类:test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.log4j.chainsaw.Main;

import java.io.IOException;

public class test {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
// write your code here

Configuration configuration = new Configuration();

if(args.length!=2){
System.err.println("Usage:wordcount <input><output>");
System.exit(2);
}

Job job = new Job(configuration,"word count");

job.setJarByClass(Main.class);
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.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);
}
}

把代码copy完成之后,项目结构应该是这样子的:

可以看到,ide提示我们代码还有错,这是因为我们环境还没有搭建完成,所以报错,我们接下来继续下一步。

导入hadoop相关的jar包

我们首先需要知道我们要导入的jar包的具体位置: \hadoop-2.6.0\share\hadoop,即在hadoop根目录下的share文件夹中的hadoop文件夹中。
然后在IDEA中打开project Structure选项,快捷键ctrl+alt+shift+S。选择modules,如图:

选择右边的加号-> jars 如图:

选择hadoop的jar,具体位置我们前面已经说过了,将hadoop文件夹中所有的文件都选中,按住shift即可多选:

jar导入完成之后,应该是这个样子的:

然后在Project Settings中选择Artifacts,如图:

选择加号->JAR -> Emptry创建一个空的jar。选择完成后如图:


我们将其取名为hadoop,并选择output Layout下面的加号->Module Output,并勾选include in prokecy builde,完成后如图所示:

完成上面的操作后,发现我们前面copy的代码已经不在报错了,说明jar包已经成功导入到我们的项目中来了。最后我们需要配置我们的运行环境。

配置运行环境

首先选择edit Configurtions,如图;

新建application,具体做法,点击右上角的加号->选择application。新建界面如图所示:


我们需要填的只有三处,首先我们可以为他取个名字,在Name那么输入自定义的名义,然后再Main class那里填写:org.apache.hadoop.util.RunJar,选择progream arguments右边的展开按钮,填写此项的值,在这里需要填写三个参数,第一个就是我们前面创建jar的具体位置,我们可以在前面常见的artifacts中查看,示例D:\intellijIDEA\hadoopTest\out\artifacts\hadoop\hadoop.jar;第二个参数是我们要运行类的名字(需要加上包名)示例com.hut.Test;第三个是输入文件的位置,示例input/;第四个是输入文件的名字示例``output/;
参考配置如下:

1
2
3
4
D:\intellijIDEA\hadoopTest\out\artifacts\hadoop\hadoop.jar
com.hut.Test
input/
output/

这里需要根据自己项目的实际情况来进行配置,仅供参考。

运行检测

根据我们前面的配置,我们需要在项目的根目录下新建一个input文件夹。我们可以在这个文件夹中添加一个txt的文件,并随意的写入一些数据。
然后点击运行,成功运行后,会发现我们项目根目录下新添加了一个output文件夹,在part-r-0000文件中,就记录了我们在input文件夹中文件单词出现的次数。如图:

值得注意的是,每次成功运行,都需要将output文件夹删除后才能继续下一次的运行。

到此,我们的环境已经配置好了,接下来就可以开开心的学习hadoop的api使用了。

参考链接