Spark入門から第5課に精通するまで:Sparkの持続化戦略&&Sparkのパーティション原理の剖析


1、背景+方法 
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