2012-04-03 16 views
5

Używam sterownika Hive JDBC, aby wykonać kwerendę sql jak mój sklep danych HDFS. Próbowałem użyć c3p0 do obsługi puli połączeń. Nie jestem pewien, czy jest to właściwe podejście, ponieważ zapytanie Hive może trwać dość długo, co czasami oznacza, że ​​połączenie będzie utrzymywane przez dość długi czas, a nie zostanie zwolnione z powrotem do puli, staram się myśleć o odpowiednim numerze ustawienia dla maksymalnej liczby połączeń również w konfiguracji c3p0.jaka jest najlepsza praktyka przy łączeniu Hive Połączenia JDBC

Czy istnieje dobra praktyka łączenia puli połączenia jdbc? c3p0? DBCP?

Co z MAX_POOL_SIZE? Czy powinno być większe niż normalne ustawienie dla RDB?

Odpowiedz

4

Świetnie, więc pytanie w wątku, o którym wspomniałeś, zostało zadane przeze mnie dawno temu :) Byłoby interesujące zobaczyć, jak go użyć w twoim przypadku użycia.

Ale powiem ci, że Hive uruchamia zadania Hadoop, gdy jest to wymagane, w zależności od zapytania. Tak więc, jeśli chcesz wykonać wiele zapytań, co moim zdaniem jest tym, co chcesz tutaj zrobić, musisz użyć programu do planowania zadań, który może jednocześnie wykonywać wiele zadań. Hadoop domyślnie używa harmonogramu pierwszego uruchomienia FIFO (FIFO), odbierając zadania z kolejki roboczej. Dlatego chciałbyś przejść do Harmonogramu targów lub Harmonogramu mocy.

Podstawową ideą programu do udostępniania papierów wartościowych było przypisywanie zasobów do zadań, tak aby średnio z upływem czasu każde zadanie miało równy udział w dostępnych zasobach.

Program do planowania wydajności dzieli niektóre zasady programu targów, ale ma również wyraźne różnice. Po pierwsze, zdefiniowano planowanie zdolności dla dużych klastrów, które mogą mieć wielu niezależnych klientów i aplikacje docelowe. W planowaniu wydajności zamiast puli tworzonych jest kilka kolejek, z których każdy ma konfigurowalną liczbę map i zmniejsza liczbę miejsc. Każdej kolejce przypisuje się także gwarantowaną pojemność (całkowita pojemność klastra jest sumą pojemności każdej kolejki). Po drugie, możliwość priorytetyzacji zadań w kolejce. Wreszcie, jest obecność ścisłej kontroli dostępu w kolejkach.

+0

Dzięki za informacje. Nadal jestem trochę zdezorientowany, jeśli łączę 10 połączeń JDBC do Hive, czy to oznacza, że ​​równolegle otworzyłem 10 zadań ula? Co się z nim dzieje, gdy praca zostanie wykonana? to połączenie jdbc jest zwolnione z powrotem do puli? Następnym razem, gdy nowe zapytanie podejmie połączenie jdbc i nowe zadanie ula? jaką korzyść zyskuję dzięki temu, że używa się tutaj łączenia połączeń jdbc, a jedynie tworzenie/usuwanie połączeń jdbc? – Shengjie

+0

Do tej pory zrozumiałem, że można otworzyć wiele połączeń z MySql lub jakimkolwiek DBMS używanym przez Hive jako metastore, ale w ostatecznym rozrachunku, po wystrzeleniu złożonych zapytań, hive z kolei utworzą zadania MapReduce w celu pobrania wynik z magazynu Hive, który w twoim przypadku jest w HDFS. –

+0

Kontynuacja ... Łączenie Użyłem czegoś w rodzaju wątków. Zarezerwowałem na przykład 10 połączeń wątków, aby uleczyć serwer, w zależności od pojemności mojego klastra. Zapytanie mówi: "wybierz nazwę od pracownika" zużyje jeden wątek. Kolejne takie zapytanie, powiedzmy, zajmuje jeszcze jeden wątek i tak dalej. Kiedy zapytanie się zakończy, zwrócę (checkin) wątek, powiązany z tym zapytaniem, z powrotem do puli wątków. –

Powiązane problemy