我是Spark的新手。我可以从http://spark.incubator.apache.org/docs/0.7.3/ec2-scripts.html启动,管理和关闭Amazon EC2上的Spark群集。
但是我无法在群集上添加以下作业。
包spark.examples
import spark.SparkContext
import SparkContext._
object SimpleJob {
def main(args: Array[String]) {
val logFile = "< Amazon S3 file url>"
val sc = new SparkContext("spark://<Host Name>:7077", "Simple Job",
System.getenv("SPARK_HOME"), Seq("<Jar Address>"))
val logData = sc.textFile(logFile)
val numsa = logData.filter(line => line.contains("a")).count
val numsb = logData.filter(line => line.contains("b")).count
println("total a : %s, total b : %s".format(numsa, numsb))
}
}
我创建了一个SimpleJob.scala并添加到我本地spark目录的spark.examples包中。之后我运行命令: ./spark-ec2 -k -i login
群集已启动,我可以在群集中登录。 但我不知道如何在EC2集群上添加和运行此作业。
答案 0 :(得分:1)
我建议你先尝试在本地运行它,一旦你实现了这一点,你就会更好地了解所涉及的过程。按照“ Scala中的独立作业 ”部分中的说明here进行操作。然后将脚本复制到远程计算机并使用以下命令运行脚本:
./run spark.examples.SimpleJob
如果您尝试使用以下命令从本地脚本连接到远程spark:
MASTER=spark://ec2-174-129-181-44.compute-1.amazonaws.com:7077 ./run spark.examples.SimpleJob
最可能的结果是,您将收到连接错误,因为EC2中默认阻止端口7077。
答案 1 :(得分:1)
如果你能够在本地运行,那么很可能问题是Spark工作人员无法访问你的jar。如果以下步骤有效,请告诉我 -
将您的代码导出到一个jar文件中(我通常使用Eclipse,但您也可以使用sbt)
在master上运行命令
SPARK_CLASSPATH=<path/to/jar/file> ./run <Class> [arguements]
例如,
SPARK_CLASSPATH=Simple.jar ./run spark.examples.SimpleJob
还要确保您的员工在Spark master UI中活着。希望这有帮助!