在超级计算机的一组计算机上运行Spark

时间:2015-07-30 11:13:10

标签: scala apache-spark cluster-computing

我想在一组机器而不是独立模式下运行我的Spark代码, 本地机器上有1 GB的文本,

我有一台拥有30个节点的超级计算机,每个节点都有32个核心cpu和64G Ram。

这是我的代码:

import org.apache.spark.{SparkConf, SparkContext}
object Pre5 {
  def main(args: Array[String]): Unit = {
    case class Bigram(first: String, second: String,third: String) {
      def mkReplacement(s: String) = s.replaceAll(first + " " + second + " " + third, first + "-" + second + "-" + third)
    }

    def stringToBigrams(s: String) = {
      val sentences = s.split("\\.")
      sentences.flatMap { sent =>
        val words = sent.split("\\s+").filter(_ != "")
        if (words.length >= 3)
          words.sliding(3).map(a => Bigram(a(0), a(1), a(2)))
        else
          Iterator[Bigram]()
      }
    }

    val conf = new SparkConf()
      .setMaster("local")
      .setAppName("LDA")
      .set("spark.executor.memory", "1g")

    val sc = new SparkContext(conf)
      val data = sc.textFile("data/input"")

      val replaced1 = data.zipWithIndex()
        .map { case (line, i) => i.toString + "," + line}
      val bigrams = replaced1.flatMap(stringToBigrams(_)).collect()

      //use reduceByKey rather than groupBy for Spark
      val bigramCounts = bigrams.groupBy(identity).mapValues(_.size)
      var threshold = 70
      val topBigrams = bigramCounts.filter(_._2 >= threshold).map(_._1)
      val replaced = replaced1.map(r => topBigrams1.foldLeft(r)((r, b) =>    b.mkReplacement(r)))
      replaced.coalesce(1).saveAsTextFile("data/Pre5")

    }
  }
}

我想指定核心数并指定每个节点的RAM量,例如:

  

使用10个节点,10个核心和10G RAM

如何根据上述指定功能运行此代码?

1 个答案:

答案 0 :(得分:0)

Spark支持Mesos和YARN作为集群管理器。我使用YARN并且在提交spark作业时可以使用以下参数控制它(Mesos也有类似的参数)。

spark-submit ...
--num-executors 10 \
--executor-memory 10g \
--executor-cores 10 \

https://spark.apache.org/docs/latest/running-on-yarn.html

基本上,你需要使用spark-submit。从您的代码中,从SparkConf中删除setMaster("local")set("spark.executor.memory", "1g")。它们将由spark-submit参数设置。

如果您不了解Mesos或YARN的可用性,请咨询超级计算机管理员。