【问题标题】:What is the difference between Client mode and Cluster mode in Spark?Spark中的客户端模式和集群模式有什么区别?
【发布时间】:2019-09-15 05:22:29
【问题描述】:

我对什么是客户端模式和集群模式有疑问。举个例子:

我的 test.py 包含以下内容:

if __name__ == "__main__":

conf = (SparkConf()
     .setAppName(appName)
     .set("spark.executor.memory", ?)
     .set('spark.driver.memory', ?)
     .set('spark.executor.memoryOverhead',?)
     .set("spark.network.timeout", ?)
     .set("spark.files.overwrite", ?)
     .set("spark.executor.heartbeatInterval", ?)
     .set("spark.driver.maxResultSize", ?)
     .set("spark.executor.instances", ?)
     .set("spark.executor.cores", ?)
     .set("spark.driver.cores", ?)
     .set("spark.sql.shuffle.partitions", ?)
     )
spark = SparkSession.builder.config(conf=conf).getOrCreate()

start_time = time.time()
sc = spark.sparkContext
sqlContext = SQLContext(sparkContext = sc)

我正在使用 SSH linux 服务器。为了能够运行 test.py,我可以做两个选择:

1- 使用以下命令保留节点:

salloc --time=03:00:00 --cpus-per-task=32 --mem=0 --account=def-myName

这个命令允许我保留一个节点三个小时。该节点具有以下规格:

Cores: 32
Available memory:   125 gb
CPU type:   2 x Intel E5-2683 v4 "Broadwell" @ 2.1Ghz                         
Storage: 2 x 480GB SSD

现在运行 test.py,我只需输入 spark-submit test.py。这种方式叫客户端模式还是集群模式?如果是客户端模式,我该如何设置:

Master Memory:
Master Cores:
Number of Worker Nodes:
Memory per worker node (gb):
Cores per worker node:

2- 我可以运行job.sh,它的定义如下:

    #SBATCH --nodes=1
    #SBATCH --time=
    #SBATCH --mem=128000M
    #SBATCH --cpus-per-task=
    #SBATCH --ntasks-per-node=
    #SBATCH --output=sparkjob-%j.out
    #SBATCH --mail-type=ALL
    #SBATCH --error=
    ## send mail to this address
    #SBATCH --mail-user=

    spark-submit --total-executor-cores xxx --driver-memory xxxx test.py
....

然后我通过sbatch job.sh执行代码。这种方式叫集群方式吗?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    客户端模式中,驱动程序(执行本地任务)设置在您运行spark-submit 的服务器上。 executors 由您的资源管理器(yarn 或 mesos)在具有您请求的资源的任何节点上动态分配。

    集群模式中,驱动程序也由资源管理器动态分配,因此可以在集群的任何节点上。

    你可以在这里https://stackoverflow.com/a/41142747/8467558阅读更多内容。

    部署模式的 spark-submit 内联命令是 --deploy-mode

    Usage: spark-submit [options] <app jar | python file | R file> [app arguments]
    Usage: spark-submit --kill [submission ID] --master [spark://...]
    Usage: spark-submit --status [submission ID] --master [spark://...]
    Usage: spark-submit run-example [options] example-class [example args]
    
    Options:
      --master MASTER_URL         spark://host:port, mesos://host:port, yarn,
                                  k8s://https://host:port, or local (Default: local[*]).
      --deploy-mode DEPLOY_MODE   Whether to launch the driver program locally ("client") or
                                  on one of the worker machines inside the cluster ("cluster")
                                  (Default: client).
    

    如果未设置,它将默认为您的spark-defaults.conf 配置值spark.submit.deployMode。如果没有默认配置或未设置此值,它将是client

    【讨论】:

      【解决方案2】:

      关于何时使用一个或另一个选项的一些补充信息。

      正如您在客户端模式中运行spark-submit 时已经提到的,驱动程序将在您执行spark-submit 命令的机器上运行。这也意味着您将能够通过命令行从同一台机器监控您的作业的执行。因此,如果您终止命令行,您将终止驱动程序并最终终止 Spark 作业。因此,您应该在生产中使用客户端模式。

      集群模式的情况下,驱动程序将运行在集群上任意节点的某处。这意味着您需要另一种方法来监控您的 Spark 作业,即 Spark UI。

      正如您可能已经猜到的那样,客户端模式对于在生产和/或测试环境中使用集群模式时在本地机器上测试您的作业很有用。

      回答你的问题:

      1) 默认模式是客户端模式,因此当您键入时:

      spark-submit --total-executor-cores xxx --driver-memory xxxx test.py
      

      这将在客户端模式下执行。

      2) 如果您想在集群模式下执行作业,您必须输入:

      spark-submit --total-executor-cores xxx --driver-memory xxxx --deploy-mode cluster test.py
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-23
        • 2019-11-15
        • 2022-12-10
        • 2014-01-14
        • 1970-01-01
        • 2017-02-22
        • 2015-08-31
        • 1970-01-01
        相关资源
        最近更新 更多