目前学习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);/*]*/
}
}
可以执行成功。
分享到:
相关推荐
在大数据领域中,Hadoop、HBase和Hive是重要的组件,...若遇到特定版本的兼容问题,可以借助社区的力量,向其他用户或开发者寻求帮助。随着版本更新,用户也需要持续关注官方的最新动态,确保整合的组件能够顺畅运行。
在Hadoop、HBase和Hive之间,必须确保所有组件的版本相互兼容,否则可能会遇到数据丢失、性能下降或者程序无法运行的问题。例如,一个新版本的Hadoop可能引入了新的API,而旧版本的HBase或Hive可能无法识别这些API,...
这个文件是Hadoop为了解决Windows操作系统与Hadoop的兼容性问题而提供的,因为Hadoop原本是设计在Linux系统上运行的。在Windows上运行Hadoop或相关工具(如Hive、HBase等)时,会用到winutils来执行一些Linux命令,...
比如在文章中提到的,Hadoop 1.2、HBase 0.95.0和Hive 0.11.0的组合会带来不兼容问题,具体表现为创建关联表时会报错。 在实际使用过程中,如何查找合适的版本对应关系是很多新手遇到的难题。这时候,从官方网站...
在版本兼容性问题上,需要注意以下几点: 1. 了解每个组件的官方文档,其中通常会列出支持的版本范围。 2. 在升级或部署时,遵循“最小化改动”的原则,优先选择与现有组件兼容的新版本。 3. 测试环境中的全面测试是...
2. 在Hadoop 1.2的环境下部署HBase时,应避免使用HBase 0.95.0版本,因为这可能导致与Hive 0.11.0的不兼容问题。 3. 对于Hadoop 2.2版本,推荐使用HBase 0.96及Hive 0.12或更高版本,但需注意可能出现的小问题。 4...
4. 兼容性问题: 需要注意的是,Hadoop插件的版本需要与Hadoop集群的版本相匹配。例如,如果你的集群运行的是Hadoop 0.20,那么你应该使用适用于该版本的插件。不兼容的版本可能导致任务提交失败或功能受限。 5. ...
综上所述,`hadoop.dll`文件在Windows上的Hadoop和Spark运行环境中扮演着关键角色,而这个压缩包提供了一种解决版本不兼容问题的方法。理解和管理好这些版本,可以有效地避免和解决问题,确保大数据处理任务的顺利...
标题提到的“各个版本Hadoop”指的是Hadoop的不同发行版本,每个版本可能包含了性能优化、新功能添加或已知问题修复。例如,`hadoop-2.6.5`和`hadoop-3.2.1`代表了两个重要的Hadoop版本。`2.6.5`属于Hadoop 2.x系列...
在Windows环境下搭建...请注意,虽然Windows支持Hadoop,但官方推荐的生产环境仍然是Linux,因为Windows环境下可能存在更多的兼容性和性能问题。然而,对于学习和开发目的,Windows环境下的Hadoop是一个很好的起点。
确保JDK的版本与Hadoop兼容,通常推荐使用Oracle JDK 8。接着,解压下载的Hadoop 2.7.2 ZIP文件到一个合适的目录,并配置环境变量,如HADOOP_HOME,PATH等,以便系统能识别Hadoop命令。 Hadoop在Windows上的运行...
标题提到的"winutils-master最高包含兼容Hadoop-3.4.0版本"意味着这个压缩包提供的`winutils`版本是与Hadoop 3.4.0兼容的。Hadoop 3.4.0是Hadoop的一个稳定版本,带来了许多性能改进和新特性,例如增强的YARN资源...
1. **版本兼容性**:Hadoop和Mahout的版本兼容性是首要考虑的问题。虽然Mahout 0.9声称支持Hadoop 2.x系列,但在实际应用中,不同的Hadoop版本可能会导致编译或运行时错误。确保两者版本匹配至关重要,避免出现不...
- 选择与目标Hadoop集群版本相匹配的插件,以避免兼容性问题。 - 使用插件进行单元测试,确保MapReduce作业的正确性。 - 利用Eclipse的调试工具深入理解作业执行过程,有助于优化代码。 7. **未来发展**:随着...
1. 数据流的一致性:从Hadoop HDFS中读取数据,然后在HBase中进行存储和查询,最后通过Mahout进行分析,整个过程无需担心版本不兼容的问题。 2. 效率提升:由于这三个组件的版本兼容,可以优化资源利用率,减少数据...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心组件包括Hadoop Common、Hadoop HDFS(Hadoop Distributed File ...当然,升级到更高版本时,需要考虑兼容性问题,确保整个Hadoop生态系统的稳定运行。
这里我们关注的是HBase版本1.2.6和Hadoop版本2.7.1,这两个版本是兼容的,并且对于Eclipse的配置来说,确保正确的jar包被引入是非常关键的。 HBase是构建在Hadoop之上的分布式数据库,它提供了高可靠性、高性能、可...
安装或使用Hadoop的dll文件时,可能会遇到一些常见问题,如版本不兼容、路径配置错误或缺失依赖。解决这些问题通常需要检查以下几点: 1. 确保dll文件与Hadoop版本兼容。 2. 检查Java环境是否正确配置,包括JDK版本...
需要注意的是,Hadoop和HBase的版本匹配至关重要,不兼容的版本可能导致运行错误或性能问题。因此,在选择Hadoop和HBase的版本时,应参考官方文档或社区的最佳实践。此外,持续监控和维护也是保证系统稳定运行的关键...
在选择`winutils.exe`的版本时,应确保与所使用的Hadoop版本兼容。不同的Hadoop发行版可能需要不同版本的`winutils.exe`来正确运行。通常,`winutils.exe`会随着Hadoop的版本更新而更新,以解决新版本中可能出现的...