设为首页 加入收藏

TOP

第一个Hadoop程序
2014-11-24 02:31:53 来源: 作者: 【 】 浏览:0
Tags:一个 Hadoop 程序

下载的是apache稳定版hadoop-0.23.9,0.23之后apache版本往两个分支走:hadoop 1.0和hadoop 2.0。由于这个版本较新却和0.20接近,配置上相似一些,有了之前尝试的教训,就是这个了。解压之后要设定好path,path加上hadoop bin目录。默认配置文件在hadoop etc/hadoop下。


公共配置:core-site.xml


hdfs配置:hdfs-site.xml


mapreduce配置: mapred-site.xml


有三种模式,standalone模式,伪分布式,和分布式。什么都不改启动的是本机模式。这里就是跑在本机模式。


WordCount2.java:


package com.imd.examples;


import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;


public class WordCount2 {
public static void main(String[] args) throws Exception {
// 不配置一个入口类会导致底层无法调用setJarByClass方法,运行时ClassNotFound.
JobConf conf = new JobConf(WordCount2.class);
conf.setMapperClass(WordCountMapper.class);
conf.setReducerClass(WordCountReducer.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);


// 输入参数除最后一个外都是input path,最后一个是output path
for (int i = 0; i < args.length - 1; ++i) {
FileInputFormat.addInputPath(conf, new Path(args[i]));
}


FileOutputFormat.setOutputPath(conf, new Path(args[args.length - 1]));
JobClient.runJob(conf);
}
}


WordCountMapper.java:


package com.imd.examples;


import java.io.IOException;
import java.util.StringTokenizer;


import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;


public class WordCountMapper extends MapReduceBase implements Mapper {
private IntWritable one = new IntWritable(1);


@Override
// 怎么切分的呢 key是什么
public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) throws IOException {
StringTokenizer st = new StringTokenizer(value.toString());
Text text = new Text();
while (st.hasMoreTokens()) {
text.set(st.nextToken());
output.collect(text, one);
}
}
}


推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Wireshark 正在使用 Qt 进行重写 下一篇Shel编程之case语句

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: