【问题标题】:Apache Spark standalone settingsApache Spark 独立设置
【发布时间】:2019-01-28 18:35:48
【问题描述】:

我有一个独立的 Apache spark 设置。 我希望启动 3 个工人并行运行: 我使用下面的命令。

./start-master.sh 
SPARK_WORKER_INSTANCES=3 SPARK_WORKER_CORES=2 ./start-slaves.sh

我尝试运行一些作业,以下是 apache UI 结果:

忽略最后三个失败的应用程序:以下是我的问题:

  1. 尽管要求 spark 启动 3 个每个具有 2 个内核的工作人员,但为什么我在 UI 中只显示一个工作人员?
  2. 我想对输入 RDD 进行分区以获得更好的性能。所以对于前两个没有分区的工作,我有 2.7 分钟的时间。在这里,我的 Scala 源代码具有以下内容。

    val tweets = sc.textFile("/Users/soft/Downloads/tweets").map(parseTweet).persist()

在我的第三份工作(4.3 分钟)中,我有以下内容:

  val tweets = sc.textFile("/Users/soft/Downloads/tweets",8).map(parseTweet).persist()

我预计使用更多分区的时间会更短(8)。为什么这与预期相反?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:
    1. 显然你只有一个活跃的工人,你需要通过检查火花日志来调查为什么没有报告其他工人。

    2. 更多的分区并不总是意味着应用程序运行得更快,您需要检查您是如何从源数据创建分区的,分区的数据量以及正在洗牌的数据量等。

    【讨论】:

      【解决方案2】:

      如果您在本地机器上运行,那么只启动具有多个 CPU 的单个工作器是很正常的,如输出所示。它仍然会为您分配机器中可用 CPU 的任务。

      根据可用资源的数量自动对文件进行分区,它在大多数情况下运行良好。 Spark(以及对文件进行分区)通常会带来一些开销,尤其是在单台机器上,Spark 会增加如此多的开销,它会减慢您的处理速度。附加值来自机器集群上的大量数据。

      假设您正在启动一个独立的集群,我建议您使用配置文件来设置集群并使用start-all.sh 来启动集群。

      1. 首先在您的spark/conf/slaves(复制自spark/conf/slaves.template)中添加您的工作节点的IP(或服务器名称)。
      2. 配置spark/conf/spark-defaults.conf(复制自spark/conf/spark-defaults.conf.template至少将主节点设置为运行你的主节点的服务器。
      3. 使用spark-env.sh(复制自spark-env.sh.template)来配置每个工作人员的核心数、内存等:
      export SPARK_WORKER_CORES="2"
      export SPARK_WORKER_MEMORY="6g"
      export SPARK_DRIVER_MEMORY="4g"
      export SPARK_REPL_MEM="4g"
      
      1. 由于它是独立的(而不是托管在 Hadoop 环境中),您需要将配置(或者更确切地说是完整的 spark 目录)共享(或复制)到集群中的所有节点。此外,您正在处理的数据需要在所有节点上可用,例如直接从存储桶或共享云端硬盘中获取。

      按照@skjagini 的建议,检查spark/logs/ 中的各种日志文件,看看发生了什么。每个节点都会写自己的日志文件。

      请参阅https://spark.apache.org/docs/latest/spark-standalone.html 了解所有选项。

      我们有这样的设置运行了几年,效果很好!

      【讨论】:

      • 对文件进行分区不会自动发生,如果文件恰好在 hdfs 上,因为 hdfs 已经将数据保存在块中,Spark 可以将这些块读取为分区,否则并非总是如此跨度>
      • 我设法使用了这个命令“./bin/spark-class org.apache.spark.deploy.worker.Worker spark://Softs-MacBook-Pro.local:7077”。每次运行它时,它都会创建一个连接到 master 的 worker。但是,所有创建的工作人员现在都有 7GB 的内存。我运行了 3 次,火花 UI 显示正在使用的内存为 21GB。我的 Mac 只有 8GB 的​​ RAM。但是,当我提交工作时,可以看到所有三个工人都在执行它。我是否应该期望我之前使用一名工作人员的设置会加快速度?
      • 因此您可能想尝试降低您的工作人员的内存,将工作人员SPARK_WORKER_MEMORY 设置为 1GB,将SPARK_WORKER_CORES 设置为 1。但实际上这只会帮助您测试 spark 集群和不一定会加快进程。
      猜你喜欢
      • 2021-07-14
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多