2016-04-13 22 views
0

Spark SQL için bir maliyet işlevi üzerinde çalışıyorum. TABLO TARAMA davranışını modelleme yaparken, READ ve WRITE'ın boru hattında veya sırayla gerçekleştirilip gerçekleştirilmediğini anlayamıyorum.Spark SQL - Sıralı veya boru hattında READ ve WRITE?

bize aşağıdaki SQL sorgusu düşünelim: NEREDE kolumna = ‘xyz’ FROM tablo1

SEÇ *;

Her görev:

  1. (yerel olarak veya uzaktaki bir düğümden ya) bir veri bloğunu okur
  2. kalan tuples
  3. diske yüklem
  4. Yazma tatmin olmayan dizilerini filtreleyin

(1), (2) ve (3) sıralı mı, yoksa boru hattı mı? Diğer bir deyişle, veri bloğu tamamen okunur (önce onu oluşturan tüm disk sayfaları) ve ardından filtrelenir ve daha sonra diske yeniden yazılır veya bu faaliyetler boru hattında mı gerçekleştirilir? (yani (n + 1) -tuple okunurken, n-tuple işlenebilir ve yazılabilir).

Şimdiden teşekkürler.

cevap

0

Biraz daha kazma işleminden sonra, Spark SQL'in "yanardağ tarzı çekme modeli" adını kullandığını öğrendim. Bu modele göre, boru hattında yürütülebilen ve tamamen dağıtılabilen basit bir tarama filtresi yazma sorgusu. Başka bir deyişle, bölümü okurken (HDFS bloğu), filtreleme okuma satırlarında yürütülebilir. Filtrelemeyi başlatmak için tüm bloğu okumaya gerek yok. Yazma buna göre yapılır.

0

Bir iş gönderdiğiniz her işte, ilk önce yaptığınız iş için DAG (Yönlendirilmiş asiklik grafik) oluşturur.

DAG oluşturduktan sonra, kıvılcım, hangi görevlerin paralel olarak çalışabileceğini, hangi görevin önceki adımın çıktısına bağlı olduğunu bilir ve böyle devam eder. Bu durumda, Spark, verilerinizde paralel olarak (bölüm içinde görebileceğiniz) verilerinizi okuyacaktır (her bölümde). Şimdi, gerekli filtrelemeyi kaydettiğinden, en az bir bölüm için filtrelemeyi bekleyecek, ardından kaydetmeye başlayacaktır.

+0

Yani, cevabınıza göre, tek bir görev verildiğinde, hesaplama süresi TimeRead + TimeProcessing + TimeWrite (sırayla, pipeline yok) ile tahmin edilebilir. TimeRead kendi bölümlerini okumak için harcanan zaman, onu filtrelemek için TimeProcessing ve yerel diskte sonuç yazmak için TimeWrite. Doğrumuyum? – loba76