プロジェクトTungestenの統合により、sparkは自動的にオフヒープメモリを使用することになると思いました。
Spark.memory.offheap.sizeとspark.memory.offheap.enabledは何のためのものですか?ここでタングステンのオフヒープメモリの量を手動で指定する必要がありますか?
Spark/Tungstenは、エンコーダー/デコーダーを使用して、JVMオブジェクトを高度に特殊化したSpark SQL Typesオブジェクトとして表現し、高性能の方法でシリアル化および操作できます。内部形式の表現は、非常に効率的で使いやすいです。 GCメモリ使用率。
したがって、デフォルトのヒープ上モードで動作している場合でも、Tungstenは、JVMオブジェクトのメモリレイアウトとGCの動作時間の大きなオーバーヘッドを軽減します。そのモードのタングステンはdoes内部目的でオブジェクトをヒープに割り当て、割り当てメモリチャンクは巨大になる可能性がありますが、発生頻度ははるかに低く、GC生成の遷移に耐えますスムーズに。これにより、この内部構造をヒープ以外に移動することを検討する必要がほとんどなくなります。
このモードをオンまたはオフにした実験では、ランタイムの大幅な改善は見られませんでした。しかし、オフヒープモードをオンにすると、JVMプロセスの外部でメモリ割り当てを注意深く設計する必要があります。これは、JVMプロセス構成以外の追加のメモリチャンクを許可および計画する必要がある場合、YARN、Mesosなどのコンテナーマネージャー内にいくつかの問題を課す可能性があります。
また、オフヒープモードでは、TungstenはSun.misc.Unsafeを使用します。これは、配備シナリオでは望ましくない、または不可能でさえある可能性があります(Javaセキュリティマネージャの構成など)。
ジョシュローゼンが同様の質問をされているときに、時間タグが付いたビデオ会議 talk を共有しています。
spark.memory.offheap.sizeおよびspark.memory.offheap.enabledの対象は何ですか?spark.memory.offHeap.enabled:有効化/無効化するパラメーターヒープ外メモリの使用。 spark.memory.offHeap.size:(ネイティブメモリからの)オフヒープ割り当て用のメモリの総量(バイト単位)。ヒープメモリの使用量には影響しません。また、エグゼキュータの合計制限を超えないようにしてください。
ここでタングステンのオフヒープメモリの量を手動で指定する必要がありますか?はい。オフヒープメモリを有効にするほかに、sparkアプリケーションでオフヒープメモリを使用するには、サイズを手動で設定する必要があります。オフヒープメモリモデルには、ストレージメモリと実行メモリのみが含まれます。
以下の画像は、オフヒープメモリが動作しているときの抽象的な概念です。
•オフヒープメモリが有効な場合、エグゼキュータにはオンヒープメモリとオフヒープメモリの両方が存在します。
•エグゼキュータのストレージメモリ=ストレージメモリオンヒープ+ストレージメモリオフヒープ
•エグゼキュータの実行メモリ=実行メモリオンヒープ+実行メモリオフヒープ