Hadoop新旧API对比教程:从查看API到实战编程

4星 · 超过85%的资源 需积分: 10 2 下载量 125 浏览量 更新于2024-07-23 收藏 488KB PDF 举报
"教你如何查看API及使用hadoop新api编程" 在Hadoop生态系统中,API(应用程序编程接口)是开发者用来构建分布式应用的关键工具。这篇教程将指导你如何查看Hadoop API以及如何利用Hadoop的新API进行编程。了解并熟练掌握Hadoop API的更新对于优化代码性能和兼容性至关重要。 Hadoop 2.4引入了新的MapReduce API,旨在提高性能、可伸缩性和易用性。这个新API主要集中在`org.apache.hadoop.mapreduce`包下,而旧的API则位于`org.apache.hadoop.mapred`包中。以下是关于这两个API的一些关键点: 1. 弃用的API: - `org.apache.hadoop.mapred`包在Hadoop 2.x版本中被认为是过时的。虽然它仍然可用,但建议开发者逐渐迁移到新API,以利用更现代的特性和改进。 2. 旧API初始化Job: - 在旧API中,我们通常使用`JobConf`类来初始化Job。例如: ```java JobConf conf = new JobConf(new Configuration(), BookCount.class); Job job = Job.getInstance(conf, "Book Count"); ``` 3. 新API初始化Job: - 在新API中,我们使用`Job`类的静态方法`getInstance()`来初始化Job对象,如下所示: ```java Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "Book Count"); ``` 以下是使用新API编写MapReduce程序的一个简单示例,该程序计算`booklist.log`文件的行数: ```java package bookCount; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class BookCountNewApi { public static class TokenizerMapper extends Mapper<LongWritable, Text, Text, IntWritable> { // Mapper逻辑 } public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { // Reducer逻辑 } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "Book Count"); job.setJarByClass(BookCountNewApi.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` 要运行这个程序,你需要确保Hadoop配置文件(如`core-site.xml`, `hdfs-site.xml`等)位于项目的`src`目录下,并且有一个`log4j.properties`文件位于`conf`目录中。然后,你可以通过在Hadoop集群上运行`runasapplication`或使用Hadoop插件的“Run on Hadoop”功能来执行MapReduce任务。 在使用新API时,要注意的关键点包括使用`mapreduce.lib.input.TextInputFormat`和`mapreduce.lib.output.TextOutputFormat`作为默认输入和输出格式,以及使用`job.waitForCompletion(true)`来等待作业完成并返回状态。 理解并熟练使用Hadoop的新API不仅可以提高代码质量,还可以更好地利用Hadoop的最新特性,如YARN资源管理、动态分区支持和更高效的 Shuffle 阶段。因此,对于任何致力于Hadoop开发的程序员来说,这是一个值得投入时间和精力的重要领域。