2014-10-30 43 views
15

Bir anahtar-değer veritabanını Spark'a entegre etmeye çalışıyorum ve bazı sorularım var. Ben bir kıvılcım yeni başlayan, çok şey okudum ve bazı örnekleri çalıştırmak ama hiçbir şey de karmaşık.Spark: InputFormat'ı singleton olarak çalıştır

Senaryo: Ben bir veritabanında gelen iletileri saklamak için küçük bir HDF'ler küme kullanıyorum

. Kümenin 5 düğümü vardır ve veriler 5 bölüme ayrılmıştır. Her bir bölümü, ayrı bir veritabanı dosyasında depolanır. Her bir düğüm bu nedenle 'un kendi veri bölümlerini işleyebilir.

sorun: Teknik nedenlerden dolayı C'de uygulanan

veritabanı yazılımı arayüz JNI dayanır, veri tabanının kendisi, veritabanı yazılımı her seferinde sadece bir etkin bağlantı korumak . Veritabanına 'un bağlı olduğu tek bir JVM işlemi olabilir.

Bu sınırlama nedeniyle, veritabanından okuma ve veritabanına yazma işlemi, aynı JVM işlemi boyunca numaralı sayfaya gitmelidir.

(Arkaplan bilgi:.. Veritabanı Bu dosya, dayanıyor ve sadece bir işlem bir defada açabilirsiniz Ben ayrı işlemde çalışmasına izin verebilir sürecine gömülür, ama bu yavaş olur .. çünkü IPC yükü başvurum birçok tam tablo taramaları gerçekleştirecek Ek yazıyor batched ve değil zaman açısından kritik olan edilecek)

Çözüm.

Ben birkaç fikir var benim zihin nasıl solv Bu, ama Spark ile iyi çalışırlar bilmiyorum. Sadece düğüm başına benim tescilli InputFormat bir örneği olması

  • Belki sihirli Spark yapılandırmak mümkündür.

  • GirişFormat'ım ilk kez kullanılıyorsa, veritabanı bağlantısı oluşturacak olan ayrı bir iş parçacığı başlar. Bu iş parçacığı bir daemon olarak devam edecek ve JVM yaşadığı sürece yaşayacaktır. Düğüm başına yalnızca bir JVM varsa, bu yalnızca çalışır. Spark, aynı düğümde birden fazla JVM başlatırsa, her biri kendi veritabanı iş parçacığını başlatır, bu da çalışmaz.

  • Veritabanı bağlantımı her düğüm için ayrı bir JVM işlemine taşıyın ve benim InputFormat daha sonra bu işleme bağlanmak için IPC'yi kullanır. Dediğim gibi, bundan kaçınmak istiyorum.

  • Veya başka bir fikrin var mı?

Favori çözümüm # 1 olur, yakından takip eder # 2.

Her türlü yorum ve cevap için teşekkürler!

+1

bunu parallelize edebilirsiniz mümkün değil. – cruppstahl

cevap

0

Kuyruğa alma (arabellek) ve ardından dequeue kullanarak kıvılcım akışı kullanmayı düşündünüz ve çıkış formatınızı yazmak için kullanın. DB verileri işler kıvılcım-sürücünün RAM belleğe sığıyorsa