Spark入門から第5課に精通するまで:Sparkの持続化戦略&&Sparkのパーティション原理の剖析
4300 ワード
1、背景+方法
2、StorageLevel:
Storage Level
Meaning
MEMORY_ONLY
Store RDD as deserialized Java objects in the JVM.If the RDD does not fit in memory,some partitions will not be cached and will be recomputed on the fly each time they're needed.This the default level.RDDをシーケンス化されていないjavaオブジェクトとしてjvmに格納します.RDDがメモリに保存されない場合、一部のパーティションは、メモリに保存されずに使用されるときに再計算されます.これはデフォルトのストレージ・レベルです.
MEMORY_AND_DISK
Store RDD as deserialized Java objects in the JVM.If the RDD does not fit in memory,store the partitions that don't fit on disk,and read them from there when they're needed.RDDをシーケンス化されていないjavaオブジェクトとしてjvmに格納します.RDDがメモリに保存されていない場合は、そのパーティションの一部がディスクに保存され、必要に応じてディスクに読み込まれます.
MEMORY_ONLY_SER (Java and Scala)
Store RDD as serialized Java objects (one byte array per partition). This is generally more space-efficient than deserialized objects, especially when using a fast serializer,but more CPU-intensive to read.RDDをjavaオブジェクトをシーケンス化してjvmに格納する.シーケンス化オブジェクトストレージは、特に高速シーケンス化プログラムを使用した後、逆シーケンス化オブジェクトストレージよりもスペースを節約しますが、cpuを消費します.
MEMORY_AND_DISK_SER (Java and Scala)
Similar to MEMORY_ONLY_SER,but spill partitions that don't fit in memory to disk instead of recomputing them on the fly each time they're needed. MEMORY_ONLY_SERは同様ですが、オーバーフローしたパーティションについては再計算ではなくディスクにバッファリングされます.
DISK_ONLY
Store the RDD partitions only on diskは、データのみをディスクに保存します..
MEMORY_ONLY_2, MEMORY_AND_DISK_2, etc.
Same as the levels above,but replicate each partition on on two cluster nodes.上記のレベルと同様ですが、各パーティション、すなわち各パーティションに2つのコピーが2つのクラスタノード間でコピーされます.
OFF_HEAP (experimental)
Similar to MEMORY_ONLY_SER, but store the data in off-heap memory.This requires off-heap memory to be enabledと.MEMORY_ONLY_SERは似ていますが、データをスタック外メモリに格納するため、スタック外メモリを可能に設定する必要があります.
注意:
sparkはまた、ユーザがpersist操作を実行していない場合でも、shuffle中にデータが失われたり、ノードがダウンタイムしたりしてRDDの再計算がパフォーマンスに影響を及ぼすことを防止するため、shuffle中の中間データの一部を自動的にキャッシュする.しかし、persistなどの操作を使用することをお勧めします.
3、選択方法
=====================================================================================================
Sparkパーティションの原理
1、
action , RDD , action , FS
, 。 cache persist RDD 。
: FS RDD RDD。
2、cache() && persist()
cache:
persist
StorageLevel MEMORY_ONLY
persist:
StorageLevel MEMORY_ONLY, StorageLevel
:
,
spark , LRU
job ,
unpersist() ,
, job 。
:
sparkssql cache transformation, 。
3、checkpoint()
:
1、 ,sc.SetCheckpointDir(“ ”)
2、 job checkpoint rdd
3、job rdd chekc ,
4、 job checkpoint RDD 。
:
, DISK_ONLY
job ( cache persist ), rdd ,
sparkstreaming
:
checkpoint() rdd cache, job
2、StorageLevel:
Storage Level
Meaning
MEMORY_ONLY
Store RDD as deserialized Java objects in the JVM.If the RDD does not fit in memory,some partitions will not be cached and will be recomputed on the fly each time they're needed.This the default level.RDDをシーケンス化されていないjavaオブジェクトとしてjvmに格納します.RDDがメモリに保存されない場合、一部のパーティションは、メモリに保存されずに使用されるときに再計算されます.これはデフォルトのストレージ・レベルです.
MEMORY_AND_DISK
Store RDD as deserialized Java objects in the JVM.If the RDD does not fit in memory,store the partitions that don't fit on disk,and read them from there when they're needed.RDDをシーケンス化されていないjavaオブジェクトとしてjvmに格納します.RDDがメモリに保存されていない場合は、そのパーティションの一部がディスクに保存され、必要に応じてディスクに読み込まれます.
MEMORY_ONLY_SER (Java and Scala)
Store RDD as serialized Java objects (one byte array per partition). This is generally more space-efficient than deserialized objects, especially when using a fast serializer,but more CPU-intensive to read.RDDをjavaオブジェクトをシーケンス化してjvmに格納する.シーケンス化オブジェクトストレージは、特に高速シーケンス化プログラムを使用した後、逆シーケンス化オブジェクトストレージよりもスペースを節約しますが、cpuを消費します.
MEMORY_AND_DISK_SER (Java and Scala)
Similar to MEMORY_ONLY_SER,but spill partitions that don't fit in memory to disk instead of recomputing them on the fly each time they're needed. MEMORY_ONLY_SERは同様ですが、オーバーフローしたパーティションについては再計算ではなくディスクにバッファリングされます.
DISK_ONLY
Store the RDD partitions only on diskは、データのみをディスクに保存します..
MEMORY_ONLY_2, MEMORY_AND_DISK_2, etc.
Same as the levels above,but replicate each partition on on two cluster nodes.上記のレベルと同様ですが、各パーティション、すなわち各パーティションに2つのコピーが2つのクラスタノード間でコピーされます.
OFF_HEAP (experimental)
Similar to MEMORY_ONLY_SER, but store the data in off-heap memory.This requires off-heap memory to be enabledと.MEMORY_ONLY_SERは似ていますが、データをスタック外メモリに格納するため、スタック外メモリを可能に設定する必要があります.
注意:
sparkはまた、ユーザがpersist操作を実行していない場合でも、shuffle中にデータが失われたり、ノードがダウンタイムしたりしてRDDの再計算がパフォーマンスに影響を及ぼすことを防止するため、shuffle中の中間データの一部を自動的にキャッシュする.しかし、persistなどの操作を使用することをお勧めします.
3、選択方法
A。 ok , 。
B。 , MEMORY_ONLY_SER , avro。
C。 , , 。
RDD RDD 。
D。 。 RDD , 。
=====================================================================================================
Sparkパーティションの原理
1、 :
。
2、
HDFS block , RDD 。
rdd , 。
task, =min{ ,2}
task :
:spark.default.parallelism
stage task 。
, Spark 。
local , local[n] n
mesos , 8
, max{ executor ,2}
3、 rdd
rdd.getNumPartitions
rdd.partitions.size
4、
,task ,
,task ,
:
CPU 2 3
executor
5、
scala>sc.textFile("hdfs://Linux001/data/a.txt", 20)
a.txt ,
:
coalesce :
1: 2: shuffle, false
coalsece , true
repartition :
1: 2: shuffle, true
coalsece , false
:
coalesce ,repartition