首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何再次覆盖/重用Hadoop作业的现有输出路径和agian

在 Hadoop 中,覆盖现有输出路径和重用输出路径的方法如下:

  1. 使用 FileSystem 类来删除现有输出路径

在运行 Hadoop 作业之前,可以使用 FileSystem 类来删除现有输出路径。以下是一个示例代码:

代码语言:java
复制
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HadoopJob {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(conf);
        Path outputPath = new Path("hdfs://localhost:9000/output");
        if (fs.exists(outputPath)) {
            fs.delete(outputPath, true);
        }
        // 在这里运行 Hadoop 作业
    }
}
  1. 使用 -D 参数覆盖输出路径

在运行 Hadoop 作业时,可以使用 -D 参数来覆盖现有输出路径。以下是一个示例命令:

代码语言:txt
复制
hadoop jar hadoop-job.jar -D mapreduce.output.fileoutputformat.outputdir=hdfs://localhost:9000/output
  1. 使用 FileOutputFormat 类来设置输出路径

在 Hadoop 作业中,可以使用 FileOutputFormat 类来设置输出路径。以下是一个示例代码:

代码语言:java
复制
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 HadoopJob {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "Hadoop Job");
        job.setJarByClass(HadoopJob.class);
        job.setMapperClass(MyMapper.class);
        job.setReducerClass(MyReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path("hdfs://localhost:9000/input"));
        FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/output"));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

在这个示例中,我们使用 FileOutputFormat.setOutputPath() 方法来设置输出路径。

  1. 使用 Path 类来检查输出路径是否存在

在 Hadoop 作业中,可以使用 Path 类来检查输出路径是否存在。以下是一个示例代码:

代码语言:java
复制
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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 HadoopJob {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "Hadoop Job");
        job.setJarByClass(HadoopJob.class);
        job.setMapperClass(MyMapper.class);
        job.setReducerClass(MyReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path("hdfs://localhost:9000/input"));
        Path outputPath = new Path("hdfs://localhost:9000/output");
        FileSystem fs = outputPath.getFileSystem(conf);
        if (fs.exists(outputPath)) {
            fs.delete(outputPath, true);
        }
        FileOutputFormat.setOutputPath(job, outputPath);
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

在这个示例中,我们使用 Path 类来检查输出路径是否存在,并在存在时删除它。

总之,在 Hadoop 中覆盖现有输出路径和重用输出路径的方法有很多种。你可以根据自己的需求选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Hadoop基础教程-第6章 MapReduce入门(6.4 MapReduce程序框架)

    我们知道,从单线程编程到多线程编程,程序结构复杂度增大了。类似的,从单机程序到分布式程序,程序结构的复杂度也增大了。这是问题的复杂环境决定的。 所以,很多初学者更接触分布式编程时,望而却步、知难而退了。可事实上,Hadoop是一个很易用的分布式编程框架,经过良好封装屏蔽了很多分布式环境下的复杂问题,因此,对普通开发者来说很容易,容易到可以依照程序模版,照葫芦画瓢。 下面代码即是Hadoop的MapReduce程序模版,其中使用了Hadoop辅助类,通过Configured的getConf()方法获取Configuration对象,重写Tool接口的run方法,实现Job提交功能。 这样就可以实现代码与配置隔离,修改MapReduce参数不需要修改java代码、打包、部署,提高工作效率。

    03

    Hadoop之MapReduce程序分析

    摘要:Hadoop之MapReduce程序包括三个部分:Mapper,Reducer和作业执行。本文介绍和分析MapReduce程序三部分结构。 关键词:MapReduce  Mapper  Reducer  作业执行 MapReduce程序包括三个部分,分别是Mapper,Reducer和作业执行。 Mapper 一个类要充当Mapper需要继承MapReduceBase并实现Mapper接口。 Mapper接口负责数据处理阶段。它采用形式为Mapper<K1,V1,K2,V2>的Java泛型。这里的键类和值类分别实现了WritableComparable接口和Writable接口。Mapper接口只有一个map()方法,用于处理一个单独的键值对。map()方法形式如下。 public  void map(K1  key,  V1  value,  OutputCollector<K2,V2> output ,Reporter reporter  ) throws  IOException 或者 public  void map(K1  key, V1 value,  Context  context) throws  IOException, InterruptedException 该函数处理一个给定的键/值对(K1, V1),生成一个键/值对(K2, V2)的列表(该列表也可能为空)。 Hadoop提供的一些有用的Mapper实现,包括IdentityMapper,InverseMapper,RegexMapper和TokenCountMapper等。 Reducer 一个类要充当Reducer需要继承MapReduceBase并实现Reducer接口。 Reduce接口有一个reduce()方法,其形式如下。 public  void reduce(K2  key , Iterator<V2> value, OutputCollector<K3, V3>  output,  Reporter reporter) throws  IOException 或者 public  void  reduce(K2  key, Iterator<V2> value,  Context context)  throws  IOException, InterruptedException 当Reducer任务接受来自各个Mapper的输出时,它根据键/值对中的键对输入数据进行排序,并且把具有相同键的值进行归并,然后调用reduce()函数,通过迭代处理那些与指定键相关联的值,生成一个列表<K3, V3>(可能为空)。 Hadoop提供一些有用Reducer实现,包括IdentityReducer和LongSumReducer等。 作业执行 在run()方法中,通过传递一个配置好的作业给JobClient.runJob()以启动MapReduce作业。run()方法里,需要为每个作业定制基本参数,包括输入路径、输出路径、Mapper类和Reducer类。 一个典型的MapReduce程序基本模型如下。 public  class  MyJob extends  Configured implements Tool {       /*  mapreduce程序中Mapper*/       public static class MapClass extends MapReduceBase                                  implements  Mapper<Text,Text,Text,Text>  {             public void map(Text  key,  Text value,                                                    OutputCollector<Text,Text> output,                                                 Reporter  reporter) throws IOException {                                                       //添加Mapper内处理代码                                                 }       }       /*MapReduce程序中Reducer*/       public  static class  Reduce  exten

    02

    【Hadoop】17-在集群上运行MapRedece

    本地作业运行器使用单JVM运行一个作业,只要作业需要的所有类都在类路径(classpath)上,那么作业就可以正常执行。在分布式的环境中,情况稍微复杂一些。开始的时候作业的类必须打包成一个作业JAR文件并发送给集群。Hadoop通过搜索驱动程序的类路径自动找到该作业JAR文件,该类路径包含JonfConf或Job上的setJarByClass()方法中设置的类。另一种方法,如果你想通过文件路径设置一个指定的JAR文件,可以使用setJar()方法。JAR文件路径可以是本地的,也可以是一个HDFS文件路径。通过使用像Ant或Maven的构建工具可以方便地创建作业的JAR文件。当给定范例所示的POM时,下面的Maven命令将在包含所有已编译的类的工程目录中创建一个名为hadoop-example.jar的JAR文件:

    04
    领券