org.apache.hadoop.mapreduce包分析

本文分析了Apache Hadoop MapReduce包中的JobContext和TaskAttemptContext类。JobContext提供任务运行时的只读视图,包含JobConf和JobID,提供诸如mapred.reduce.tasks、mapred.working.dir等属性。TaskAttemptContext继承JobContext并增加TaskAttemptID和status,实现了Progressable接口。Job类则允许用户配置、提交和管理Job。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上类图:


=====================================================================================

JobContext: A read-only view of the job that is provided to the tasks while they are running.

JobContext它提供只读属性,它含有两个成员JobConf以及JobID。它提供的只读属性除了jobId保存在JobID中以外,所有的属性都是从jobConf中读取,包括以下属性:

1.mapred.reduce.tasks,默认值为1

2.mapred.working.dir,文件系统的工作目录

3.mapred.job.name,用户设置的job 的名字

4.mapreduce.map.class

5.mapreduce.inputformat.class

6.mapreduce.combine.class

7.mapreduce.reduce.class

8.mapreduce.outputformat.class

9.mapreduce.partitioner.class

=====================================================================================

TaskAttemptContext:The context for task attempts.

它继承自JobContext,并实现了Progressable接口,它比JobContext多了一个成员TaskAttemptID和status,对Progressable的实现是空实现。

=====================================================================================

Job:The job submitter's view of the Job. It allows the user to configure thejob, submit it, control its execution, and query the state. The set methodsonly work until the job is submitted, afterwards they will throw an IllegalStateException.它可以对job进行配置,提交,控制其执行,查询状态。

它有两个成员:JobClient和RunningJob

=====================================================================================

<think>我们正在解决一个Maven依赖问题:无法找到org.apache.hadoop:hadoop-mapreduce-client-core:3.1.4。 根据提供的引用,用户可能是在配置Hadoop开发环境时遇到了这个问题。引用[1]和[2]中提到了使用Hadoop 3.1.4版本的依赖,hadoop-mapreduce-client-core。 但是,Maven中央仓库中可能没有这个特定版本的artifact,或者用户配置的仓库中没有这个版本。 解决方案步骤: 1. 检查Maven仓库配置:确保Maven settings.xml配置了正确的仓库,比如阿里云镜像等。 2. 检查依赖坐标:确认依赖坐标是否正确。 3. 尝试清理本地仓库并重新下载:有时候本地仓库的缓存可能导致问题。 4. 如果确实没有这个版本,考虑使用其他可用的版本(如3.1.3或3.2.0等),或者检查Hadoop官方是否提供了该版本的仓库。 根据引用[1]和[2],用户使用的Hadoop版本是3.1.4,但可能这个版本在中央仓库不存在。我们可以查看Maven中央仓库: 访问:https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core 可以看到,hadoop-mapreduce-client-core的版本有3.1.0, 3.1.1, 3.1.2, 3.1.3,然后跳到了3.2.0,没有3.1.4。因此,3.1.4版本可能没有发布到中央仓库。 因此,我们需要更换版本。通常,Hadoop的依赖版本应该保持一致,所以我们可以将整个Hadoop依赖的版本统一为3.1.3(因为3.1.3在中央仓库存在)或者升级到3.2.0。 步骤: 1. 修改pom.xml中所有Hadoop依赖的版本为3.1.3(或3.2.0,但注意版本兼容性)。 2. 如果用户本地安装的Hadoop环境是3.1.4,那么理论上使用3.1.3的客户端依赖也是可以兼容的(因为Hadoop遵循向下兼容?但实际上小版本之间可能会有问题,但通常Hadoop的小版本更新是修复bug,API变化不大,可以尝试)。 3. 或者,用户也可以考虑将本地安装的Hadoop版本调整为3.1.3,以保持完全一致。 另外,引用[4]提到了在IntelliJ IDEA中配置Maven项目,可以参考该博客进行环境配置。 因此,我们建议用户将Hadoop依赖版本改为3.1.3,并确保所有Hadoop相关依赖版本一致。 修改后的依赖示例(参考引用[2]): ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>3.1.3</version> </dependency> ``` 注意:hadoop-client依赖已经含了hadoop-mapreduce-client-core等,所以有时候只需要hadoop-client即可。但是为了明确,可以单独添加。 如果用户必须使用3.1.4版本,那么可能需要检查是否配置了其他仓库(如Apache的仓库)或者手动安装该版本到本地仓库。 手动安装到本地仓库的步骤(如果用户有3.1.4的jar): 1. 下载hadoop-mapreduce-client-core-3.1.4.jar(以及对应的pom文件,如果有的话)。 2. 使用Maven命令安装到本地仓库: ``` mvn install:install-file -Dfile=hadoop-mapreduce-client-core-3.1.4.jar -DgroupId=org.apache.hadoop -DartifactId=hadoop-mapreduce-client-core -Dversion=3.1.4 -Dpackaging=jar ``` 但是,这种方法需要用户自己确保所有依赖的jar都可用,因此不推荐,除非必要。 综上所述,推荐解决方案是更换版本为3.1.3。 最后,生成相关问题。</think>### Maven依赖问题解决方案:`org.apache.hadoop:hadoop-mapreduce-client-core:3.1.4`未找到 #### 问题分析 当Maven报告依赖`org.apache.hadoop:hadoop-mapreduce-client-core:3.1.4`未找到时,通常有以下原因: 1. **版本不存在**:Hadoop官方未发布该版本到中央仓库 2. **仓库配置问题**:本地仓库/镜像站未同步该版本 3. **依赖冲突**:项目中其他依赖覆盖了版本声明 #### 解决步骤 1. **验证版本可用性** - 访问[Maven中央仓库](https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core)查看可用版本 - 确认3.1.4不存在(最新为3.1.3→3.2.0→3.3.6) 2. **统一Hadoop版本(推荐方案)** ```xml <!-- 修改所有Hadoop依赖为3.1.3(中央仓库存在) --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>3.1.3</version> <!-- 版本修正 --> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.1.3</version> <!-- 保持版本一致 --> </dependency> ``` > **注意**:所有Hadoop组件版本必须严格一致[^1][^2] 3. **添加仓库配置(备用方案)** 若必须使用3.1.4,在`pom.xml`添加Apache快照仓库: ```xml <repositories> <repository> <id>apache-snapshots</id> <url>https://repository.apache.org/snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> ``` 4. **清理本地仓库** ```bash mvn dependency:purge-local-repository # 清理无效缓存 mvn clean install -U # 强制更新依赖 ``` #### 完整配置示例 ```xml <dependencies> <!-- Hadoop基础依赖 --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.1.3</version> <!-- 统一版本 --> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>3.1.3</version> <!-- 修正后版本 --> </dependency> <!-- 测试依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.36</version> </dependency> </dependencies> ``` #### 开发环境验证 1. 在`src/main/java`创建WordCount示例 2. 使用引用[4]的IDEA配置指南确保: - Maven路径正确 - JDK版本≥8 - Hadoop环境变量`HADOOP_HOME`指向本地安装目录 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值