2017-02-20 5 views
0

2回のスパーク送信を同時に実行するにはどうすればよいですか? 私は4つのコアが割り当てられた簡単なスパーク(私のPCには特別な構成はありません)を持っています。複数のスパークアプリを同時に送信する(動的リソース割り当て)

私はアプリの2倍の時間を提出しようとする場合は、2番目の1は は「TaskSchedulerImplをWARN:初期の仕事は、すべてのリソースを受け入れていない。労働者が登録し、十分なリソースを持っていることを確認するために、クラスタのUIを確認し、」取得

をコード: から将来輸入print_function私はそれらを起動しようとする方法

import sys 
from operator import add 

from pyspark.sql import SparkSession 

if __name__ == "__main__": 

    spark = SparkSession\ 
     .builder\ 
     .appName("test")\ 
     .getOrCreate() 

    rdd = spark.sparkContext.parallelize(xrange(1000000000), 100) 
    print(rdd.sample(False, 0.1, 81).count()) 

    spark.stop() 

: ./spark-submit --masterスパーク:// myaddresshere:7077 --name "APP1" --confスパーク。 shuffle.service.enabled = true - -conf park.shuffle.service.enabled = true /path_to_py_file.py

私は使用するコア数をあらかじめ設定することができますが、私の目的はリソースを動的に割り当てることです。実行中のタスクが1つのみであれば、100%を消費し、4つのタスクがそれぞれ> 25%であれば消費します。

複数のオプションを試しましたが、運がありません。

ご了承ください。

+0

スパーク・ダイナミック・アロケーションはエクゼクティブ・レベルでのみ機能します。つまり、タスクがキューに積み重なっているときに、より多くのエグゼキュータを割り当てます。追加のエグゼキュータを割り当てることができる場合は、そのセットアップと使用可能なリソースによって異なります。また、ローカルで実行する場合、ドライバにもコアが必要であることに注意してください。 – LiMuBei

答えて

0

ローカルで実行しているので、リソースを配布するためのYarnのようなリソースマネージャはありません。あなたのアプリは、おそらく..あなたは、将来の提出に依存し、ここで動的な値を使用することはできませんすべてのコアを使用するようにスパーク伝え

val conf = new SparkConf() 
    .setMaster(local[*]) 

で実行されます。

アプリケーション間でリソースを均等に分配するリソースマネージャが求められているのは、それを正確に提供するものは何もわかりません。

動的割り当てのような設定では、リソースマネージャは必要に応じてリソースを割り当てることができますが、必ずしも2つのアプリケーションの50%になるとは限りません。

私の知る限り、Sparkは使用するエグゼキュータの数と各エグゼキュータのコア数(spark-submit引数またはspark-defaults構成を使用)を指定することで、リソースを均等に分散させることができます。

関連する問題