博客
关于我
Spark之本地模式与集群模式
阅读量:640 次
发布时间:2019-03-15

本文共 2843 字,大约阅读时间需要 9 分钟。

Spark本地模式与集群模式的对比与应用

Spark是流行的大数据处理框架,它的运行模式主要包括本地模式与集群模式。理解这两种模式的工作原理,以及如何选择合适的运行模式,是 cigar/apache Spark developers 和应用程序开发者的重要课题。本文将从理论和实践两个方面,详细分析本地模式与集群模式的特点,及其在实际应用中的适用场景。

本地模式

本地模式是Spark最常用的运行方式之一。在本地模式下,Spark程序运行在用户的本地机器上,不需要远程提交,而是通过本地的Spark Context(sc)进行执行。这种方式对于开发、调试和小规模的数据处理尤其方便。让我们具体了解本地模式的工作原理和应用场景。

  • 本地模式的启动方法
  • 在Spark Shell中,可以直接通过命令启动本地模式的Spark程序。以下是一个典型的示例:

    $ spark-shell --master local[2]

    在上述命令中:

    • local 表示使用本地模式运行。
    • [2] 表示使用2个本地线程来模拟集群环境。

    这是一个非常常见的方式,适用于快速验证或小规模的数据处理任务。

    1. 基于Scala的本地模式开发
    2. 如果你使用Spark Scala API,本地模式的配置方式看起来如下:

      object WordCountLocal {  def main(args: Array[String]): Unit = {    val conf = new SparkConf()      .setAppName("wordcount")      .setMaster("local[2]")    val sc = new SparkContext(conf)    sc.textFile("file:///d:/a.txt")      .flatMap(_.split(","))      .map((_, 1))      .reduceByKey(_ + _)      .sortBy(_._2)      .saveAsTextFile("file:///d:/out")  }}

      在上述代码中:

      • sparkContext 是本地模式的Spark Context。
      • local[2] 表示使用2个线程来运行任务。

      这种方式的优点是直观,依赖轻量,适合个人开发和小项目。

      集群模式

      相比于本地模式,集群模式是一种规范化的运行方式,适用于大规模数据处理和多用户环境。集群模式的一个主要特点是将任务分发到集群中的多个 worker 节点,利用集群的资源优势来提高计算能力。接下来,我们将详细介绍集群模式的使用方法和优势。

    3. 集群模式的启动方法
    4. 在集群模式下,需要首先启动一个 master 节点,然后将 application提交给 master。以下是一个典型的集群模式启动命令:

      $ spark-shell --master spark://server01:7077 \  --total-executor-cores 3 \  --executor-memory 1g

      在上述命令中:

      • --master spark://server01:7077:指定 master 节点的地址。
      • --total-executor-cores 3:指定 executor 的核数,即 worker 节点的数量。
      • --executor-memory 1g:指定每个 executor nodes 的内存大小。

      启动 master 节点后,可以使用命令提交 application:

      $ spark-submit \  --master spark://server01:7077 \  --total-executor-cores 2 \  --executor-memory 1g \  --class com.yundoku.spark.WordCountMaster \  /home/hadoop/sparkscalawordcount.jar \  /spark/words.txt \  /spark/scala_wordcount_out

      上述命令中:

      • --class 参数指定了要运行的主类路径。
      • /spark/words.txt:输入文件路径。
      • /spark/scala_wordcount_out:输出文件路径。
      1. 基于Scala的集群模式开发
      2. 对于Spark Scala API,集群模式的程序开发方式与本地模式类似,但需要集中管理Spark Context。以下是一个典型的集群模式应用代码:

        object WordCountMaster {  def main(args: Array[String]): Unit = {    val conf = new SparkConf()      .setAppName("WordCountMaster")    val sparkContext = new SparkContext(conf)        sparkContext.textFile(args(0))      .flatMap(_.split(","))      .map((_, 1))      .reduceByKey(_ + _)      .sortBy(_._2)      .saveAsTextFile(args(1))  }}

        在集群模式下,sparkContext 将根据配置文件连接到远程集群。

        集群模式与本地模式的对比

        尽管本地模式和集群模式都可以用于Spark程序的执行,但二者在运行机制、资源利用和应用场景上存在显著差异。以下是对本地模式与集群模式的对比总结:

      3. 本地模式特点
        • 资源使用:本地模式会在本地机器上使用少量的资源,通常为用户帐号下的本地用户(user@local)。
        • 执行方式:使用本地线程模拟集群环境,不具备高并发能力。
        • 展示结果:本地模式的结果不会展示在集群的Web界面(Port 8080),因为没有 master 节点。
        1. 集群模式特点
          • 资源利用:集群模式可以高效利用集群中的各个 worker 节点,以支持大规模的数据处理任务。
          • 执行方式:通过 master 节点统一接收并分发任务到多个 worker 节点上。
          • 展示结果:集群模式的应用任务结果会展示在 master 节点的Web界面(Port 8080)。

          适用场景

          • 小规模数据处理:本地模式更适合小规模的数据处理任务,开发效率高,且无需配置复杂的集群环境。
          • 大规模数据处理:集群模式对于处理大规模数据和需要分布式计算的任务更为理想,能够充分利用集群资源,具备高吞吐量。

          总的来说,Spark 提供了两种运行模式,本地模式适合小项目或个人开发需求,而集群模式则适合大型数据处理任务。根据具体需求选择合适的运行模式,是Spark应用开发的重要课题之一。

    转载地址:http://tgxlz.baihongyu.com/

    你可能感兴趣的文章
    MySQL Cluster 7.0.36 发布
    查看>>
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>
    Multiple websites on single instance of IIS
    查看>>
    mysql CONCAT()函数拼接有NULL
    查看>>
    multiprocessing.Manager 嵌套共享对象不适用于队列
    查看>>
    multiprocessing.pool.map 和带有两个参数的函数
    查看>>
    MYSQL CONCAT函数
    查看>>
    multiprocessing.Pool:map_async 和 imap 有什么区别?
    查看>>
    MySQL Connector/Net 句柄泄露
    查看>>
    multiprocessor(中)
    查看>>
    mysql CPU使用率过高的一次处理经历
    查看>>
    Multisim中555定时器使用技巧
    查看>>
    MySQL CRUD 数据表基础操作实战
    查看>>
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>