如安在IDEA IDE 开辟环境中直接以 Yarn 方式提交Spark 代码到远端 Yarn集群运行

[复制链接]
发表于 2026-2-7 20:44:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
概要

一样寻常Spark 代码开辟提交方式的痛点:
(1)IDEA IDE 本机运行 :
setMaster(local[]) :
痛点: 这种方式当地JVM中模拟方式,当地负载高,大概无法全面调试
( 2) spark-submit 下令方式:
setMaster(“yarn”) 或 setMaster("local[
] ")
打包代码jar->上传到Hadoop主机->调 用 spark-submit
痛点:繁琐,每次都要copy到hadoop主机,并调用spark-submit
  有没有一步到位,直接在IDEA 中运行就可提交到Yarn上,效果输出到IDEA 中的方式呢?颠末研究我乐成了! (网上对这种方法的先容,很难发现)
团体架构


技能细节

      
  • 须要将spark和hadoop 中的jar,放到在当地IDEA开辟环境可以访问
    的hdfs文件体系中,包罗的jar来自于以下位置(不肯定全须要)
     %SPARK_HOME/jars
     %HADOOP_HOME/share/Hadoop
    上传到HDFS 中 hdfs:///usr/sparkjars/
      
  • 须要代码中包罗以下关键个参数
    .setMaster(“yarn”) //设置YARN 集群运行方式
    .set(“yarn.resourcemanager.hostname”, “hadoop02”)// 设置resourcemanager的ip
    .set(“spark.driver.host”, “10.194.208.109”) // 设置IDEA IED 主机开辟端作为Driver端
    .set(“spark.yarn.jars”, “hdfs:///usr/sparkjars/*”) // 设置为yarn 运行spark须要的jar包,必须是yarn可访问位置hdfs
    // 设置步调打包后的jar包的路径,如果有其他的依赖包,可以在这里添加,逗号隔开
    .setJars(List(“target/Spark-demo-1.0-SNAPSHOT.jar”)) // 设置spark步调编译后打包文件相对位置
      
  • 要把%HADOOP_HOME/etc/hadoop中以下三个设置文件放到IDEA Maven 工程里 resources 下


      
  • core-site.xml  
  • hdfs-site.xml  
  • yarn-site.xml

4.pom.xml 中除了开辟用jar, 还须要如下依赖:(从输出中,推测大概是在当地天生web服务,上传文件用的);
  1. <dependency>
  2.    <groupId>org.apache.hadoop</groupId>
  3.    <artifactId>hadoop-yarn-server-web-proxy</artifactId>
  4.    <version>${hadoop.version}</version>
  5. </dependency>
复制代码
      
  • 完备scala代码:
  1. package org.example
  2. import org.apache.spark.sql.SparkSession
  3. import org.apache.spark.SparkConf
  4. object SimpleApp_on_yarn {
  5.    
  6.    
  7.   def main(args: Array[String]) {
  8.    
  9.    
  10.     val logFile = "hdfs://10.194.216.100:9000/test/README.md"
  11.     System.setProperty("HADOOP_USER_NAME", "root") //hdfs 目录访问的解决权限问题
  12.     val spark_on_yarn_Conf = new SparkConf()
  13.       .setAppName("WordCount")
  14.       // .set("mapreduce.app-submission.cross-platform", "true")
  15.       // 设置yarn-client模式提交
  16.       .setMaster("yarn")
  17.       // 设置resourcemanager的ip
  18.       .set("yarn.resourcemanager.hostname", "hadoop02")
  19.       // 设置executor的个数
  20.       //.set("spark.executor.instance", "1")
  21.       // .set("spark.executor.cores", "4")
  22.       // 设置executor的内存大小
  23.       //.set("spark.executor.memory", "600m")
  24.       //.set("spark.driver.memory", "600m")
  25.       // 设置driver的ip地址 ; 本地IP,不能是localhost
  26.       .set("spark.driver.host", "10.194.208.109")  //开发端作为Driver端
  27.       .set("spark.driver.port", "5555")
  28.       //需要设置为yarn可访问位置-hdfs
  29.       .set("spark.yarn.jars", "hdfs:///usr/sparkjars/*")
  30.       //  设置程序打包后的jar包的路径,如果有其他的依赖包,可以在这里添加,逗号隔开
  31.       .setJars(List("target/Spark-demo-1.0-SNAPSHOT.jar"))
  32.     val spark = SparkSession.builder.config(spark_on_yarn_Conf).getOrCreate()
  33.     val csinfo = spark.sparkContext.getConf.getAll
  34.     println("*" * 50)
  35.     csinfo.foreach(println);
  36.     println("*" * 50)
  37.      val logData = spark.read.textFile(logFile)
  38.     val rows = logData.count();
  39.     println()
  40.     println("********************结果如下******************")
  41.     println(s"****  文 件 的 总 行 数 是: $rows 行 ****")
  42.     println("*" * 50)
  43.     println()
  44.     spark.close()
  45.   }
  46. }
复制代码
pom.xml
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3.   <modelVersion>4.0.0</modelVersion>
  4.   <groupId>org.example</groupId>
  5.   <artifactId>Spark-demo</artifactId>
  6.   <version>1.0-SNAPSHOT</version>
  7.   <packaging>jar</packaging>
  8.   <name>Spark-demo</name>
  9.   <properties>
  10.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  11.     <scala.version>2.12</scala.version>
  12.     <spark.version>3.3.4</spark.version>
  13.     <hadoop.version>2.10.2</hadoop.version>
  14.   </properties>
  15.   <repositories>
  16.     <repository>
  17.       <id>central_maven</id>
  18.       <name>central maven</name>
  19.       <url>https://repo1.maven.org/maven2</url>
  20.     </repository>
  21.     <repository>
  22.       <id>nexus-aliyun</id>
  23.       <name>Nexus aliyun</name>
  24.       <url>https://maven.aliyun.com/nexus/content/groups/public</url>
  25.     </repository>
  26.     <repository>
  27.       <id>centralMaven</id>
  28.       <name>central maven</name>
  29.       <url>https://mvnrepository.com/</url>
  30.     </repository>
  31.     <repository>
  32.       <id>cloudera</id>
  33.       <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
  34.     </repository>
  35.     <repository>
  36.       <id>apache.snapshots</id>
  37.       <name>Apache Development Snapshot Repository</name>
  38.       <url>https://repository.apache.org/content/repositories/snapshots/</url>
  39.       <releases>
  40.         <enabled>false</enabled>
  41.       </releases>
  42.       <snapshots>
  43.         <enabled>true</
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表