zoukankan      html  css  js  c++  java
  • hadoop本地调试方法

      Mapreduce 是Hadoop上一个进行分布式数据运算和统计的框架,但是每次运行程序的时候都需要将程序打包并上传的集群环境中运行,这就会让程序的调试变得十分不方便。所以在这里写下这篇博客和大家交流学习如何在本地调试Mapreduce程序。

      

     本地是windows系统,文件路径也是本地

      首先需要将编译后的windos放入解压后的hadoop解压包的bin目录下,还有hadoop,dll文件不同版本的windows对应的winutils.exe是不同的。具体编译方法,网上可以找到相关教程

    这里就不详说了。当然网上也有好心人编译好的,来后就能用。

      然后将hadoop的HADOOP_HOME配置到环境变量中去。在PATH中配置PATH=“%HADOOP—HOMEin%”;

      可能有些同学运行程序后仍会包报错NullPointException。需要将bin目录下的hadoop.dll考到C盘的system32下一份。

    再次运行,非常好。

      在本地运行需要配置两个参数

      

    1. conf.set("mapred.job.tracker", "local");  
    2. conf.set("fs.default.name", "local");    

    其实这两个参数也可以不用配置,因为系统默认的就是本地

    package worldcount;
    
    import java.io.IOException;
    
    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 WorldCountDrive {
        
        public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
            
            Configuration conf = new Configuration();
        /*    conf.set("mapred.job.tracker", "local");  
            conf.set("fs.default.name", "local");   */
            
            Job job = Job.getInstance(conf);
            
            job.setJarByClass(WorldCountDrive.class);
            
            job.setMapperClass(WorldcountMap.class);
            job.setReducerClass(WorldCountReduce.class);
            
            
            job.setMapOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
            
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
            
            FileInputFormat.setInputPaths(job, new Path("C:/README.txt"));
            FileOutputFormat.setOutputPath(job, new Path("C:/output"));
            
            boolean res = job.waitForCompletion(true);
            System.exit(res?0:1);
        }
    }

    这样我们写的mapreduce程序就可以在本地打断点进行调试了

    log4j的配置

    hadoop.root.logger=DEBUG, console  
    log4j.rootLogger = DEBUG, console  
    log4j.appender.console=org.apache.log4j.ConsoleAppender  
    log4j.appender.console.target=System.out  
    log4j.appender.console.layout=org.apache.log4j.PatternLayout  
    log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n  

    本地系统运行,文件系统用HDFS

    conf.set("mapred.job.tracker", "local");  
    conf.set("fs.defaultFS", "hdfs://Hadoop:9000");  
    ………………  
    FileInputFormat.setInputPaths(job, new Path("/Users/admin/Telephone_Summary")); //hdfs的文件路径    
    FileOutputFormat.setOutputPath(job, new Path("/Users/admin/mapreduceTestOutput"));//hdfs的文件路径</span>  

    集群运行模式

    (1)将mapreduce程序提交给yarn集群resourcemanager,分发到很多的节点上并发执行

    (2)处理的数据和输出结果应该位于hdfs文件系统

    (3)提交集群的实现步骤:

    A、将程序打成JAR包,然后在集群的任意一个节点上用hadoop命令启动

         $ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver inputpath outputpath

    B、直接在linuxeclipse中运行main方法

    (项目中要带参数:mapreduce.framework.name=yarn以及yarn的两个基本配置)

    C、如果要在windowseclipse中提交job给集群,则要修改YarnRunner

    mapreduce程序在集群中运行时的大体流程:

  • 相关阅读:
    自学python day 10 函数的动态参数、命名空间、作用域
    老男孩 python 自学 打印05 dict 复习总结
    老男孩python 自学day09 函数开始
    今天
    day 03
    eclipse如何安装配置tomcat
    windows上配置maven环境
    如何创建ssh key使电脑和Github关联在一起
    怎么将本地文件上传到github
    使用git工具上传代码到github
  • 原文地址:https://www.cnblogs.com/duan2/p/7507517.html
Copyright © 2011-2022 走看看