hadoop集群提交代码
Posted petewell
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop集群提交代码相关的知识,希望对你有一定的参考价值。
在hadoop集群中,写完了mapreduce并没有完成工作,还需要打jar包,然后将jar提交到集群中。hadoop提供了提交jar的入口。
WordCount是写hadoop mapreduce入门级进程,会写wordcount的话,基本上80%的mapreduce就懂了。
mapreduce分为map过程和reduce过程,用户可以根据自己的业务自定义map过程和reduce过程。
以wordcount为例,要计算文本中单词出现的个数,需要读取文本,并针对单词进行统计。
map过程
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 36 37 38
|
package com.hadoop.mapreduce;
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 extends Mapper<LongWritable, Text, Text, IntWritable>
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException String line = value.toString(); String[] words = line.split(" "); for(String word: words) context.write(new Text(word), new IntWritable(1));
|
reduce过程
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 36 37 38 39 40
|
package com.hadoop.mapreduce;
import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException; import java.util.Iterator;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>
@Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException
int count = 0;
for( IntWritable value: values) count += value.get(); context.write(key, new IntWritable(count));
|
mapreduce过程存在一些问题,比如,
Map task如何进行任务分配?
Reduce task如何进行任务分配?
Map task与 reduce task如何进行衔接?
如果某map task 运行失败,如何处理?
Map task如果都要自己负责数据的分区,很麻烦
为例解决这些问题,需要有个master专门对map reduce进行管理。
在WordCount文档中,有专门对作业进行配置,以及最后将代码提交到客户端。
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
package com.hadoop.mapreduce;
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;
public class WordCount
public static void main(String[] args) throws Exception Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "wordcount");
job.setJarByClass(WordCount.class);
job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class);
job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class);
FileInputFormat.setInputPaths(job, new Path(args[1]));
FileOutputFormat.setOutputPath(job, new Path(args[2]));
boolean res = job.waitForCompletion(true); System.exit(res? 0: 1);
|
代码编辑完成后,对代码进行打包。我们在这里选择不依赖第三方包的打包方式进行打包。
打完包后,将生成的jar包提交到服务器中去。
并执行,
1
|
leiline@master:~/Documents/hadoop/myJars$ hadoop jar HadoopMapReduce.jar com.hadoop.mapreduce.WordCount /data/adult /data/out
|
注意,out文档是由进程自动创建的,不需要用户手动去创建。最后,代码执行完毕后,可以在hdfs中看到执行的结果:
1 2 3
|
Found 2 items -rw-r--r-- 3 leiline supergroup 0 2018-01-14 19:01 /data/out/_SUCCESS -rw-r--r-- 3 leiline supergroup 216737 2018-01-14 19:01 /data/out/part-r-00000
|
原文:大专栏 hadoop集群提交代码
以上是关于hadoop集群提交代码的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse远程提交MapReduce任务到Hadoop集群
将MR作业提交给具有不同ID的Hadoop集群
Eclipse远程提交MapReduce任务到Hadoop集群
本地idea开发mapreduce程序提交到远程hadoop集群执行
本地idea开发mapreduce程序提交到远程hadoop集群执行
Spark集群任务提交