您的位置:首页 > 编程语言

IDEA + Hadoop工程入门实例 ——Word Count编程

2016-04-26 09:16 363 查看
一、 启动IDEA

进入/home/iespark/hadoop_program_files/idea-IC-143.1184.17/bin,执行“./idea.sh”。

二、 新建工程

点击File->new->project,弹出对话框,选择Java->Kotlin(Java)(如图1.1),点击next,输入项目名,项目保存路径,点击Finish,NewWindow新工程至此创建完成。



图1.1创建新工程

三、 导入JAR包

点击File->ProjectStructure,弹出对话框(如图2.1)。选择Libraries(与eclipse的lib一个道理),点击“+”号,选择JAVA,在弹出的窗口中选择需要导入的JAR包的位置(如图2.2),此例中只需导入conmmon(3个jar)和mapreduce张的jar包即可(在hadoop-2.6.2/share/Hadoop/)。



图2.1
创建Lib文件



图2.2 导入Jar包

四、 编写程序

编写WordCount程序,该程序分为三个部分,Map类、Reduce类以及Main。以下是个各类的具体代码

注意:修改代码之后,一定要点击saveall保存(笔者未知原因)

Map类

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;

/**

* Created by iespark on 2/26/16.

*/

public class WcMapper extends Mapper<LongWritable,Text,Text,IntWritable>{

@Override

protected void map(LongWritable key, Text value, Context context)

throws IOException, InterruptedException {

// IntWritable one=new IntWritable(1);

String line=value.toString();

StringTokenizer st=new StringTokenizer(line);

//StringTokenizer "kongge"

while (st.hasMoreTokens()){

String word= st.nextToken();

context.write(new Text(word),new IntWritable(1)); //output

}

}

}

Reduce类

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**

* Created by iespark on 2/26/16.

*/

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

@Override

protected void reduce(Text key, Iterable<IntWritable> iterable, Context context) throws IOException, InterruptedException {

int sum=0;

for (IntWritable i:iterable){

sum=sum+i.get();

}

context.write(key,new IntWritable(sum));

}

}

Main

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

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;

/**

* Created by iespark on 2/26/16.

*/

public class JobRun {

public static void main(String[] args){

Configuration conf=new Configuration();

try{

Job job = Job.getInstance(conf, "word count");

//Configuration conf, String jobName

job.setJarByClass(JobRun.class);

job.setMapperClass(WcMapper.class);

job.setReducerClass(McReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

FileInputFormat.addInputPath(job,new Path("/input/wc"));

FileSystem fs= FileSystem.get(conf);

Path op1=new Path("hdfs://219.226.86.155:9000//output/wc");

if(fs.exists(op1)){

fs.delete(op1, true);

System.out.println("存在此输出路径,已删除!!!");

}

FileOutputFormat.setOutputPath(job,op1);

System.exit(job.waitForCompletion(true)?0:1);

}catch (Exception e){

e.printStackTrace();

}

}

}

五、 导出JAR包

点击File->ProjectStructure,弹出对话框(如图4.1)。选择Artifacts,点击“+”号,选择JAR->Frommodules with dependencies…,在弹出的窗口中选择Main Class的位置(如图4.2),选择JabRun,选择导出JAR包的位置,一路OK即可完成。



图4.1
导出jar包



图4.2
导出完成
这里需要注意,导出之后的JAR包还不能直接运行,需要经过buildArtifacts过程。如图4.3,点击菜单栏Build->BuildArtifacts,此时JAR包才算导出成功。



图4.3 BuildArtifacts
六、 运行

6.1 导入输入文件

首先在本地创建好原始输入文件(命名为word_count),之后在HDFS上新建“/input”目录,将本地的文件上传到HDFS的/input上,并命名为wc。
[iespark@hadoopadmin ~]$ hadoop dfs -mkdir /input
[iespark@hadoopadmin zzh]$ hadoop dfs – put ./word_count /input/wc
6.2 执行JAR文件
到导出的JAR包所在目录执行JAR包,具体命令如下:
[iespark@hadoopadmin Bymyself_jar]$ hadoop jar Bymyself.jar
6.3 查看结果
结果保存在HDFS上,可通过网页访问(http://namenode-name:50070)也可以通过如下命令访问。
[iespark@hadoopadmin ~]$ hadoop dfs –ls /oupput/wc
Found 2 items
-rw-r--r-- 2 iespark supergroup 0 2016-04-25 16:49 /output/wc/_SUCCESS
-rw-r--r-- 2 iespark supergroup 28 2016-04-25 16:49 /output/wc/part-r-00000
[iespark@hadoopadmin ~]$ hadoop dfs –text /output/wc/part-r-00000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: