メモリJVMはSparkContextを起動しないように、十分なリードを適用します

java.lang.IllegalArgumentExceptionが:システムメモリの259522560は、少なくとも471859200.スパーク構成で--driverメモリオプションまたはspark.driver.memoryを使用してヒープサイズを増やしてくださいする必要があります。

スパークで直接プログラムを実行しようとすると、我々は次のエラーに会いました:

明らかに、これはSparkContextを開始することができませんメモリJVMアプリケーションを引き起こすのに十分ではありません。しかし、どのようにそれを設定するには?

 

スパークソースを見ることによって、私たちは、ソースがそのように書かれて見つけます:

/ **
*バイト単位で、実行及び記憶の間で共有メモリの総量を返します。
* /
getMaxMemory(CONF:SparkConf):DEFプライベートロング= {
ヴァルシステムメモリ= conf.getLong(Runtime.getRuntime.maxMemory、 "spark.testing.memory")
ヴァルreservedMemory = conf.getLong( "spark.testing.reservedMemory"、
(conf.contains( "spark.testing"))0他RESERVED_SYSTEM_MEMORY_BYTES)であれば
ヴァルminSystemMemory = reservedMemory * 1.5
の場合(システムメモリ<minSystemMemory){
スロー新しい例外:IllegalArgumentException(S "システムメモリの$システムメモリがしなければならない" +
sが"で、少なくとも$ minSystemMemory 。より大きなヒープサイズを使用してください」)。
}
ヴァルusableMemory =システムメモリ- reservedMemory
ヴァルmemoryFraction = conf.getDouble( "spark.memory.fraction"、0.75)
(usableMemory * memoryFraction).toLong
}


だから、ここではvalをシステムメモリ= conf.getLong( "spark.testing.memory" Runtime.getRuntime.maxMemory)は主です。

conf.getLong()の定義および説明は、

GetLongは(キー:文字列は、はdefaultValue:ロング):ロング
IFないSETへ戻るデフォルト立ち下がり、ロングなどのパラメータを取得します
ので、我々はconfの中spark.testing.memoryについて設定する必要があります。

しようとすることで、設定するには、2つの場所がある見つけることができます

ソースが1で、CONFを添加した後に行ってもよいです。

    新しい新しいSparkConfのconf =ヴァル()。setAppName(「ワードカウント」)
    conf.set(「spark.testing.memory」、「2147480000」)//以下の値が512メートルよりも大きくすることができます

2.実行構成は、エクリプスでカラムであってもよい引数で、VMarguments下に、(あれば値が缶512メートルよりも大きくなるように)以下に次の行を追加

-Dspark.testing.memory = 1073741824

他のパラメータは、動的に、ここでは、そのような-Dspark.master =火花を設定することができる://ホスト名:7077

この間違いを報告した私は再び実行されません。

 

おすすめ

転載: www.cnblogs.com/AlanWilliamWalker/p/11680933.html
おすすめ