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ź!
poszedłem na # 3, ponieważ # 1 i # 2 wydaje się nie być możliwe. – cruppstahl