首页 > 其他分享 >Spark 使用遇到的问题

Spark 使用遇到的问题

时间:2023-10-08 17:35:10浏览次数:27  
标签:遇到 scala apache 使用 spark org SPARK Spark

Spark 使用遇到的问题

环境信息

IDEA版本:Build #IU-232.8660.185, built on July 26, 2023

系统版本:Macos 14.0

Docker版本:

image-20231008165706560

一、Docker运行Spark集群

这里使用bitnami发行的spark image

image-20231008165448620

github文档地址:https://github.com/bitnami/containers/tree/main/bitnami/spark#configuration

下载完成后,

  1. 在磁盘上随便找个地方创建一个文件夹,

  2. 新建一个文件,文件名必须是docker-compose.yml

  3. 文件内容如下

    # Copyright VMware, Inc.
    # SPDX-License-Identifier: APACHE-2.0
    
    version: '2'
    
    services:
      spark:
        image: docker.io/bitnami/spark:3.5
        environment:
          - SPARK_MODE=master
          - SPARK_RPC_AUTHENTICATION_ENABLED=no
          - SPARK_RPC_ENCRYPTION_ENABLED=no
          - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
          - SPARK_SSL_ENABLED=no
          - SPARK_USER=spark
        ports:
          - '8080:8080'
      spark-worker:
        image: docker.io/bitnami/spark:3.5
        environment:
          - SPARK_MODE=worker
          - SPARK_MASTER_URL=spark://spark:7077
          - SPARK_WORKER_MEMORY=1G
          - SPARK_WORKER_CORES=1
          - SPARK_RPC_AUTHENTICATION_ENABLED=no
          - SPARK_RPC_ENCRYPTION_ENABLED=no
          - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
          - SPARK_SSL_ENABLED=no
          - SPARK_USER=spark
    

    image版本必须和你的一致,比如说我的image版本是

    image-20231008170037415

    那就修改成

    image: docker.io/bitnami/spark:3.5.0-debian-11-r9
    
  4. 启动Spark

    打开命令符,进入文件所在目录,单worker启动

    docker-compose up
    

    启动多个worker

    docker-compose up --scale spark-worker=3
    

二、IDEA 2023创建Scala Maven项目

  1. 新建一个项目,选择IntelliJ Build System

    image-20231008171301912
  2. 右上角搜索Add Framework Support

    image-20231008171707322

  3. 然后添加Maven即可

    image-20231008171720666

三、IDEA连接Docker Spark

  1. IDEA新建一个Maven Scala项目

  2. 添加如下依赖

        <dependencies>
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala3-library_3</artifactId>
                <version>3.3.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.13</artifactId>
                <version>3.5.0</version>
            </dependency>
        </dependencies>
    
  3. 查看Spark启动日志,获取Master运行端口,我这里是7077

    image-20231008170642172

  4. 也可进入Spark WebUI地址查看,WebUI默认地址http://localhost:8080/,URL后面的端口值即为Master运行端口

    image-20231008170714048

  5. 编写Spark代码

      def main(args: Array[String]): Unit = {
        val conf = new SparkConf()
        conf.setAppName("myapp")
        conf.setMaster("spark://localhost:7077")
    
        val sc = new SparkContext(conf)
        val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6))
        print(rdd)
      }
    

    注意Master的地址,把7077改成你的端口即可,不要修改localhost

  6. 运行后可能会报错

    Exception in thread "main" java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x55b0dcab) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x55b0dcab
    	at org.apache.spark.storage.StorageUtils$.<clinit>(StorageUtils.scala:213)
    	at org.apache.spark.storage.BlockManagerMasterEndpoint.<init>(BlockManagerMasterEndpoint.scala:121)
    	at org.apache.spark.SparkEnv$.$anonfun$create$9(SparkEnv.scala:358)
    	at org.apache.spark.SparkEnv$.registerOrLookupEndpoint$1(SparkEnv.scala:295)
    	at org.apache.spark.SparkEnv$.create(SparkEnv.scala:344)
    	at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:196)
    	at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:284)
    	at org.apache.spark.SparkContext.<init>(SparkContext.scala:483)
    	at Main$.main(Main.scala:9)
    	at Main.main(Main.scala)
    

    需要修改运行设置

    image-20231008171034369

    Modify Options --> Add VM Options --> 添加下面语句

    --add-exports java.base/sun.nio.ch=ALL-UNNAMED
    

    之后运行即可

