我在Spark中有一个简单的程序:
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]) {
val conf = new SparkConf().setMaster("spark://10.250.7.117:7077").setAppName("Simple Application").set("spark.cores.max","2")
val sc = new SparkContext(conf)
val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv")
//first get the first 10 records
println("Getting the first 10 records: ")
ratingsFile.take(10)
//get the number of records in the movie ratings file
println("The number of records in the movie list are : ")
ratingsFile.count()
}
}
当我尝试从spark-shell运行这个程序时,即我登录到名称节点(Cloudera安装)并在spark-shell上顺序运行命令:
val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv")
println("Getting the first 10 records: ")
ratingsFile.take(10)
println("The number of records in the movie list are : ")
ratingsFile.count()
我得到了正确的结果,但如果我尝试从eclipse运行程序,没有资源分配给程序,在控制台日志中,我看到的只有:
WARN TaskSchedulerImpl:初始作业未接受任何资源;检查您的群集UI以确保工作人员已注册并具有足够的资源
另外,在Spark UI中,我看到了:
此外,应该注意的是,这个版本的spark与Cloudera一起安装(因此没有工作节点出现)。
我该怎么做才能使这项工作?
修改
我检查了HistoryServer,这些作业没有显示在那里(即使在不完整的应用程序中)
答案 0 :(得分:13)
我已经为许多火花星团进行了配置和性能调整,这是一个非常常见/正常的消息,可以看到您第一次准备/配置群集来处理工作负载时。
这是明确的,因为没有足够的资源来启动工作。这项工作要求以下之一:
答案 1 :(得分:2)
最后想出了答案是什么。
在YARN群集上部署spark程序时,主URL只是yarn。
所以在程序中,spark上下文应该只是:
val conf = new SparkConf().setAppName("SimpleApp")
然后应该使用Maven构建这个eclipse项目,并且应该将生成的jar部署到集群上,方法是将其复制到集群,然后运行以下命令
spark-submit --master yarn --class "SimpleApp" Recommender_2-0.0.1-SNAPSHOT.jar
这意味着直接从eclipse运行是行不通的。
答案 2 :(得分:2)
您可以检查群集的工作节点核心:您的应用程序不能超过该核心。例如,您有两个工作节点。每个工作节点你有4个核心。然后你有2个应用程序要运行。因此,您可以为每个应用程序提供4个内核来运行该作业。
您可以在代码中设置如下:
SparkConf sparkConf = new SparkConf().setAppName("JianSheJieDuan")
.set("spark.cores.max", "4");
它对我有用。
答案 3 :(得分:0)
除了此处发布的那些错误消息外,还有其他导致此错误消息的原因。
对于spark-on-mesos
集群,请确保您在mesos slaves
上具有 java8或更高版本 java版本。
对于spark standalone
,请确保java8
上有workers
(或更高版本)。
答案 4 :(得分:-1)
你没有任何工人来执行这项工作。没有可用于执行作业的核心,这也是作业状态仍在等待的原因。
如果您没有在Cloudera注册的工作人员如何执行这些工作?