gpt4 book ai didi

java - Spark 作业在本地运行时可以工作,但在独立模式下则无法工作

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:01 25 4
gpt4 key购买 nike

我有一个简单的 Spark 代码,在本地运行时工作正常,但是当我尝试使用 Spark Standalone Cluster 和 Docker 运行它时,它奇怪地失败了。

我可以确认与master和worker的集成正在工作。

在下面的代码中,我显示了错误发生的位置。

JavaRDD<Row> rddwithoutMap = dataFrame.javaRDD();
JavaRDD<Row> rddwithMap = dataFrame.javaRDD()
.map((Function<Row, Row>) row -> row);

long count = rddwithoutMap.count(); //here is fine
long countBeforeMap = rddwithMap.count(); // here I get the error

Map之后,我无法调用任何Spark的action。

错误由以下原因引起:java.lang.ClassNotFoundException:com.apssouza.lambda.MyApp$1

Obs:我在 map 中使用 Lambda,以使代码更具可读性,但在使用独立版本时也无法使用 lambda。引起:java.lang.ClassCastException:无法将 java.lang.invoke.SerializedLambda 实例分配给 org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaF 实例中类型为 org.apache.spark.api.java.function.Function 的字段 org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1.fun$1功能$1

Docker 镜像:bde2020/spark-master:2.3.2-hadoop2.7

本地 Spark 版本:2.4.0

Spark依赖版本:spark-core_2.112.3.2

public class MyApp {
public static void main(String[] args) throws IOException, URISyntaxException {
// String sparkMasterUrl = "local[*]";
// String csvFile = "/Users/apssouza/Projetos/java/lambda-arch/data/spark/input/localhost.csv";

String sparkMasterUrl = "spark://spark-master:7077";
String csvFile = "hdfs://namenode:8020/user/lambda/localhost.csv";
SparkConf sparkConf = new SparkConf()
.setAppName("Lambda-demo")
.setMaster(sparkMasterUrl);
// .setJars(/path/to/my/jar); I even tried to set the jar
JavaSparkContext sparkContext = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new SQLContext(sparkContext);
Dataset<Row> dataFrame = sqlContext.read()
.format("csv")
.option("header", "true")
.load(csvFile);

JavaRDD<Row> rddwithoutMap = dataFrame.javaRDD();
JavaRDD<Row> rddwithMap = dataFrame.javaRDD()
.map((Function<Row, Row>) row -> row);

long count = rddwithoutMap.count();
long countBeforeMap = rddwithMap.count();

}
}

<?xml version="1.0" encoding="UTF-8"?>

<project>
<modelVersion>4.0.0</modelVersion>

<groupId>com.apssouza.lambda</groupId>
<artifactId>lambda-arch</artifactId>
<version>1.0-SNAPSHOT</version>

<name>lambda-arch</name>

<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>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.3.2</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_2.11</artifactId>
<version>2.9.7</version>
</dependency>

</dependencies>


</project>

观察:如果取消注释前两行,一切都会正常工作。

最佳答案

问题是因为我在运行程序之前没有打包程序,并且在 Spark 集群中得到了过时的应用程序版本。这很奇怪,因为我通过 IDE(IntelliJ)运行它,并且它应该在运行之前打包 jar。不管怎样,在点击运行按钮之前mvn package解决了这个问题。

关于java - Spark 作业在本地运行时可以工作,但在独立模式下则无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com