2016-09-04 2 views
4

大規模なメモリ内ジョブを実行するためにscala-nativeを利用することが可能かどうかは疑問です。メモリ内データ処理にscala-nativeを使用する

例えば、150GBのRAMを必要とするスパークジョブがあるとしたら、スパーククラスターで5x30GBエグゼキュータを実行する必要があるため、JVMガベージコレクタはそれよりも大きなヒープを追い越さないためです。

処理中のデータの99%がコレクション内でStringsであるとします。

あなたはスカラネイティブがここで助けてくれると思いますか? Sparkの代わりとして、私は意味しますか?

どのように治療するのですかString? jvmがクラスとして扱うので、このオーバーヘッドもありますか?

JVMの場合のメモリ( "ヒープ")GC制限は、古典的な30GBとは何ですか?私も30GBのような限界に終わるだろうか?

これは一般的に悪い考えですか?インメモリー・データ処理にscala-nativeを使用する。私の推測では、scala-offheapが良い方法です。

答えて

0

現時点では、Scala Nativeは実稼働環境では使用できないため、悪い考えです。また、Scala Nativeはガベージコレクタ(現在はBOEHM)を使用しており、JVMのような問題が発生しますが、Scala Nativeでは手動メモリ管理を試すことができます。

1

インメモリのデータ処理は、scala-nativeがJVMのScalaに比べて輝くユースケースです。

SNは、すべてのタイプのメモリ割り当てをサポートしています。静的割り当て(Cでグローバル変数を定義し、C関数を使用してポインタを返す)、スタック割り当て、C malloc/freeおよびgarbaged動的割り当てに基づく動的割り当て(Scala new)。

文字列の場合、8文字/文字のC文字列、Javaスタイルの16ビット/文字、または@structとポインタを使用してC++のように小文字の最適化を実装できます。

もちろん、SNはまだ0.1より前のバージョンで、JavaライブラリがScalaに移植されていないなど一時的な欠点があります。

関連する問題