当前位置: 首页 > news >正文

windows系统IEDA构建maven工程编写HDFS或Mapreduce代码,打包jar到linux提交

目录

1. 创建maven工程

2.编写pom.xml文件

3.编写mapreduce代码

4.打包项目为jar文件

5.导入linux

6.执行代码

7. hdfs代码编写与提交


1. 创建maven工程

设定name,Archetype选择第一个 maven-archetype-archetype

jdk: 如果有1.8 就选择1.8, 目前我hadoop所在linux用的是1.8。没有选择也关系

点击 create 按钮即可:

2.编写pom.xml文件

打开pom.xml文档。<project></project>内添加 下面属性和依赖:

由于我linux的jdk是1.8,windows的jdk是17,所以修改了

<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>

hadoop.version 根据你自己实际的hadoop集群版本号填写即可。具体如下

<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <hadoop.version>3.2.4</hadoop.version> </properties> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>${hadoop.version}</version> </dependency> </dependencies>

更新maven库,右上角m按钮点击更新,第一次需要比较长时间下载hadoop依赖。

3.编写mapreduce代码

首先构建maven source directories

双击下面的java即可

此时,在main文件夹下会新建出一个java文件夹,基于java文件夹构建我们的package或者直接写.java文件。

MyMapper类如下:

import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; import java.util.StringTokenizer; public class MyMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context) throws IOException, InterruptedException { //每次处理一行,一个mapper里的value为一行,key为该行在文件中的偏移量 StringTokenizer iter = new StringTokenizer(value.toString()); while (iter.hasMoreTokens()) { word.set(iter.nextToken()); // 向context中写入<word, 1> context.write(word, one); System.out.println(word); } } }

MyReducer类如下

import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException{ int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } }

MyDriver类

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; 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 Driver { public static void main(String[] args) throws Exception{ Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word_count"); job.setJarByClass(Driver.class); job.setMapperClass(MyMapper.class); //此处的Combine操作意为即第每个mapper工作完了先局部reduce一下,最后再全局reduce job.setCombinerClass(MyReducer.class); job.setReducerClass(MyReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); //第0个参数是输入目录,第1个参数是输出目录 //先判断output path是否存在,如果存在则删除 Path path = new Path(args[1]);// FileSystem fileSystem = path.getFileSystem(conf); if (fileSystem.exists(path)) { fileSystem.delete(path, true); } //设置输入目录和输出目录 FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true)?0:1); } }

4.打包项目为jar文件

点击 File 下的 Project Structure

按下面红色框从左到右选择。

选择 main class

然后一路点击 ok 按钮即可。

重新Build Artifas–jar包

此时,工程目录多出out目录,已经生成jar文件了

5.导入linux

使用工具,或者直接拖动方式(若支持的话)将上图中的HDFS_Mapreduce.jar文件导入linux系统。

6.执行代码

/input/word.txt 为hdfs上的输入路径,可以为具体文件或者目录,

可以先创建input文件夹, hadoop fs -mkdir /input

然后上传本地某个文件如word.txt 到hdfs的/input中: hadoop fs -put word.txt /input

这样 hdfs的 /input 目录下就有需要的word.txt 文件了。

/output0330为程序的hdfs输出路径,执行程序前,确保该路径不存在,

也可以写完整路径:hdfs://主节点的IP或别名:9000/input/word.txt

查看输出的结果:

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

7. hdfs代码编写与提交

前面完成mapreduce词频统计的编写:

如果操作的是hdfs,过程类似,仅仅是代码不一样,和执行jar文件给定参数不一样而已:

如简单列举hadoop目录下的文件的代码

conf.set语句可以不给,我里面的主节点用别名master代替,端口号是9000,根据实际情况修改。

import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class GetData { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://master:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem fs = FileSystem.get(conf); FileStatus[] files = fs.listStatus(new Path("/")); for(FileStatus fileStatus : files) { System.out.println(fileStatus.getPath().toString()); } fs.close(); } }

执行程序:

程序不需要传入参数,直接执行即可。

hadoop jar hdfs.jar

http://www.jsqmd.com/news/582657/

相关文章:

  • 全国霸王餐 API 接口聚合平台,Java 后端多数据源路由策略设计
  • 驱动模块的加载与卸载机制
  • 008、队列(Queue):任务间通信的基石
  • Redis Sentinel 高可用方案在WMS仓储管理系统的应用
  • 虚拟组网工具 内网穿透神器 tailscale汉化中文安卓版和Magisk版
  • 关系型数据库星型模型聚合表生成
  • kprobe函数入口时的汇编跳板执行流程与栈帧机制
  • OpenCV图像处理——存储结构 Mat (Matrices)(版本 4.12.0)
  • 抢答器软件哪家强?五款抢答器软件全方位深度评测
  • 【数据手册解读15】贴片电感
  • 操作系统与数据库系统的核心知识点,属于计算机科学与技术专业(尤其是考研408统考或相关课程)的重点复习提纲
  • 资深大模型工程师详细讲解:RAG召回率优化三重微调实战
  • 提升数据采集效率:用快马平台快速生成高性能openclaw抓取脚本
  • 2026年压铸铝件厂家哪家好,铝压铸/铝合金压铸/压铸铝件/锌铝压铸/铝合金高压压铸/铝压铸件,压铸铝件企业联系电话 - 品牌推荐师
  • 【研报280】汽车轻量化材料研究报告:改性塑料的应用趋势
  • 基于MATLAB的信号调制与调解
  • Spring Boot + Vue 前后端联调踩坑记录
  • FIFA 23 Live Editor终极指南:10分钟掌握实时游戏修改技巧
  • 手把手教程:快速设置远程开机,看完就会
  • 每日 200 篇免费额度!PaperXie 查重:把论文安全感焊死在毕业季
  • 2026年五星酒店床垫推荐:五家优选品牌深度解析 - 科技焦点
  • Windows环境下安装TVM编译器
  • 5大核心优势:为多场景用户打造的屏幕翻译解决方案
  • 【头歌】操作系统 课堂练习2.3:系统调用
  • OpenMS实战指南:如何用开源工具解决质谱数据分析三大难题
  • 春游出发前买酒外卖来得及吗?歪马送酒大额券解锁春日微醺新方式 - 资讯焦点
  • 论文查重还在花冤枉钱?Paperxie 免费查重,本科生的毕业省钱神器
  • SQL优化让查询提升10倍——从数据库工程到执行计划深度解析
  • 2026海外网红营销内容合作与策划最佳实践
  • 数据分析之事实表(Fact Table)