马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
概要
一样寻常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服务,上传文件用的);
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-yarn-server-web-proxy</artifactId>
- <version>${hadoop.version}</version>
- </dependency>
复制代码- package org.example
- import org.apache.spark.sql.SparkSession
- import org.apache.spark.SparkConf
- object SimpleApp_on_yarn {
-
-
- def main(args: Array[String]) {
-
-
- val logFile = "hdfs://10.194.216.100:9000/test/README.md"
- System.setProperty("HADOOP_USER_NAME", "root") //hdfs 目录访问的解决权限问题
- val spark_on_yarn_Conf = new SparkConf()
- .setAppName("WordCount")
- // .set("mapreduce.app-submission.cross-platform", "true")
- // 设置yarn-client模式提交
- .setMaster("yarn")
- // 设置resourcemanager的ip
- .set("yarn.resourcemanager.hostname", "hadoop02")
- // 设置executor的个数
- //.set("spark.executor.instance", "1")
- // .set("spark.executor.cores", "4")
- // 设置executor的内存大小
- //.set("spark.executor.memory", "600m")
- //.set("spark.driver.memory", "600m")
- // 设置driver的ip地址 ; 本地IP,不能是localhost
- .set("spark.driver.host", "10.194.208.109") //开发端作为Driver端
- .set("spark.driver.port", "5555")
- //需要设置为yarn可访问位置-hdfs
- .set("spark.yarn.jars", "hdfs:///usr/sparkjars/*")
- // 设置程序打包后的jar包的路径,如果有其他的依赖包,可以在这里添加,逗号隔开
- .setJars(List("target/Spark-demo-1.0-SNAPSHOT.jar"))
- val spark = SparkSession.builder.config(spark_on_yarn_Conf).getOrCreate()
- val csinfo = spark.sparkContext.getConf.getAll
- println("*" * 50)
- csinfo.foreach(println);
- println("*" * 50)
- val logData = spark.read.textFile(logFile)
- val rows = logData.count();
- println()
- println("********************结果如下******************")
- println(s"**** 文 件 的 总 行 数 是: $rows 行 ****")
- println("*" * 50)
- println()
- spark.close()
- }
- }
复制代码 pom.xml
- <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>Spark-demo</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>Spark-demo</name>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <scala.version>2.12</scala.version>
- <spark.version>3.3.4</spark.version>
- <hadoop.version>2.10.2</hadoop.version>
- </properties>
- <repositories>
- <repository>
- <id>central_maven</id>
- <name>central maven</name>
- <url>https://repo1.maven.org/maven2</url>
- </repository>
- <repository>
- <id>nexus-aliyun</id>
- <name>Nexus aliyun</name>
- <url>https://maven.aliyun.com/nexus/content/groups/public</url>
- </repository>
- <repository>
- <id>centralMaven</id>
- <name>central maven</name>
- <url>https://mvnrepository.com/</url>
- </repository>
- <repository>
- <id>cloudera</id>
- <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
- </repository>
- <repository>
- <id>apache.snapshots</id>
- <name>Apache Development Snapshot Repository</name>
- <url>https://repository.apache.org/content/repositories/snapshots/</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- <snapshots>
- <enabled>true</
复制代码 |