maven打包jar包给spark

安装maven

官网安装maven

1,官网下载到本地,Binary是可执行版本,已经编译好可以直接使用。
Source是源代码版本,需要自己编译成可执行软件才可使用。
在这里插入图片描述

2,查看安装路径,配置环境变量

在这里插入图片描述
3,配置好环境变量
在这里插入图片描述
4,cmd测试
在这里插入图片描述

配置本地仓库

1,Maven文件夹内创建maven-repository文件夹,用作maven的本地库

在这里插入图片描述

2,D:\Maven\apache-maven-3.8.6\conf下找到settings.xml文件,找到节点localRepository,在注释外添加仓库路径

在这里插入图片描述

localRepository节点用于配置本地仓库,本地仓库其实起到了一个缓存的作用,它的默认地址是 C:\Users\用户名.m2。
当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,如果本地仓库有则返回;如果没有则从远程仓库中获取包,并在本地库中保存。
此外,我们在maven项目中运行mvn install,项目将会自动打包并安装到本地仓库中。
在这里插入图片描述

配置镜像

可以去官网查看

1.在settings.xml配置文件中找到mirrors节点添加如下配置(注意要添加在和两个标签之间,其它配置同理)

#代码如下

<!-- 阿里云仓库 -->
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

在这里插入图片描述

idea配置maven

1,在全局设置maven的配置文件位置
在这里插入图片描述
2,设置maven文件位置
在这里插入图片描述
3,创建一个maven项目,如果创建的时候太慢,可以提前把所需要的插件下载下来放到自己的本地仓库中!!
在这里插入图片描述
4,修改pom文件,文件中有hadoop和spark需要的依赖,可根据网址去复制
切记要对应好你hadoop集群和spark、jdk的版本

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>SparkStudyHuhy</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>SparkStudyHuhy</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>3.3.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.13</artifactId>
      <version>3.3.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.13</artifactId>
      <version>3.3.0</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>SparkStudyCases</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

如果出现报红的情况,可以试着重新加载一下依赖

在这里插入图片描述
5,创建java文件,代码实现查看hdfs路径、两次查看文件内容,上传文件等
,注意查看代码中的参数,在命令会中调用方法

case “2cat”:doubleCat(args);break;
case “load”:copyFileWithProgress(args);break;
case “1ls”:listStatus(args);break;

package org.example;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
public class FileSystemAPIMain {

    public static void main(String[] args) {
        new FileSystemAPIMain().start(args);
    }

    private void start(String[] args) {
        String choice=args[0];
        switch (choice){
            case "2cat":doubleCat(args);break;
            case "load":copyFileWithProgress(args);break;
            case "1ls":listStatus(args);break;
        }
        //doubleCat(args);
        //copyFileWithProgress(args);
        //listStatus(args);
    }

    private void cat(String[] args) {
        String uri = args[1];
        Configuration conf = new Configuration();
        FileSystem fs;
        InputStream in = null;

        try {
            fs = FileSystem.get(URI.create(uri), conf);
            in = fs.open(new Path(uri));
            IOUtils.copyBytes(in, System.out, 4096, false);
        }catch (Exception e) {
            System.err.println(e.toString());
        } finally {
            IOUtils.closeStream(in);
        }

    }

    private void doubleCat(String[] args) {
        String uri = args[1];
        Configuration conf = new Configuration();
        FileSystem fs;
        FSDataInputStream in = null;

        try {
            fs = FileSystem.get(URI.create(uri), conf);
            in = fs.open(new Path(uri));
            IOUtils.copyBytes(in, System.out, 4096, false);
            in.seek(0);
            IOUtils.copyBytes(in, System.out, 4096, false);
        }catch (Exception e) {
            System.err.println(e.toString());
        } finally {
            IOUtils.closeStream(in);
        }

    }

