[原创]第一个Hadoop程序_Hadoop,ERP及大数据讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Hadoop,ERP及大数据讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3149 | 回复: 0   主题: [原创]第一个Hadoop程序        下一篇 
shuangqiang.xing
注册用户
等级:上尉
经验:737
发帖:64
精华:0
注册:2013-10-30
状态:离线
发送短消息息给shuangqiang.xing 加好友    发送短消息息给shuangqiang.xing 发消息
发表于: IP:您无权察看 2013-10-31 14:37:22 | [全部帖] [楼主帖] 楼主

     Hadoop资料之前倒是有看过,只是工作一直没涉及,自己也没有动手过。之前尝试高版本的apache版本机编译,居然都不成功。初衷只是要搭建环境,却由于都放在业余时间搞,时间不连续,尝试的方法不同(中间尝试安装cdh4.40,结果发现面对一堆文档还不是自己想要的,最后还是回到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<LongWritable, Text, Text, IntWritable> {
      private IntWritable one = new IntWritable(1);
      @Override
      // 怎么切分的呢?key是什么?
      public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> 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);
            }
      }
}




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论