首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hadoop Jar运行,但没有输出。驱动程序、映射器和reduce在namenode中编译成功

Hadoop Jar运行,但没有输出。驱动程序、映射器和reduce在namenode中编译成功
EN

Stack Overflow用户
提问于 2016-06-07 13:54:02
回答 1查看 243关注 0票数 0

我是Hadoop编程的新手,我是通过在三节点集群上安装Hadoop 2.7.1开始学习的。我试过在Hadoop中运行开箱即用的helloworld jars,它运行得很好,但我在本地机器上编写了自己的驱动程序代码,并将其捆绑到一个jar中,然后以这种方式执行,但它失败了,没有出现错误消息。

这是我的代码,这是我所做的。

WordCountMapper.java

代码语言:javascript
运行
复制
package mot.com.bin.test;

import java.io.IOException;

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>

{

        public void map(LongWritable key, Text Value,
                        OutputCollector<Text, IntWritable> opc, Reporter r)
                        throws IOException {
                String s = Value.toString();
                for (String word :s.split(" ")) {
                        if( word.length() > 0) {
                                opc.collect(new Text(word), new IntWritable(1));
                        }
                }

        }


}

WordCountReduce.java

代码语言:javascript
运行
复制
package mot.com.bin.test;

import java.io.IOException;
import java.util.Iterator;

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

public class WordCountReduce  extends MapReduceBase implements Reducer < Text, IntWritable, Text, IntWritable>{

        public void reduce(Text key, Iterator<IntWritable> values,
                        OutputCollector<Text, IntWritable> opc, Reporter r)
                        throws IOException {
                // TODO Auto-generated method stub

                int i = 0;
                while (values.hasNext()) {
                        IntWritable in = values.next();
                        i+=in.get();
                }
                opc.collect(key, new IntWritable (i));
        }

WordCount.java

代码语言:javascript
运行
复制
/**
 * **DRIVER**
 */
package mot.com.bin.test;

import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.io.Text;
//import com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text;

/**
 * @author rgb764
 *
 */
public class WordCount extends Configured implements Tool{

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

        }

        public int run(String[] arg0) throws Exception {

                if (arg0.length < 2) {
                        System.out.println("Need input file and output directory");
                        return -1;
                }

                JobConf conf = new JobConf();

                FileInputFormat.setInputPaths(conf, new Path( arg0[0]));
                FileOutputFormat.setOutputPath(conf, new Path( arg0[1]));

                conf.setOutputKeyClass(Text.class);
                conf.setOutputValueClass(IntWritable.class);

                conf.setMapperClass(WordCountMapper.class);
                conf.setReducerClass(WordCountReduce.class);

                conf.setOutputKeyClass(Text.class);
                conf.setOutputValueClass(IntWritable.class);

                JobClient.runJob(conf);
                return 0;
        }

}

首先,我尝试将其作为jar从eclipse中提取出来,并在我的hadoop集群中运行。没有错误,也没有成功。然后将我的java文件移动到我的NameNode,编译每个java文件,然后在那里创建jar文件,仍然hadoop命令不会返回任何结果,但也不会返回错误。在这件事上请帮帮我。

代码语言:javascript
运行
复制
hadoop jar WordCout.jar mot.com.bin.test.WordCount /karthik/mytext.txt /tempo

使用Maven提取所有依赖的jar文件,并将它们添加到my name节点的类路径中。帮我找出我哪里错了。

EN

回答 1

Stack Overflow用户

发布于 2016-06-08 02:20:36

据我所知,您的main方法中缺少实例化工具实现(在您的示例中为WordCount )并运行该工具的代码。

代码语言:javascript
运行
复制
     public static void main(String[] args) throws Exception {        
           int res = ToolRunner.run(new Configuration(), new WordCount(), args);         
           System.exit(res);
   }

请参阅this

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37671503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档