    private void copyFileWithProgress(String[] args) {
        String src = args[1];
        String dst = args[2];
        Configuration conf = new Configuration();
        FileSystem fs;
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new BufferedInputStream(new FileInputStream(src));
            fs = FileSystem.get(URI.create(dst), conf);
//            out = fs.create(new Path(dst), new Progressable() {
//                @Override
//                public void progress() {
//                    System.out.print("*");
//                }
//            });
            out = fs.create(new Path(dst), () -> System.out.print("*"));
            IOUtils.copyBytes(in, out, 4096, false);
        }catch (Exception e) {
            System.err.println(e.toString());
        } finally {
            IOUtils.closeStream(in);
            IOUtils.closeStream(out);
        }
    }

    private void listStatus(String[] args) {
        String uri = args[1];
        Configuration conf = new Configuration();
        Path[] paths = new Path[args.length-1];
        for(int i = 0; i < paths.length; i++) {
            paths[i] = new Path(args[i+1]);
        }
        try {
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            FileStatus[] status = fs.listStatus(paths);
            Path[] listedPaths = FileUtil.stat2Paths(status);
            for(Path p : listedPaths) {
                System.out.println(p);
            }
        }catch (Exception e) {
            System.err.println(e.toString());
        } finally {
        }
    }

}

打包jar包

在这里插入图片描述
如果说项目修改了要重新打包jar包就需要点击clean再点击package

1,查看jar包
在这里插入图片描述
2,上传到我们的集群中使用
在这里插入图片描述

测试

root目录下执行

/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class org.example.FileSystemAPIMain SparkStudyCases.jar /

调用listStatus(args)查看hdfs根目录下的文件
root@master:~# /usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class org.example.FileSystemAPIMain SparkStudyCases.jar 1ls /
22/10/06 09:09:45 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
hdfs://master:8020/spark-logs
hdfs://master:8020/tmp
hdfs://master:8020/user
hdfs://master:8020/usr
22/10/06 09:09:46 INFO ShutdownHookManager: Shutdown hook called
22/10/06 09:09:46 INFO ShutdownHookManager: Deleting directory /tmp/spark-350d914b-afea-4244-8e74-aa16f3cc2ac4
root@master:~#
调用doubleCat(args)方法两次查看文件内容

首先把需要查看内容的文件上传到hdfs路径上

root@master:~# ls
hadoop-3.3.0.tar  jdk-8u241-linux-x64.tar.gz  snap                         SparkStudyCases.jar  test.sh
hoyeong.txt       profile.sh                  spark-3.3.0-bin-hadoop3.tgz  start.sh
root@master:~# cat hoyeong.txt
zzzzzz
root@master:~# hadoop fs -cat /user/hoyeong.txt
zzzzzz
root@master:~#

两次查看hdfs上的文件内容

/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class org.example.FileSystemAPIMain SparkStudyCases.jar 2cat /user/hoyeong.txt

root@master:~# /usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class org.example.FileSystemAPIMain SparkStudyCases.jar 2cat /user/hoyeong.txt
22/10/06 09:15:02 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
zzzzzz
zzzzzz
22/10/06 09:15:03 INFO ShutdownHookManager: Shutdown hook called
22/10/06 09:15:03 INFO ShutdownHookManager: Deleting directory /tmp/spark-f2b42e1b-df61-49a6-8619-bd99df6986c1
root@master:~#
调用copyFileWithProgress(args)上传本地文件到hdfs

/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class org.example.FileSystemAPIMain SparkStudyCases.jar load hoyeong.txt /test/hoyeong.txt

需要注意的是上传的路径是已经存在的,load是代码中指定的参数,和上面的2cat,1ls一样

