我想在一组机器而不是独立模式下运行我的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
如何根据上述指定功能运行此代码?
答案 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的可用性,请咨询超级计算机管理员。