当前位置: 首页 > 知识库问答 >
问题:

独立运行的UDF引发错误

卢俭
2023-03-14
    null
val sparkConf = new SparkConf()
.setMaster("spark://spark-master:7077")
.setAppName("My-App")
.set("spark.executor.extraClassPath", "/dependencies/*")

val spark = SparkSession.builder().config(sparkConf).getOrCreate()

因此,具有外部依赖关系的作业可以正常工作,但是UDF会产生上面的错误。我还试图将我的应用程序jar(其中包含驱动程序和spring代码以及worker中已经存在的所有其他依赖项)添加到worker中的dependencies文件夹中,但仍然会产生错误。还试图将其放置在worker中与驱动程序相同的位置,并使用“spark.jars”将其位置添加到sparkConf,但没有成功。有什么建议吗?

共有1个答案

尉迟卓
2023-03-14

在谷歌搜索了很多之后,我发现了如何集成Spring-Boot和Spark的解决方案。我需要改变我的pom使一个uber-jar使用阴影插件。所以我替换了这个:

            <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <executable>true</executable>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

与:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </dependency>
            </dependencies>
            <configuration>
                <keepDependenciesWithProvidedScope>false</keepDependenciesWithProvidedScope>
                <createDependencyReducedPom>false</createDependencyReducedPom>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>module-info.class</exclude>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
                <transformers>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer
                            implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                        <resource>META-INF/spring.factories</resource>
                    </transformer>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>${start-class}</mainClass>
                    </transformer>
                </transformers>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

然后,我将项目jar添加到每个worker中,并将这些配置添加到Spark会话中:

    "spark.executor.extraClassPath", "/path/app.jar",
    "spark.driver.extraClassPath", "/path/app.jar",
    "spark.jars", "/path/app.jar",
 类似资料:
  • 安装Spark独立模式集群 安装Spark独立模式,你只需要将Spark的编译版本简单的放到集群的每个节点。你可以获得每个稳定版本的预编译版本,也可以自己编译。 手动启动集群 你能够通过下面的方式启动独立的master服务器。 ./sbin/start-master.sh 一旦启动,master将会为自己打印出spark://HOST:PORT URL,你能够用它连接到workers或者作为"m

  • 我正在尝试在Ubuntu上以独立的方式运行Apache地图集 - 这意味着不必设置Solr和/或HBase。我所做的(根据文档:http://atlas.apache.org/0.8.1/InstallationSteps.html)是克隆Git存储库,使用mbadded的HBase和dSolr构建maven项目: 解压缩了 resuting tar.gz 文件并执行了 bin/atlas_sta

  • 我正在尝试在Anaconda中导入pyspark并运行示例代码。然而,每当我尝试在Anaconda中运行代码时,我都会得到以下错误消息。 错误:py4j.java_gateway:尝试连接到Java服务器时出错(127.0.0.1:53294)追溯(最近一次调用):文件“C:\spark\python\lib\py4j-0.10.3-src.zip\py4j\java_gateway.py”,第1

  • 我现在不知道如何写一个合适的方法来测试这种行为。请不要投反对票... 我现在有一个java类负责处理和向多个数据库添加数据。每个数据库保存相同的数据,但处理方式不同(例如,使用不同的插值速率进行插值)。 所以我运行程序(点击绿色矩形),修改参数(插值率)并运行程序。所以我有两个进程运行(因为大约。这就是为什么我不想冒任何中断的风险,担心数据库被搞砸了)。 我的问题是:这个修改是否适用于已经运行的进

  • 问题内容: 我在中有我的php脚本文件。何时运行,它运行完美。 我想通过sh文件调用PHP文件,SH文件的位置如下 这是文件的内容是: 当我运行时,它也可以完美运行。 现在,如果我按如下所示设置crontab: 但是,此crontab无法正常工作。 有什么事吗 问题答案: 从注释中可以看出,问题在于您没有定义应使用哪个程序来执行脚本。考虑到cronjob是在很小的环境中执行的;在那里,没有什么可以

  • 我曾多次使用NetLogo向人们解释基于代理的建模的力量,我发现它非常有效。 我在工作中遇到了一个特殊的商业问题,我认为ABM,尤其是Netlogo,可能有助于在两个观点根深蒂固且相互对立的团体之间就前进的道路达成共识。 我想做的是演示模型和修改参数。更好的是,如果可能的话,我希望他们看到我加入模型。 然而,这是一个企业环境。我不能在我的机器上安装软件,或者任何我可以连接到他们网络的机器上。 有没