root@master:~# ls
hadoop-3.3.0.tar  jdk-8u241-linux-x64.tar.gz  snap                         SparkStudyCases.jar  test.sh
hoyeong.txt       profile.sh                  spark-3.3.0-bin-hadoop3.tgz  start.sh
root@master:~# /usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class org.example.FileSystemAPIMain SparkStudyCases.jar load hoyeong.txt /test/hoyeong.txt
22/10/06 09:19:49 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
**22/10/06 09:19:50 INFO ShutdownHookManager: Shutdown hook called
22/10/06 09:19:50 INFO ShutdownHookManager: Deleting directory /tmp/spark-e3e4c25d-032b-4537-a87b-5ef467843f30
root@master:~# hadoop fs -ls /test/
Found 1 items
-rw-r--r--   3 root supergroup          7 2022-10-06 09:19 /test/hoyeong.txt
root@master:~#
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 首先,需要在IDE中创建一个Maven项目,并添加Spark依赖。 2. 在项目中创建一个Main类,并编写Spark程序。 3. 在IDE中打包项目,生成一个jar包。 4. 将生成的jar包上传到Spark集群中。 5. 在Spark集群中运行以下命令: ``` spark-submit --class com.example.Main --master yarn --deploy-mode cluster /path/to/jar ``` 其中,com.example.Main是Main类的完整路径,/path/to/jarjar包的路径。 6. 等待程序运行完成,查看输出结果。 ### 回答2: 将idea中的java项目打包成一个可执行的jar包,可以方便地在spark集群中运行。实现步骤如下: 1.在idea中,选中项目右击,点击“Open Module Setting”打开模块设置。 2.进入模块设置界面,点击左侧菜单中的“Artifacts”,然后点击“+”号添加一个新的Artifact。 3.选择“Jar”类型,填写Artifact的名称和输出路径。 4.定义Artifact所需要打包的内容,如项目中使用的外部库、资源文件和自身编写的类等。在“Output Layout”界面中进行规划和配置。 5.将Artifact设置为“Build on make”,以便在每次编译时自动打包。 6.完成Artifact设置后,点击“OK”保存配置,然后再次右键点击项目,选择“Build Artifact” -> 要打包的Artifact名字 -> “Build”。 7.成功完成打包后,可以在指定输出路径中找到生成的jar包。 8.在spark集群中调用该jar包,使用“spark-submit”命令提交任务,并指定jar包路径和主函数类名。例如: $ spark-submit --class com.example.Main --master spark://master:7077 myproject.jar 有了打包好的jar包,可以方便地在不同的机器上运行spark任务,而且能够有效地减少开发者的工作量和提高程序的可维护性和重用性。 ### 回答3: 在将 IDEA 项目打包JAR 文件并在 Spark 上运行之前,我们需要先了解一些基本概念和步骤。 首先需要明确的是,Spark是一个分布式计算框架,它的运行需要一个集群环境,而 JAR 文件则是一种可执行程序文件,是用来包含所有依赖的文件和代码。 因此,在将 IDEA 项目打包JAR 文件之前,需要确保你已经搭建好了 Spark 集群环境,并且在项目中引入了必要的 Spark 依赖。 接下来,我们可以按照以下步骤将 IDEA 项目打包JAR 文件: 1. 在 IDEA 中选择项目 → 打包打包JAR 文件。 2. 在弹出的窗口中选择所需的设置,包括打包的模块、存放路径、依赖项等等。此外,还需要指定启动类(即包含 main 方法的类)。 3. 点击“打包”按钮,即可生成 JAR 文件。 4. 将生成的 JAR 文件上传到 Spark 集群中的某个节点(比如 master 节点),同时确保所有依赖包都已正确安装。 最后,我们可以通过以下命令在 Spark 上运行 JAR 文件: ``` spark-submit --class <main-class> --master <master-url> <path-to-jar> [args] ``` 其中,<main-class> 表示启动类的完整类名,<master-url> 表示 Spark 集群的主节点 URL,<path-to-jar> 表示 JAR 文件在节点上的路径,[args] 表示可选的运行参数。 总之,将 IDEA 项目打包JAR 文件并在 Spark 上运行,需要确保正确搭建集群环境和引入必要的依赖,以及熟悉打包和运行命令的使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值