`

hadoop 版本兼容问题

 
阅读更多

  目前学习hadoop的书籍资料还不算多,在学习hadoop权威指南时,编写代码示例出现错误,代码为查找最好气温:

 public class MaxTemperature {

  public static void main(String[] args) throws IOException {
    if (args.length != 2) {
      System.err.println("Usage: MaxTemperature <input path> <output path>");
      System.exit(-1);
    }
    
    JobConf conf = new JobConf(MaxTemperature.class);
    conf.setJobName("Max temperature");

    FileInputFormat.addInputPath(conf, new Path(args[0]));
    FileOutputFormat.setOutputPath(conf, new Path(args[1]));
    
    conf.setMapperClass(MaxTemperatureMapper.class);
    conf.setReducerClass(MaxTemperatureReducer.class);

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

    JobClient.runJob(conf);
  }
}

 public class MaxTemperatureMapper extends MapReduceBase

  implements Mapper<LongWritable, Text, Text, IntWritable> {

  private static final int MISSING = 9999;
  
  public void map(LongWritable key, Text value,
      OutputCollector<Text, IntWritable> output, Reporter reporter)
      throws IOException {
    
    String line = value.toString();
    String year = line.substring(15, 19);
    int airTemperature;
    if (line.charAt(87) == '+') { // parseInt doesn't like leading plus signs
      airTemperature = Integer.parseInt(line.substring(88, 92));
    } else {
      airTemperature = Integer.parseInt(line.substring(87, 92));
    }
    String quality = line.substring(92, 93);
    if (airTemperature != MISSING && quality.matches("[01459]")) {
      output.collect(new Text(year), new IntWritable(airTemperature));
    }
  }
}

 public class MaxTemperatureReducer extends MapReduceBase

  implements Reducer<Text, IntWritable, Text, IntWritable> {

  public void reduce(Text key, Iterator<IntWritable> values,
      OutputCollector<Text, IntWritable> output, Reporter reporter)
      throws IOException {
    
    int maxValue = Integer.MIN_VALUE;
    while (values.hasNext()) {
      maxValue = Math.max(maxValue, values.next().get());
    }
    output.collect(key, new IntWritable(maxValue));
  }
}

 

我安装的hadoop为0.20.2版本的,在执行该代码是显示"Usage: MaxTemperature <input path> <output path>",说明是一开始就报错了。看来是版本不一致,代码没有兼容造成,按照新的方式编写相应代码:

public class NewMaxTemperature {
  
  static class NewMaxTemperatureMapper
    /*[*/extends Mapper<LongWritable, Text, Text, IntWritable>/*]*/ {

    private static final int MISSING = 9999;
    
    public void map(LongWritable key, Text value, /*[*/Context context/*]*/)
        throws IOException, /*[*/InterruptedException/*]*/ {
      
      String line = value.toString();
      String year = line.substring(15, 19);
      int airTemperature;
      if (line.charAt(87) == '+') { // parseInt doesn't like leading plus signs
        airTemperature = Integer.parseInt(line.substring(88, 92));
      } else {
        airTemperature = Integer.parseInt(line.substring(87, 92));
      }
      String quality = line.substring(92, 93);
      if (airTemperature != MISSING && quality.matches("[01459]")) {
        /*[*/context.write/*]*/(new Text(year), new IntWritable(airTemperature));
      }
    }
  }
  
  static class NewMaxTemperatureReducer
    /*[*/extends Reducer<Text, IntWritable, Text, IntWritable>/*]*/ {
  
    public void reduce(Text key, /*[*/Iterable/*]*/<IntWritable> values,
        /*[*/Context context/*]*/)
        throws IOException, /*[*/InterruptedException/*]*/ {
      
      int maxValue = Integer.MIN_VALUE;
      for (IntWritable value : values) {
        maxValue = Math.max(maxValue, value.get());
      }
      /*[*/context.write/*]*/(key, new IntWritable(maxValue));
    }
  }

  public static void main(String[] args) throws Exception {
    if (args.length != 2) {
      System.err.println("Usage: NewMaxTemperature <input path> <output path>");
      System.exit(-1);
    }
    
    /*[*/Job job = new Job();
    job.setJarByClass(NewMaxTemperature.class);/*]*/

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
    job.setMapperClass(NewMaxTemperatureMapper.class);
    job.setReducerClass(NewMaxTemperatureReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    
    /*[*/System.exit(job.waitForCompletion(true) ? 0 : 1);/*]*/
  }
}
 可以执行成功。
0
0
分享到:
评论

相关推荐

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】

    在大数据领域中,Hadoop、HBase和Hive是重要的组件,...若遇到特定版本的兼容问题,可以借助社区的力量,向其他用户或开发者寻求帮助。随着版本更新,用户也需要持续关注官方的最新动态,确保整合的组件能够顺畅运行。

    hadoop,hbase,hive版本兼容性说明.zip

    在Hadoop、HBase和Hive之间,必须确保所有组件的版本相互兼容,否则可能会遇到数据丢失、性能下降或者程序无法运行的问题。例如,一个新版本的Hadoop可能引入了新的API,而旧版本的HBase或Hive可能无法识别这些API,...

    不同Hadoop版本winutils文件包

    这个文件是Hadoop为了解决Windows操作系统与Hadoop的兼容性问题而提供的,因为Hadoop原本是设计在Linux系统上运行的。在Windows上运行Hadoop或相关工具(如Hive、HBase等)时,会用到winutils来执行一些Linux命令,...

    新手指导hadoop、hbase、hive版本对应关系查找表

    比如在文章中提到的,Hadoop 1.2、HBase 0.95.0和Hive 0.11.0的组合会带来不兼容问题,具体表现为创建关联表时会报错。 在实际使用过程中,如何查找合适的版本对应关系是很多新手遇到的难题。这时候,从官方网站...

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】 -

    在版本兼容性问题上,需要注意以下几点: 1. 了解每个组件的官方文档,其中通常会列出支持的版本范围。 2. 在升级或部署时,遵循“最小化改动”的原则,优先选择与现有组件兼容的新版本。 3. 测试环境中的全面测试是...

    hadoop、hbase、hive、zookeeper版本对应关系续(最新版)(2015)

    2. 在Hadoop 1.2的环境下部署HBase时,应避免使用HBase 0.95.0版本,因为这可能导致与Hive 0.11.0的不兼容问题。 3. 对于Hadoop 2.2版本,推荐使用HBase 0.96及Hive 0.12或更高版本,但需注意可能出现的小问题。 4...

    hadoop各版本的eclipse插件

    4. 兼容性问题: 需要注意的是,Hadoop插件的版本需要与Hadoop集群的版本相匹配。例如,如果你的集群运行的是Hadoop 0.20,那么你应该使用适用于该版本的插件。不兼容的版本可能导致任务提交失败或功能受限。 5. ...

    hadoop-commond(hadoop.dll)各个版本.rar

    综上所述,`hadoop.dll`文件在Windows上的Hadoop和Spark运行环境中扮演着关键角色,而这个压缩包提供了一种解决版本不兼容问题的方法。理解和管理好这些版本,可以有效地避免和解决问题,确保大数据处理任务的顺利...

    各个版本Hadoop,hadoop.dll以及winutils.exe文件下载大合集

    标题提到的“各个版本Hadoop”指的是Hadoop的不同发行版本,每个版本可能包含了性能优化、新功能添加或已知问题修复。例如,`hadoop-2.6.5`和`hadoop-3.2.1`代表了两个重要的Hadoop版本。`2.6.5`属于Hadoop 2.x系列...

    window版本下的hadoop 2.7.2版本的hadoop.dll和winutils.exe

    在Windows环境下搭建...请注意,虽然Windows支持Hadoop,但官方推荐的生产环境仍然是Linux,因为Windows环境下可能存在更多的兼容性和性能问题。然而,对于学习和开发目的,Windows环境下的Hadoop是一个很好的起点。

    hadoop2.7.2(window版本).zip

    确保JDK的版本与Hadoop兼容,通常推荐使用Oracle JDK 8。接着,解压下载的Hadoop 2.7.2 ZIP文件到一个合适的目录,并配置环境变量,如HADOOP_HOME,PATH等,以便系统能识别Hadoop命令。 Hadoop在Windows上的运行...

    winutils-master最高包含兼容Hadoop-3.4.0版本

    标题提到的"winutils-master最高包含兼容Hadoop-3.4.0版本"意味着这个压缩包提供的`winutils`版本是与Hadoop 3.4.0兼容的。Hadoop 3.4.0是Hadoop的一个稳定版本,带来了许多性能改进和新特性,例如增强的YARN资源...

    hadoop2.7.3+mahout0.9问题集

    1. **版本兼容性**:Hadoop和Mahout的版本兼容性是首要考虑的问题。虽然Mahout 0.9声称支持Hadoop 2.x系列,但在实际应用中,不同的Hadoop版本可能会导致编译或运行时错误。确保两者版本匹配至关重要,避免出现不...

    hadoop-eclipse插件各版本合集

    - 选择与目标Hadoop集群版本相匹配的插件,以避免兼容性问题。 - 使用插件进行单元测试,确保MapReduce作业的正确性。 - 利用Eclipse的调试工具深入理解作业执行过程,有助于优化代码。 7. **未来发展**:随着...

    Hadoop,Hbase,mahout三者兼容版本的API文档

    1. 数据流的一致性:从Hadoop HDFS中读取数据,然后在HBase中进行存储和查询,最后通过Mahout进行分析,整个过程无需担心版本不兼容的问题。 2. 效率提升:由于这三个组件的版本兼容,可以优化资源利用率,减少数据...

    hadoop-common2.2.0和2.7.1版本

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心组件包括Hadoop Common、Hadoop HDFS(Hadoop Distributed File ...当然,升级到更高版本时,需要考虑兼容性问题,确保整个Hadoop生态系统的稳定运行。

    hbase版本1.2.6,Hadoop版本2.7.1,eclipse链接hbase所需jar包

    这里我们关注的是HBase版本1.2.6和Hadoop版本2.7.1,这两个版本是兼容的,并且对于Eclipse的配置来说,确保正确的jar包被引入是非常关键的。 HBase是构建在Hadoop之上的分布式数据库,它提供了高可靠性、高性能、可...

    hadoop的dll文件 hadoop.zip

    安装或使用Hadoop的dll文件时,可能会遇到一些常见问题,如版本不兼容、路径配置错误或缺失依赖。解决这些问题通常需要检查以下几点: 1. 确保dll文件与Hadoop版本兼容。 2. 检查Java环境是否正确配置,包括JDK版本...

    hadoop-common-2.7.1-bin-master.zip+hbase-2.0.0-bin.tar.gz Hbase与Hadoop版本对应

    需要注意的是,Hadoop和HBase的版本匹配至关重要,不兼容的版本可能导致运行错误或性能问题。因此,在选择Hadoop和HBase的版本时,应参考官方文档或社区的最佳实践。此外,持续监控和维护也是保证系统稳定运行的关键...

    windows hadoop 下bin文件(含多个版本的winutils.exe)

    在选择`winutils.exe`的版本时,应确保与所使用的Hadoop版本兼容。不同的Hadoop发行版可能需要不同版本的`winutils.exe`来正确运行。通常,`winutils.exe`会随着Hadoop的版本更新而更新,以解决新版本中可能出现的...

Global site tag (gtag.js) - Google Analytics