《Hadoop: The Definitive Guide》读书笔记 -- Chapter 2 MapReduce

本文探讨了使用Hadoop MapReduce进行大规模数据处理的方法,包括如何将工作分割为等大小的部分、数据分布式存储、任务调度、数据局部优化、结果合并以及使用Hadoop Streaming进行文本处理的基本步骤。

Chapter 2 MapReduce


Analyzing the Data with Unix Tools

Problems

1. dividing work into equal-size isn't always easy or obvious.

2. Combining the results from independent processes may require further processing.

3. Still limited by the processing capacity of a single machine


Analyzing the Data with Hadoop

MapReduce


Scaling Out

To scale out, we need to store the data in a distributed filesystem(typically HDFS)

Tasks are scheduled by YARN.


Hadoop divides the input to a MapReduce job into fixed-size pieces called inputsplits. For most jobs, a good split size tends to be the size of anHDFS block, which is 128MB by default.


Data Locality Optimization: Hadoop does it best to run the map task on a node where the input data resides in HDFS. / Reduce task don't have the advantage of data locality.


Combiner reduce data transfered


Hadoop Streaming

Hadoop Streaming uses Unix standard streams as the interface between Hadoop and your program, so you can read standard input and write to standard output to write your MapReduce program. (Good for text processing)




<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、付费专栏及课程。

余额充值