• 5. spark 参数问题


    官网地址:spark 参数

    在代码中设置参数

    spark-default.conf < 命令行< 代码内部设置参数, 对于一常用的参数可以放在配置文件,对于一些个性化参数则通过 命令行传递比较好。

    命令行

    命令行传递参数,有一些快捷方式,比如 --driver-memory 类似的参数, 其实这只是对特别常用的参数做了额外的精简化, 除此之外还有另一种最底层的传递方式那就是 --conf k=v

    Spark Properties

    Spark Properties 控制大多数应用程序设置,并可为每个应用程序单独配置。支持的参数可以在本文最上方的连接处找到

    val conf = new SparkConf()
                 .setMaster("local[2]")
                 .setAppName("CountingSheep")
                .set("任意支持的key","value")
    val sc = new SparkContext(conf)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    动态加载参数

    动态加载参数,意思就是通过命令行动态的为程序设置运行参数,这也是最为灵活的一种。也是开发中最常见的,一般需要以下两个步骤。

    1. 代码中要有
      val sc = new SparkContext(new SparkConf())
      val sc = new SparkContext(conf)
      这样命令行传递的参数会被sparkConf 对象接收,自动设置。
    2. 命令行传递参数
      命令行传递有两种写法,一种是快捷方式,通过spark-submit --help 可以查到支持的快捷方式,比如spark-submit --name test, 这就将我们的程序名称设置为了test, 除此之外就是用–conf k=v 这种方式支持所有的底层参数, 比如上面的写法可以改成:
      spark-submit --conf spark.app.name=test 这两种写法是等效的。所有的快捷方式都有对应的底层方式
      再举几个例子:
      –conf spark.executor.memory=2g
      –conf spark.driver.memory=2g
      等同于
      –driver-memory 4g
      –executor-memory 2g
      文章开始的连链接就是官网支持的所有底层参数, 感兴趣的可以查看。
      下面是我常用的命令仅供参考:
    spark-submit 
    --master yarn
    -deploy-mode cluster 
    --class com.boke.entry.Main 
    --conf spark.shuffle.service.enabled=true   #开启shuffer
    --conf spark.dynamicAllocation.enabled=false #是否开启动态资源分配
    --conf spark.dynamicAllocation.minExecutors=1 #最小分配数量
    --conf spark.dynamicAllocation.maxExecutors=4 #最大分配数量
    --conf spark.dynamicAllocation.executorIdleTimeout=60s #超时检测
    --conf spark.dynamicAllocation.initialExecutors=3 #初始化分配数量
    --conf spark.driver.memory=2g #等同于--driver-memory
    --conf spark.executor.memory=2g # 等同于--executor-memory
    --conf spark.executor.instances=4# 等同于--num-executors
    --conf spark.app.name=SparkTest # 等同于 --name SparkTest
    --conf spark.yarn.jars=hdfs://xxx:9000/yarn-jars/*.jar 
    /usr/local/alg/graph-algorithm-1.0-SNAPSHOT.jar 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    重点说下 spark.yarn.jars 这个参数的意思是放弃读取spark安装目录下的…/jars/目录,转而读取hadoop的目录,要求将
    spark安装目录中的…/jars/下的所有jar包上传到指定的hdfs目录,此目录也可以放别的依赖jar
    比如jdbc的包,或者任何你代码中用到的第三方的jar,好处是jar容易管理, 打包的时候不需要将第三方的依赖jar打进去, 只需要源码包即可,
    注意我的集群用的是9000端口,你可能用的是8020。
    请在hdfs-site.xml 找到:

       <property>
            <name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
            <value>xxx:9000</value>
        </property>
    
    • 1
    • 2
    • 3
    • 4

    目前大多数的集群都是8020端口

  • 相关阅读:
    【Linux】信号(2)如何阻塞、处理信号
    牛客NC199 字符串解码【中等 递归,栈的思想 C++/Java/Go/PHP】
    ubuntu 与 windows 之间的文件互传
    学习学习之五星笔记法
    记录关于Ajax二次加载出的内容无法再次实现Ajax点击效果问题
    java项目之服装定制系统(ssm框架)
    轻量级网络IP扫描器WatchYourLAN
    Java使用documents4j将word和excel转pdf
    电脑没电关机,wsl和docker又挂了,附解决过程
    《论文写作》感悟
  • 原文地址:https://blog.csdn.net/qq_36066039/article/details/132804376