Hadoop 3.x Windows 本地开发:Maven项目集成与WordCount实战代码

发布时间:2026/7/12 3:26:03
Hadoop 3.x Windows 本地开发:Maven项目集成与WordCount实战代码 Hadoop 3.x Windows本地开发Maven项目集成与WordCount实战指南对于Java开发者而言在Windows环境下搭建Hadoop开发环境并进行本地调试一直是个令人头疼的问题。本文将彻底解决这个痛点带你从零构建一个完整的Maven项目实现Hadoop MapReduce作业的本地开发闭环。1. 环境准备与Hadoop本地化配置在开始编码之前我们需要确保Windows系统具备运行Hadoop的基本条件。与Linux环境不同Windows需要额外的支持文件才能正常运行Hadoop。1.1 基础环境检查首先确认以下组件已正确安装Java JDK 8Hadoop 3.x需要Java 8或更高版本Maven 3.6用于项目依赖管理IDE支持IntelliJ IDEA或Eclipse推荐使用最新版本验证Java环境java -version mvn -v1.2 Hadoop Windows支持文件配置从GitHub获取winutils和hadoop.dll文件# 推荐使用cdarlint维护的版本 git clone https://github.com/cdarlint/winutils将下载的文件放置到正确位置复制winutils.exe和hadoop.dll到Hadoop安装目录的bin文件夹可选复制相同文件到C:\Windows\System321.3 关键环境变量设置在系统环境变量中添加以下配置变量名示例值说明HADOOP_HOMED:\hadoop-3.3.4Hadoop安装目录PATH%HADOOP_HOME%\bin添加Hadoop命令到系统路径验证配置hadoop version2. 创建Maven项目与依赖配置现在我们来创建一个标准的Maven项目并配置必要的Hadoop依赖。2.1 初始化Maven项目使用以下命令创建项目骨架mvn archetype:generate -DgroupIdcom.hadoop.demo -DartifactIdhadoop-wordcount -DarchetypeArtifactIdmaven-archetype-quickstart -DinteractiveModefalse2.2 完善pom.xml配置完整的pom.xml应包含以下关键依赖和配置properties hadoop.version3.3.4/hadoop.version maven.compiler.source11/maven.compiler.source maven.compiler.target11/maven.compiler.target /properties dependencies !-- Hadoop核心依赖 -- dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-client/artifactId version${hadoop.version}/version /dependency !-- 本地开发特殊依赖 -- dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-common/artifactId version${hadoop.version}/version /dependency dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-mapreduce-client-core/artifactId version${hadoop.version}/version /dependency !-- 测试依赖 -- dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.13.2/version scopetest/scope /dependency /dependencies build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-shade-plugin/artifactId version3.2.4/version executions execution phasepackage/phase goals goalshade/goal /goals configuration transformers transformer implementationorg.apache.maven.plugins.shade.resource.ServicesResourceTransformer/ /transformers /configuration /execution /executions /plugin /plugins /build提示使用mvn clean install验证项目配置是否正确3. WordCount实现与本地运行经典的WordCount示例是学习Hadoop的最佳起点。我们将实现一个完整的本地可运行版本。3.1 Mapper实现创建WordCountMapper.javaimport org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; import java.util.StringTokenizer; public class WordCountMapper extends MapperLongWritable, Text, Text, IntWritable { private final static IntWritable one new IntWritable(1); private Text word new Text(); Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { StringTokenizer itr new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } }3.2 Reducer实现创建WordCountReducer.javaimport org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; public class WordCountReducer extends ReducerText, IntWritable, Text, IntWritable { private IntWritable result new IntWritable(); Override protected void reduce(Text key, IterableIntWritable values, Context context) throws IOException, InterruptedException { int sum 0; for (IntWritable val : values) { sum val.get(); } result.set(sum); context.write(key, result); } }3.3 驱动程序实现创建WordCountDriver.java作为作业入口import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCountDriver { public static void main(String[] args) throws Exception { Configuration conf new Configuration(); // 设置为本地模式运行 conf.set(mapreduce.framework.name, local); conf.set(fs.defaultFS, file:///); Job job Job.getInstance(conf, word count); job.setJarByClass(WordCountDriver.class); job.setMapperClass(WordCountMapper.class); job.setCombinerClass(WordCountReducer.class); job.setReducerClass(WordCountReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); // 使用项目resources目录下的测试文件 FileInputFormat.addInputPath(job, new Path(src/main/resources/input.txt)); FileOutputFormat.setOutputPath(job, new Path(output)); System.exit(job.waitForCompletion(true) ? 0 : 1); } }3.4 测试数据准备在src/main/resources目录下创建input.txtApache Hadoop is an open source framework Hadoop enables distributed processing of large data sets Hadoop is designed to scale up from single servers4. 高级调试技巧与优化掌握了基础实现后我们需要了解如何在IDE中高效开发和调试Hadoop应用。4.1 IntelliJ IDEA调试配置创建运行配置Main class:WordCountDriverVM options:-Dhadoop.home.dirD:\hadoop-3.3.4Working directory: 项目根目录调试断点设置在Mapper的map方法设置断点在Reducer的reduce方法设置断点使用条件断点跟踪特定单词4.2 本地模式优化参数在WordCountDriver中添加以下配置可提升本地运行效率// 设置本地模式下的内存分配 conf.set(mapreduce.map.memory.mb, 1024); conf.set(mapreduce.reduce.memory.mb, 1024); // 启用中间输出压缩 conf.set(mapreduce.map.output.compress, true); conf.set(mapreduce.map.output.compress.codec, org.apache.hadoop.io.compress.SnappyCodec);4.3 常见问题解决方案问题1java.io.IOException: Could not locate executable null\bin\winutils.exe解决方案// 在Driver类中添加以下代码 System.setProperty(hadoop.home.dir, D:\\hadoop-3.3.4);问题2ExitCodeException exitCode-1073741515这通常是由于缺少Microsoft Visual C运行库导致安装最新VC运行库即可解决。5. 项目结构与最佳实践一个规范的Hadoop Maven项目应该遵循以下结构hadoop-wordcount/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── hadoop/ │ │ │ └── demo/ │ │ │ ├── WordCountDriver.java │ │ │ ├── WordCountMapper.java │ │ │ └── WordCountReducer.java │ │ └── resources/ │ │ ├── core-site.xml │ │ ├── hdfs-site.xml │ │ └── input.txt │ └── test/ │ └── java/ │ └── com/ │ └── hadoop/ │ └── demo/ │ └── WordCountTest.java ├── pom.xml └── output/ (运行后生成)5.1 资源配置文件示例core-site.xml本地开发配置configuration property namefs.defaultFS/name valuefile:////value /property property namehadoop.tmp.dir/name value/tmp/hadoop-tmp/value /property /configuration5.2 单元测试示例创建WordCountTest.java进行逻辑验证import static org.junit.Assert.*; import org.apache.hadoop.io.*; import org.junit.Test; public class WordCountTest { Test public void testMapper() throws Exception { WordCountMapper mapper new WordCountMapper(); Text value new Text(hello world hello); // 使用MockContext验证输出 MockContext context new MockContext(); mapper.map(null, value, context); assertEquals(2, context.getCount(hello)); assertEquals(1, context.getCount(world)); } // 简化版的MockContext实现 static class MockContext extends MapperLongWritable, Text, Text, IntWritable.Context { // 实现细节省略 } }6. 性能调优与生产准备当本地开发完成后我们需要考虑如何将代码迁移到生产环境。6.1 本地与生产环境配置切换创建Profile实现环境隔离!-- pom.xml中添加 -- profiles profile idlocal/id properties hadoop.runtimelocal/hadoop.runtime /properties activation activeByDefaulttrue/activeByDefault /activation /profile profile idcluster/id properties hadoop.runtimecluster/hadoop.runtime /properties /profile /profiles修改Driver类支持多环境// 根据系统属性决定运行模式 String runtime System.getProperty(hadoop.runtime, local); if (local.equals(runtime)) { conf.set(mapreduce.framework.name, local); conf.set(fs.defaultFS, file:///); } else { conf.set(mapreduce.framework.name, yarn); conf.set(yarn.resourcemanager.hostname, your-cluster-address); }6.2 打包与部署使用Maven生成可部署的JAR包mvn clean package -Pcluster生产环境提交作业hadoop jar hadoop-wordcount-1.0.jar \ com.hadoop.demo.WordCountDriver \ /input/path /output/path7. 扩展应用自定义输入输出格式除了基本的文本处理Hadoop还支持各种数据格式。7.1 处理JSON数据创建JsonMapper.javapublic class JsonMapper extends MapperLongWritable, Text, Text, IntWritable { private ObjectMapper mapper new ObjectMapper(); Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { JsonNode node mapper.readTree(value.toString()); String product node.get(product).asText(); context.write(new Text(product), new IntWritable(1)); } }7.2 自定义输出格式实现CustomOutputFormat.javapublic class CustomOutputFormat extends FileOutputFormatText, IntWritable { Override public RecordWriterText, IntWritable getRecordWriter(TaskAttemptContext job) throws IOException { Path outputDir FileOutputFormat.getOutputPath(job); Path file new Path(outputDir, result.csv); FileSystem fs file.getFileSystem(job.getConfiguration()); FSDataOutputStream out fs.create(file); return new CustomRecordWriter(out); } static class CustomRecordWriter extends RecordWriterText, IntWritable { private DataOutputStream out; public CustomRecordWriter(DataOutputStream out) { this.out out; } Override public void write(Text key, IntWritable value) throws IOException { out.writeBytes(String.format(\%s\,%d\n, key.toString(), value.get())); } Override public void close(TaskAttemptContext context) throws IOException { out.close(); } } }在Driver中配置使用job.setOutputFormatClass(CustomOutputFormat.class);

