HBase
 sql >> Baza danych >  >> NoSQL >> HBase

HBase:5 wskazówek dotyczących uruchamiania na EC2 o małej ilości pamięci

Grając na EC2, często nie możesz wygrać, jeśli chodzi o typy instancji. Jednym z bardziej opłacalnych dostępnych typów jest c1.xlarge. Ma wystarczająco dużo procesora, aby obsłużyć kompaktowanie, przyzwoitą ilość dysku i wysoką sieć we/wy. Odkryliśmy jednak, że stosunkowo niska pamięć 7 GB w c1.xlarge często prowadzi do problemów ze stabilnością w wysoce współbieżnych klastrach HBase. Chociaż istnieją inne droższe opcje, ten samouczek HBase pomoże Ci w pełni wykorzystać możliwości serwera c1.xlarge RegionServers.

1. Zmniejsz liczbę regionów na serwer RegionServer

Idealnie powinieneś mieć mniej niż 100 regionów na RegionServer . Magazyn pamięci jest podzielony do użytku przez wszystkie aktywne regiony, a każdy region dodaje (domyślnie) 2 MB pamięci dla MSLAB. Zmniejszenie tej liczby pomoże sprawnie działać, nie tylko z punktu widzenia pamięci.

2. Kradnij pamięć z innych usług

Zdecydowanie nie powinieneś uruchamiać TaskTrackera z Twoim RegionServer na tych typach instancji, ale najprawdopodobniej używasz lokalnego DataNode. Typowa konfiguracja wymaga 1 GB pamięci dla DataNode, ale odkryliśmy, że w wielu przypadkach nie potrzebujesz tak dużo. Zweryfikuj swoje metryki przed wdrożeniem, ale byliśmy całkowicie bezpieczni zmniejszając stertę DataNode do 400 MB . Ten ładny kawałek 624 MB pomoże HBase osiągnąć trochę więcej.

3. Dostrój lub wyłącz MSLAB

Jeśli po kradzieży pamięci i wycięciu regionów nadal masz problemy, możesz pójść o krok dalej. Jak wspomniałem, funkcja MSLAB domyślnie dodaje 2 MB narzutu sterty dla każdego regionu. Możesz zmniejszyć ten bufor z hbase.hregion.memstore.mslab.chunksize . Im niżej schodzisz, tym mniej jest to skuteczne, ale także mniej pamięci. Wyłącz to całkowicie za pomocą hbase.hregion.memstore.mslab.enabled .

4. Bądź agresywny, jeśli chodzi o buforowanie i przetwarzanie partii

Buforowanie (Scan#setCaching(int) ) i grupowanie (Scan#setBatch(int) ) doskonale nadają się do ograniczania wpływu opóźnień sieciowych w przypadku dużych skanowań. Niestety wymagają również większej ilości pamięci zarówno po stronie klienta, jak i serwera. Pamiętaj o kompromisie w zakresie szybkości, ale ciesz się nieco większą stabilnością, zmniejszając je , tak blisko wartości 1, jak to konieczne.

RegionServer musi również mieć wystarczającą ilość pamięci, aby obsłużyć wszystkie współbieżne zapisy. Jeśli mocno grupujesz swoje zapisy lub wysyłasz kilka bardzo dużych wartości komórek, prawdopodobnie napotkasz OutOfMemoryExceptions. Tutaj również zmniejsz grupowanie lub znajdź sposób na zmniejszenie rozmiaru wartości komórek.

5. Kontroluj obciążenie z Hadoop

Jeśli uruchamiasz zadania hadoop na swoich danych HBase, w zasadzie wykonujesz wiele dużych skanów. W zadaniu HBase MapReduce każdy region staje się maperem. Jeśli masz więcej niż 1 region na RegionServer, prawdopodobnie w pewnym momencie będziesz mieć kilku maperów skanujących ten sam RegionServer jednocześnie. Każde z tych skanów zajmuje pamięć, dysk i zasoby procesora, a wielokrotne narastanie może powodować pewien ból.

Obniżanie hbase.regionserver.handler.count pomoże ograniczyć liczbę aktywnych połączeń zajmujących pamięć, ale nadal możesz mieć problem, jeśli wszystkie programy obsługi obsługują duże skanowanie całego regionu. Korzystając z naszego rozszerzenia TableInputFormat, możesz łatwo kontrolować, ile współbieżnych maperów działa na jednym serwerze RegionServer , zapewniając bardziej przewidywalne wykorzystanie pamięci.

Jeśli piszesz do HBase z reduktora, będziesz chciał również tam kontrolować partycjonowanie. Można to łatwo zaimplementować za pomocą Partitioner Hadoop interfejs, z HBaseAdmin HBase interfejs zapewniający mapowanie regionu do serwera RegionServer.

Uruchamianie HBase przy małej ilości pamięci jest trudne, ale nie niemożliwe

Mając te wskazówki, powinieneś być na dobrej drodze do przetrwania operacji w środowisku o małej ilości pamięci. Walka o każdy megabajt pamięci w dobie niezwykle taniej i szybkiej pamięci RAM może być frustrująca. Ale postępuj zgodnie z tymi wskazówkami, a Twój dyrektor finansowy podziękuje Ci za maksymalne wykorzystanie tego opłacalnego typu instancji. Dla tych, którzy mają nieco większą swobodę finansową, przeanalizujemy wpływ nowych typów instancji I2 firmy Amazon w przyszłym poście . Więc bądźcie czujni!

Ten artykuł pierwotnie ukazał się na dev.hubspot.com


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. więc HBase jest uszkodzony

  2. Co to jest para klucz-wartość MapReduce w usłudze Hadoop?

  3. Wprowadzenie do federacji i architektury HDFS

  4. Instrukcje:włączanie uwierzytelniania i autoryzacji użytkownika w Apache HBase

  5. Budowanie skalowalnego procesu przy użyciu NiFi, Kafka i HBase na CDP