2014-10-30 8 views
15

Próbuję zintegrować bazę danych klucz-wartość ze Sparkiem i mam kilka pytań. Jestem początkującym Sparkiem, dużo czytałem i przeprowadzam kilka sampli, ale nic nie jest tak złożone, jak .Spark: uruchom InputFormat jako singleton

Scenariusz:

używam mały klaster HDFS do przechowywania wiadomości przychodzących w bazie danych. Klaster ma 5 węzłów, a dane są podzielone na 5 partycji. Każda partycja jest przechowywana w oddzielnym pliku bazy danych. Każdy węzeł może przetworzyć swoją własną partycję danych.

Problem:

interfejs do oprogramowania bazy danych jest oparta na JNI, sama baza danych jest realizowane w C. Ze względów technicznych, oprogramowanie bazy danych może utrzymać aktywne tylko jedno połączenie naraz . Może istnieć tylko jeden proces JVM, który jest podłączony do bazy danych.

Z powodu tego ograniczenia odczytywanie i zapisywanie w bazie danych musi przebiegać pod numerem przy użyciu tego samego procesu JVM.

(Tło info: baza danych jest osadzony w procesie To plik oparty i tylko jeden proces może otworzyć go w czasie I mógłby uruchomić ją w oddzielnym procesie , ale że będzie wolniejszy.. . ze względu na IPC napowietrznych Moja aplikacja będzie wykonywać wiele pełnych skanów stołowy zapisy będą grupowane i są nie czas krytyczny)

roztworze..

mam kilka pomysłów w moim Umysł, jak rozwiązywać e, ale nie wiem, czy działają one dobrze ze Spark.

  • Może to możliwe, aby w magiczny sposób skonfigurować Spark mieć tylko jedną instancję moim zastrzeżonych InputFormat na węźle.

  • Jeśli mój InputFormat jest używany po raz pierwszy, uruchamia oddzielny wątek , który utworzy połączenie z bazą danych. Wątek ten będzie kontynuowany jako demon i będzie istnieć tak długo, jak będzie istniała wirtualna maszyna wirtualna. To zadziała tylko , jeśli jest tylko jedna JVM na węzeł. Jeśli program Spark uruchomi wiele maszyn JVM w tym samym węźle, każdy z nich rozpocznie własny wątek bazy danych, który nie będzie działał w trybie .

  • Przenieś moje połączenie z bazą danych do oddzielnego procesu JVM na węzeł, a mój InputFormat używa następnie IPC do połączenia z tym procesem. Jak już powiedziałem, chciałbym tego uniknąć.

  • A może masz inny, lepszy pomysł?

Moje ulubione rozwiązanie to # 1, a zaraz po nim # 2.

Dzięki za komentarz i odpowiedź!

+1

poszedłem na # 3, ponieważ # 1 i # 2 wydaje się nie być możliwe. – cruppstahl

Odpowiedz

0

Czy myślałeś o staniu w kolejce (bufor), a następnie korzystasz z streamingu iskry, aby usunąć kolejkę i użyć formatu wyjściowego do napisania.

Powiązane problemy