Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 为什么减速机在此代码之后停止工作?_Logging_Hadoop_Hdfs_Reduce - Fatal编程技术网

Logging 为什么减速机在此代码之后停止工作?

Logging 为什么减速机在此代码之后停止工作?,logging,hadoop,hdfs,reduce,Logging,Hadoop,Hdfs,Reduce,下面是流行的hadoop教科书中提供的一个简单示例。代码如下:- [节目结束后,我将解释我的问题] package src.main.myjob; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Iterator; import java.util.Set; import javax.lang.model.SourceVersion;

下面是流行的hadoop教科书中提供的一个简单示例。代码如下:- [节目结束后,我将解释我的问题]

package src.main.myjob;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Set;

import javax.lang.model.SourceVersion;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
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;
import org.apache.hadoop.mapred.KeyValueTextInputFormat;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class MyJob extends Configured implements Tool
{
    public static class MapClass extends MapReduceBase implements Mapper<Text, Text, Text, Text>
    {

        @Override
        public void map(Text key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException 
        {
        output.collect(value, key); 
        }
    }

    public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, Text>
    {
            public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException
            {
                String csv = "";
                while(values.hasNext())
                {
        csv += values.next().toString();
                        csv += ",";
                }
                output.collect(key, new Text(csv));
            }
    }


    @Override
    public int run(String[] args) throws Exception
    {
        Configuration conf = new Configuration();
        JobConf job = new JobConf(conf, MyJob.class);

        Path in = new Path(args[0]);
        Path out = new Path(args[1]);

        FileInputFormat.setInputPaths(job, in);
        FileOutputFormat.setOutputPath(job, out);

        job.setJobName("MyJob");
        job.setMapperClass(MapClass.class);
        job.setReducerClass(Reduce.class);

        job.setInputFormat(KeyValueTextInputFormat.class);
        job.setOutputFormat(TextOutputFormat.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

        job.set("key.value.seperator.in.input.line", ",");

        JobClient.runJob(job);

        return 0;
    }

    public static void main(String[] args) throws Exception
    {
        int res = ToolRunner.run(new Configuration(), new MyJob(), args);

        System.exit(res);
    }


}
包src.main.myjob;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.util.Iterator;
导入java.util.Set;
导入javax.lang.model.SourceVersion;
导入org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.conf.Configured;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapred.FileInputFormat;
导入org.apache.hadoop.mapred.FileOutputFormat;
导入org.apache.hadoop.mapred.JobClient;
导入org.apache.hadoop.mapred.JobConf;
导入org.apache.hadoop.mapred.KeyValueTextInputFormat;
导入org.apache.hadoop.mapred.MapReduceBase;
导入org.apache.hadoop.mapred.Mapper;
导入org.apache.hadoop.mapred.OutputCollector;
导入org.apache.hadoop.mapred.Reducer;
导入org.apache.hadoop.mapred.Reporter;
导入org.apache.hadoop.mapred.TextOutputFormat;
导入org.apache.hadoop.util.Tool;
导入org.apache.hadoop.util.ToolRunner;
公共类MyJob扩展配置的实现工具
{
公共静态类MapClass扩展MapReduceBase实现Mapper
{
@凌驾
公共void映射(文本键、文本值、OutputCollector输出、报告器报告器)引发IOException
{
输出。收集(值、键);
}
}
公共静态类Reduce扩展MapReduceBase实现Reducer
{
公共void reduce(文本键、迭代器值、OutputCollector输出、Reporter报告器)引发IOException
{
字符串csv=“”;
while(values.hasNext())
{
csv+=values.next().toString();
csv+=“,”;
}
输出.收集(键,新文本(csv));
}
}
@凌驾
公共int运行(字符串[]args)引发异常
{
Configuration conf=新配置();
JobConf job=newjobconf(conf,MyJob.class);
路径输入=新路径(args[0]);
路径输出=新路径(args[1]);
setInputPath(作业,在中);
setOutputPath(作业,输出);
job.setJobName(“我的工作”);
job.setMapperClass(MapClass.class);
job.setReducerClass(Reduce.class);
job.setInputFormat(KeyValueTextInputFormat.class);
setOutputFormat(TextOutputFormat.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.set(“key.value.separator.in.input.line”、“,”);
JobClient.runJob(作业);
返回0;
}
公共静态void main(字符串[]args)引发异常
{
int res=ToolRunner.run(新配置(),新MyJob(),args);
系统退出(res);
}
}
现在为了读者的利益,这个程序处理一个包含引用专利id和引用专利id行的文件[大文件],并将其反转。因此,本质上,输出文件列出了所有专利ID,每个ID后面都有一个以逗号分隔的引用专利ID列表


当我尝试执行它时,Map任务运行得很好,但是reduce任务却停留在66%。我尝试了各种方法,比如检查日志(非常隐晦&几乎没有用)和增加还原器的数量。然而,我在理解这个问题上几乎没有成功。代码直接指向我。我非常感谢您帮助我理解如何调试这个问题。我看不出这个程序有什么明显的错误。

首先,请考虑在<减速器>中使用<代码> StringBuilder <代码>,如果您要连接字符串,请追加。如果数据量很大,那么这种循环的性能会更好

StringBuilder sb = new StringBuilder();
sb.append(values.next().toString());

如果有大量数据需要处理,请确保还原程序中有足够的内存。

作为这个问题的补充,我最终成功地完成了MapReduce程序。我不得不在mapred-site.xml中将hadoop的内存分配增加到6gig,并按照JthRocker在上述文章中的建议使用字符串生成器。它确实完成了,但是输出文件不可读。ubuntu表示它的大小是258MB,比我的输入文件稍微小一些。我想知道这是我的代码本身的缺陷吗?或者如果数据没有以编辑友好的格式正确写入,导致解释问题?我们高度赞赏所有有关这方面的投入

感谢您的回复,我希望我能测试出这一点,但是数据节点没有启动。我想知道为什么Hadoop在行为上如此不一致。开发MapReduce应用程序似乎比管理Hadoop/HDFS=>Harderst要容易得多。最重要的部分是调试/Admin,而不是开发……我认为您没有足够的磁盘空间。你检查过了吗?把数据节点日志放在这里需要一些等待。我现在没有访问Hadoop开发者PC的权限……好吧,我做了研究并查看了日志,似乎是名称空间ID不匹配的问题。看起来这是一个记录良好的问题,但就记录而言,我通过删除解决该问题的…hadoop/tmp/dfs/name/…“目录……解决了它。现在我开始测试您的建议。希望reducer能够完成它的任务。我将发回结果。。。