相关新闻

留学网站建设避坑指南:别让你的官网变成“僵尸站”,真人实操血泪史

留学网站建设避坑指南:别让你的官网变成“僵尸站”,真人实操血泪史

做了三年留学网站,发现百分之八十的机构都在用模板堆砌,结果流量惨淡,咨询寥寥无几。这篇不整虚的,直接拆解那些让留学官网沦为“电子名片”的致命误区,教你怎么把网站变成真正的获客利器。我见过太多同行,花几万块找个外包公司做个高大上的官网,结果上线半年,百度收录…

发布时间:2026/7/12 3:25:06
别被忽悠了!写城市网站建设摘要论文,这3个坑我替你踩了

别被忽悠了!写城市网站建设摘要论文,这3个坑我替你踩了

昨天半夜两点,我还在改稿子。咖啡喝了三杯,手都在抖。为啥?因为甲方又提了新需求。他说:“小王啊,这个城市网站建设摘要论文,你得写出那种‘高大上’的感觉。”我笑了。真的,我笑了。很多做网站的朋友,一听到“摘要”两个字,就头大。觉得要引经据典,要堆砌辞藻。其实…

发布时间:2026/7/12 3:24:59
别被忽悠了!揭秘网站建设的运作原理,小白也能看懂的门道

别被忽悠了!揭秘网站建设的运作原理,小白也能看懂的门道

