web-dev-qa-db-ja.com

Spark:クラスターUIをチェックして、ワーカーが登録されていることを確認します

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

また、このバージョンのsparkはClouderaとともにインストールされたため、ワーカーノードが表示されないことに注意してください。

この作業を行うにはどうすればよいですか?

編集:

HistoryServerを確認しましたが、これらのジョブはそこに表示されません(不完全なアプリケーションでも)

15
vineet sinha

多くのspark=クラスターの構成とパフォーマンスの調整を行いました。これは、ワークロードを処理するためにクラスターを最初に準備/構成するときに表示される非常に一般的/通常のメッセージです。

これは、ジョブを起動するのに十分なリソースがないためです。ジョブは次のいずれかを要求しています:

  • ワーカーごとに割り当てられているよりも多くのメモリ(1GB)
  • クラスターで使用できるよりも多くのCPU
13
javadba

クラスターの作業ノードコアを確認できます。アプリケーションはそれを超えることはできません。たとえば、2つの作業ノードがあります。作業ノードごとに4つのコアがあります。次に、2つのアプリケーションを実行します。そのため、すべてのアプリケーションに4つのコアを与えてジョブを実行できます。

コードで次のように設定できます。

SparkConf sparkConf = new SparkConf().setAppName("JianSheJieDuan")
                          .set("spark.cores.max", "4");

わたしにはできる。

2
iwwenbo

最後に答えが何であるかを見つけました。

YARNクラスターにsparkプログラムをデプロイする場合、マスターURLは単なる糸です。

したがって、プログラムでは、sparkコンテキストは次のようになります。

val conf = new SparkConf().setAppName("SimpleApp")

次に、このEclipseプロジェクトをMavenを使用してビルドし、生成されたjarをクラスターにコピーしてから、次のコマンドを実行してクラスターにデプロイする必要があります。

spark-submit --master yarn --class "SimpleApp" Recommender_2-0.0.1-SNAPSHOT.jar

これは、Eclipseから直接実行すると機能しないことを意味します。

2
vineet sinha

ここに投稿されたもの以外にも、この同じエラーメッセージの原因がいくつかあります。

spark-on-mesosクラスターの場合、Java8以降 Java version on mesos slaves]があることを確認してください。

spark standaloneについては、workersJava8(またはそれ以降)があることを確認してください。

0
AyoubOm