标签:遇到,scala,apache,使用,spark,org,SPARK,Spark
From: https://www.cnblogs.com/INnoVationv2/p/17749691.html

相关文章

  • click() 方法无法生效时 使用ActionChains
    背景知识1ActionChains库它的缩写来自于以下单词:Action(动作)和Chains(链)背景知识2ActionChains提供了更多灵活的鼠标和键盘操作选项,可以用于处理更复杂的场景,如果click()方法无法生效,可以尝试使用ActionChains来模拟点击事件。在使用Selenium时,存在一种情况是click()......
  • Redis——基本使用
    五种数据类型Redis是一个基于内存的数据库。是一个key-value的数据库,key一般是String类型,value的类型多种多样。字符串StringSETnamezhangxiancheng//redis中默认都是使用字符串来存储数据的DELkey//删除EXISTSkey//是否存在KEYS*//所有键redis中的键和值都是以二进......
  • git - rebase 使用
    原理一句话总结就是:把当前分支从搬到目标分支之上。首先,执行rebase操作时会先找到当前分支和目标分支的最近共同commit。然后记录下当前分支自这个共同commit以来的所有提交。之后分别将记录中的commit应用到目标分支上,类似于cherry-pick。如果遇到冲突需要先解决冲突。最后......
  • ts 中泛型的简单使用
    interfaceApiResponseData<T>{ code:number data:T message:string}在这段TypeScript代码中,T是一个泛型参数(genericparameter),用于描述ApiResponseData<T>的类型。泛型可以理解为是一种占位符,它能够让我们在定义函数或类型时先不确定具体的类型,而是让使用......
  • Unity 通信方案 - 使用 Google Protobuf 序列化数据
    1.下载和编译1.1下载ProtoBuf源文件从github下载最新的protoBuf库,如下图所示 Releases·protocolbuffers/protobuf(github.com)1.2编译dll和导入解压后打开/scharp/src中的sln工程文件 选择Release,Google.Protobuf,之后在生成中生成文件在......
  • 内核态内存的正确使用方法
    前言看完了伙伴系统的设计、slab分配器的设计、vmalloc、kmalloc这些内容对于内存管理的一些细节上好像比较清楚了,但是内核是如何使用内存的还是有一些混淆。也产生了一些疑问,在内核中内存的正确打开方式是什么呢?内核地址空间划分首先我们需要搞情况内核的地址空间,不同地址空间......
  • centos7系统中创建临时接口,使用jmeter进行http压测
    要在一台CentOS7服务器上使用JMeter进行HTTP接口的压测,首先需要在服务器上部署一个Web服务器,然后在其上部署您想要测试的接口。以下是一些简单的步骤来实现这一目标:步骤1:在CentOS7服务器上安装Web服务器您可以选择安装常用的Web服务器,比如Apache或Nginx。以下......
  • ControlNet-trt优化总结3:使用multi-stream和cuda-graph构建并行流水线
    ControlNet-trt优化总结3:使用multi-stream和cuda-graph构建并行流水线上节谈到使用TRT-API来构建网络,在这一节中总结一些trick来提升模型的运行效率,这些trick在所有的trt优化中均可使用,主要有以下几点:使用cuda_graph减少kernel间的启动间隙使用Mutil-stream增加异步cuda_gra......
  • 使用binlog恢复数据
    目录数据模拟恢复到查找最初始的建prod表查找updata语句查找delete语句查找删除语句数据模拟[root@db01~]#cat6.sh#!/bin/bashmysql-uroot-p123-e"dropdatabaseifexistsprod;"mysql-uroot-p123-e"createdatabaseifnotexistsprod;"mysql-uroot-p123......
  • 使用RequireJS并实现一个自己的模块加载器 (一)
    使用RequireJS并实现一个自己的模块加载器(一) RequireJS&SeaJS在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题。JS项目中的依赖只有通过引入JS的顺序来确定,项目会变得复杂难以维护。复杂的脚本会暴露很......