今天咱们不整那些虚头巴脑的大词。 直接聊聊最实在的东西。 很多老板找我做网站, 开口就是:“给我弄个高大上的。” 其实吧, 你根本不需要知道代码怎么写。 但你得懂点底层逻辑。 不然被人坑了都不知道。 这就好比装修房子, 你得知道水电怎么走, 对吧? 不然工人给你乱接一…

发布时间:2026/7/12 3:24:43
菏泽最好的网站建设公司:别被忽悠了,这才是真干货

菏泽最好的网站建设公司:别被忽悠了,这才是真干货

本文关键词:菏泽最好的网站建设公司说实话,找一家靠谱的菏泽最好的网站建设公司, 真的比找对象还难。我见过太多老板, 花了几万块做个网站, 结果打开一看, 全是模板套出来的垃圾。不仅丑,还慢得要死。更气人的是, 搜都搜不到。这就好比你开了家饭店, 却开在深山老林里…

发布时间:2026/7/12 4:36:52
免费数字人平台有哪些隐形收费?真人克隆、高清导出、商用授权、批量出片四笔钱别等开会员后才发现

免费数字人平台有哪些隐形收费?真人克隆、高清导出、商用授权、批量出片四笔钱别等开会员后才发现

免费数字人平台有哪些隐形收费?真人克隆、高清导出、商用授权、批量出片四笔钱别等开会员后才发现 很多人第一次选数字人平台,最容易被一句话打动: 新用户可免费体验 。 这句话本身没有问题,问题在于很多用户看到“免费”以后&…

发布时间:2026/7/12 4:37:14
敏捷开发中的创新孵化:从流程执行到后台即兴协作

敏捷开发中的创新孵化:从流程执行到后台即兴协作

1. 从“敏捷”到“创新”:一场被误解的舞蹈如果你在软件研发、项目管理或者产品开发的圈子里待过一段时间,大概率听过“敏捷”(Agility)这个词。它像一阵风,吹遍了无数公司的会议室和站会角落。但很多时候,…

发布时间:2026/7/12 4:37:14
上海单位建设报建网站实操避坑指南:从立项到验收的全流程解析

上海单位建设报建网站实操避坑指南:从立项到验收的全流程解析

做工程这行,最怕的不是干活累,而是跑手续跑断腿。特别是对于很多刚接触上海市场的外地施工单位,或者刚转行做甲方代表的老板来说,"报建"这两个字简直就是噩梦。以前我觉得只要关系硬,什么都能通,后来发现在上海,合规才是最大的护城河。今天不聊虚的,就结合我…

发布时间:2026/7/12 4:35:48
STM32 流水灯采用推挽方式

STM32 流水灯采用推挽方式

# STM32F10x PA0~PA7八路流水灯程序说明文档 ## 一、文档概述 本文档针对基于寄存器开发的STM32F10系列8路流水灯工程进行完整说明,硬件使用PA0~PA7共8个GPIO引脚驱动LED,程序采用标准库底层寄存器直接操作,搭配SysTick精准延时,实…

发布时间:2026/7/12 4:36:06
江苏省城乡建设官网站怎么查?我踩坑后的真心话

江苏省城乡建设官网站怎么查?我踩坑后的真心话

那天下午,太阳毒得很。我坐在电脑前,头发都要炸了。为了查个施工许可证,我翻遍了百度,搜出来的全是广告。真的,气死个人。那些链接点进去,要么打不开,要么就是乱七八糟的中介。我就想问,咱们普通老百姓,或者小老板,想办点正经事,怎么就这么难呢?后来,还是我那个在…

发布时间:2026/7/12 4:35:12
别装了,你的学院网站建设推进会就是场大型尴尬现场

别装了,你的学院网站建设推进会就是场大型尴尬现场

看着后台那点可怜的访问量,你急不急?方案改了八版,还是没人看。今天这文,只说怎么把会开成,把事做成。上周去隔壁职院蹭会,那场面,真叫一个窒息。会议室里坐满了人,领导在台上讲PPT,底下的人不是在玩手机,就是在发呆。投影仪闪了两下,灭了。没人去修,接着讲。这种会…

发布时间:2026/7/12 0:00:10
七彩建设集团官方网站怎么找?避坑指南与真实体验分享

七彩建设集团官方网站怎么找?避坑指南与真实体验分享

找官网找得头大?这篇直接告诉你怎么辨别真伪,别被假网站坑了钱。昨天半夜两点,我还在电脑前盯着屏幕,心里那个急啊。家里装修刚进场,工长突然说需要确认一份材料清单,说是七彩建设那边要求的。我手忙脚乱地打开浏览器,搜了一堆“七彩建设”,结果出来一堆广告,什么“七…

发布时间:2026/7/12 0:00:40
找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

做企业,网站就是脸面。 在龙岗,想找个靠谱的网站公司,真不容易。 市面上广告满天飞。 承诺得天花乱坠。 最后交付的东西,却让人想砸电脑。 今天不聊虚的。 只聊怎么避坑。 怎么找到真正可信赖的龙岗网站建设团队。先说个大实话。 别信什么“三天上线”。 那是骗小白的。 正…

发布时间:2026/7/12 0:00:44
别装了,你的学院网站建设推进会就是场大型尴尬现场

别装了,你的学院网站建设推进会就是场大型尴尬现场

看着后台那点可怜的访问量,你急不急?方案改了八版,还是没人看。今天这文,只说怎么把会开成,把事做成。上周去隔壁职院蹭会,那场面,真叫一个窒息。会议室里坐满了人,领导在台上讲PPT,底下的人不是在玩手机,就是在发呆。投影仪闪了两下,灭了。没人去修,接着讲。这种会…

发布时间:2026/7/12 0:00:10
七彩建设集团官方网站怎么找?避坑指南与真实体验分享

七彩建设集团官方网站怎么找?避坑指南与真实体验分享

找官网找得头大?这篇直接告诉你怎么辨别真伪,别被假网站坑了钱。昨天半夜两点,我还在电脑前盯着屏幕,心里那个急啊。家里装修刚进场,工长突然说需要确认一份材料清单,说是七彩建设那边要求的。我手忙脚乱地打开浏览器,搜了一堆“七彩建设”,结果出来一堆广告,什么“七…

发布时间:2026/7/12 0:00:40
找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

做企业,网站就是脸面。 在龙岗,想找个靠谱的网站公司,真不容易。 市面上广告满天飞。 承诺得天花乱坠。 最后交付的东西,却让人想砸电脑。 今天不聊虚的。 只聊怎么避坑。 怎么找到真正可信赖的龙岗网站建设团队。先说个大实话。 别信什么“三天上线”。 那是骗小白的。 正…

发布时间:2026/7/12 0:00:44
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/11 8:50:55
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/10 18:05:06
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/10 16:48:50