Преглед: HBase е мащабируема - и изключително сложна

Apache HBase се описва като "базата данни на Hadoop", което може да бъде малко объркващо, тъй като обикновено се разбира, че Hadoop се отнася до популярната рамка за обработка на MapReduce. Но Hadoop наистина е общо име за цяла екосистема от технологии, някои от които HBase използва, за да създаде разпределена, ориентирана към колони база данни, изградена на същите принципи като Bigtable на Google. HBase не използва възможностите на Hadoop MapReduce директно, въпреки че HBase може да се интегрира с Hadoop, за да служи като източник или дестинация на задания MapReduce.

Отличителните белези на HBase са изключителна мащабируемост, висока надеждност и гъвкавост на схемата, която получавате от база данни, ориентирана към колона. Докато таблиците и семействата колони трябва да бъдат дефинирани предварително, можете да добавяте нови колони в движение. HBase предлага също така силна последователност на ниво редове, вградена версия и "копроцесори", които осигуряват еквиваленти на тригери и съхранени процедури.

[Също на: Разкриване на големи данни: Касандра срещу HBase | Коя измамна база данни трябва да използвам? | Награди Bossie Awards 2013: Най-добрите инструменти за големи данни с отворен код | Разкриване на NoSQL: MongoDB срещу Couchbase | Получавайте обобщение на ключовите истории всеки ден в бюлетина Daily. ]

Проектиран да поддържа заявки за масивни набори от данни, HBase е оптимизиран за производителност на четене. За пише HBase се стреми да поддържа последователност. За разлика от „евентуално последователната“ Касандра, HBase не предлага различни настройки за ниво на съгласуваност (за да потвърди записването, след като го е написал един възел или го е написал кворум от възли). По този начин цената на силната последователност на HBase е, че записването може да бъде по-бавно.

HDFS - разпределената файлова система на Hadoop - е основата на екосистемата на Hadoop и това е файловата система, върху която се намира HBase. Проектиран да работи на стоков хардуер и да толерира откази на възел на член, HDFS работи най-добре за системи за групова обработка, които предпочитат поточен достъп до големи масиви от данни. Това изглежда го прави неподходящ за произволния достъп, който бихме очаквали в системи за бази данни като HBase. Но HBase предприема стъпки, за да компенсира иначе несъответстващото поведение на HDFS.

Zookeeper, друга технология на Hadoop (макар че вече не се използва от текущите версии на двигателя Hadoop MapReduce), е разпределена услуга за комуникация и координация. Zookeeper поддържа синхронизирана структура от данни в паметта, която може да бъде достъпна от множество клиенти. Структурата на данните е организирана като файлова система, въпреки че компонентите на структурата (znodes) могат да бъдат контейнери за данни, както и елементи в йерархично дърво. Представете си файлова система, чиито файлове също могат да бъдат директории.

HBase използва Zookeeper, за да координира клъстерни дейности и да наблюдава състоянието на възлите на членовете. Когато стартирате HBase клъстер, трябва да стартирате паралелно и Zookeeper. HBase ще работи и управлява Zookeeper по подразбиране, въпреки че можете да конфигурирате HBase да използва отделно управлявана настройка на Zookeeper. Можете дори да стартирате процесите на сървъра на Zookeeper на същия хардуер като другите процеси на HBase, но това не се препоръчва, особено за голям обем HBase клъстер.

Как действа HBase

По-точно, ред е колекция от двойки ключ / стойност, като ключът е идентификатор на колона, а стойността е съдържанието на клетката, която съществува в пресечната точка на определен ред и колона. Тъй като обаче HBase е база данни, ориентирана към колони, няма нужда два реда в таблица да имат еднакви колони. За да усложни нещата допълнително, данните се версират в HBase. Действителните координати на стойност (клетка) е кортежът {row key, column key, timestamp}. Освен това колоните могат да бъдат групирани в семейства колони, които дават на дизайнера на база данни допълнителен контрол върху характеристиките за достъп, тъй като всички колони в семейството на колони ще се съхраняват в непосредствена близост една до друга.

Операция за запис в HBase първо записва данните в дневник на фиксиране ("дневник за записване напред"), след това във вътрешна структура на паметта, наречена MemStore. Когато MemStore се запълни, той се изхвърля на диск като обект, наречен HFile. HFiles се съхраняват като последователност от блокове с данни, като към края на файла се добавя индекс. Друг индекс, съхраняван в паметта, ускорява търсенето на данни в HFiles.

HFiles са неизменни, след като бъдат написани. Ако ключът бъде изтрит, HBase записва специален маркер "надгробен камък", за да отбележи изтриването. Надгробните камъни се премахват (както и изтритите данни), когато HFiles периодично се уплътняват.

HBase се опитва да задоволи операциите за четене първо чрез MemStore. В противен случай HBase проверява още една структура в паметта, BlockStore, която е кеш за четене, предназначена да доставя често прочетени данни от паметта, а не от дисковите HFiles.

HBase разделя редове по региони, които се дефинират от набор от ключове на редове. Всеки регион в HBase клъстер се управлява от процес RegionServer. Обикновено има един процес RegionServer за HBase възел. С нарастването на количеството данни HBase разделя региони и мигрира свързаните данни към различни възли в клъстера за целите на балансирането.

Клъстерната архитектура на HBase не е напълно симетрична. Например, всеки клъстер трябва да има един, активен главен възел. Множество възли могат (и трябва) да бъдат определени като главни възли, но когато клъстерът се зареди, кандидат-майсторите се координират така, че само един да е действащият главен. Отговорността на капитана е да наблюдава регионални сървъри, да обработва отказ на регионален сървър и да координира разделянето на региони.

Ако главният възел се срине, клъстерът все още може да работи в режим на стабилно състояние - управление на заявките за четене и запис - но не може да изпълни нито една от операциите, които изискват координацията на главния възел (например ребалансиране). Ето защо е добра идея да посочите множество главни възли; ако и когато управляващият майстор не успее, той бързо ще бъде заменен.

Можете да стартирате HBase на върха на собствена файлова система за целите на разработката, но разположен клъстер HBase работи на HDFS, което - както споменахме по-рано - изглежда като лоша площадка за HBase. Въпреки ориентираната към стрийминг основна файлова система, HBase постига бързи произволни I / O. Той постига тази магия чрез комбинация от групово записване в паметта и постоянни данни на диск, използвайки структурирани от дневника дървета за сливане. В резултат на това всички произволни записи се извършват в паметта и когато данните се изхвърлят на диск, данните първо се сортират, след което се записват последователно с придружаващ индекс. Случайните четения се опитват първо в паметта, както бе споменато по-горе. Ако заявените данни не са в паметта, последващото търсене на диска е бързо, тъй като данните са сортирани и индексирани.

Работа с HBase

Въпреки че HBase не поддържа транзакции, нито евентуално е последователен; по-скоро HBase поддържа силна последователност, поне на нивото на един ред. HBase няма усещане за типове данни; всичко се съхранява като масив от байтове. Въпреки това, HBase дефинира специален тип данни „брояч“, който осигурява операция за атомно нарастване - полезна например за преброяване на изгледи на уеб страница. Можете да увеличите произволен брой броячи в рамките на един ред чрез едно обаждане и без да се налага да заключвате реда. Имайте предвид, че броячите ще бъдат синхронизирани за операции на запис (множество записи винаги ще изпълняват последователни стъпки), но не непременно за операции на четене.

Черупката HBase всъщност е модифицирана, интерактивна обвивка на Ruby, работеща в JRuby, като Ruby се изпълнява в Java VM. Всичко, което можете да направите в интерактивната обвивка на Ruby, можете да направите в обвивката HBase, което означава, че обвивката HBase може да бъде мощна среда за скриптове.

Последната версия на черупката предоставя нещо като обектно-ориентиран интерфейс за манипулиране на HBase таблици. Можете например да присвоите таблица на променлива JRuby, след което да издадете метод за обекта на таблицата, използвайки стандартната точкова нотация. Например, ако сте дефинирали таблица и сте я присвоили на myTableпроменливата, можете да запишете (поставите) данни в таблицата с нещо като:

            myTable.put '', '', ''

Това би записало стойността в реда в колоната .

Има някои GUI за управление на трети страни за HBase, като hbase-explorer. Самата HBase включва някои вградени уеб-базирани инструменти за наблюдение. Главният възел HBase обслужва уеб интерфейс на порт 60010. Прегледайте го и ще намерите информация за самия главен възел, включително начално време, текущия порт на Zookeeper, списък на регионални сървъри, средния брой региони на регионални сървъри , и така нататък. Осигурен е и списък с таблици. Кликнете върху таблица и ще ви бъде показана информация като регионалните сървъри, които хостват компонентите на таблицата. Тази страница също така предоставя контроли за иницииране на уплътняване на таблицата или разделяне на регионите на таблицата.

Освен това всеки възел на сървър на регион изпълнява уеб интерфейс за наблюдение на порт 60030. Тук ще намерите много показатели: латентности за четене и запис, например, разбити на различни процентили. Можете също да видите информация за регионите, управлявани от този регионален сървър, и можете да генерирате дъмп на активните нишки на сървъра.

Справочното ръководство за HBase включва ръководство за начало и често задавани въпроси. Това е документ на живо, така че към всеки запис ще намерите коментари на потребителската общност. Уебсайтът на HBase също предоставя връзки към HBase Java API, както и към видеоклипове и източници на информация за HBase извън сайта. Повече информация можете да намерите в уикиса HBase. Макар и добре, документацията за HBase не е съвсем равна на документацията, която съм виждал на други сайтове с продукти на базата данни, като Cassandra и MongoDB. Независимо от това, в интернет има много материали, а общността на HBase е достатъчно голяма и активна, така че всички въпроси, свързани с HBase, няма да останат без отговор за дълго.

Едно от по-интересните последни допълнения на HBase е поддръжката на "копроцесори" - потребителски код, който се изпълнява като част от процесите на HBase RegionServer и Master. Съществуват приблизително два вида съпроцесори: наблюдатели и крайни точки. Наблюдателят е написан от потребителя Java клас, който дефинира методи, които да бъдат извикани, когато възникнат определени HBase събития. Представете си наблюдател като аналог на HBase на спусъка на RDBMS. Един наблюдател, наречена RegionObserver, да свържете определени точки в потока на контрол на данни манипулация операции, като get, putи delete.

Копроцесорът за крайна точка HBase работи много като съхранена процедура. Когато е зареден, той може да бъде извикан например от наблюдател и по този начин позволява динамично добавяне на нови функции към HBase. Има различни начини за зареждане на съпроцесори в клъстер HBase, включително чрез черупката HBase.

Конфигурирането на голям HBase клъстер може да бъде трудно. Клъстер HBase включва главни възли, процеси RegionServer, процеси HDFS и цял клъстер Zookeeper, работещ рамо до рамо. Ясно е, че отстраняването на неизправности може да бъде сложно начинание, тъй като има многобройни подвижни части, които трябва да бъдат изследвани.

HBase е до голяма степен ориентирана към разработчиците база данни. Неговото онлайн справочно ръководство е силно свързано с документите на Java API на HBase. Ако искате да разберете ролята, изиграна от конкретен обект на HBase - да речем, филтър - бъдете готови да бъдете предадени в документацията на Java API за класа Filter за пълно обяснение.

Като се има предвид, че достъпът е по ред и че редовете се индексират с ключове от редове, следва, че внимателното проектиране на структурата на ключовите редове е от решаващо значение за доброто изпълнение. По ирония на съдбата, програмистите в добрите стари времена на бази данни на ISAM (Индексиран метод на последователен достъп) знаеха това добре: Достъпът до базата данни се отнасяше само до компонентите - и подреждането на тези компоненти - в индексите на съставни ключове.

HBase използва колекция от тествани в битки технологии от света на Hadoop и си струва да се обмисли при изграждането на голяма, мащабируема, високодостъпна, разпределена база данни, особено за тези приложения, при които е важна силната последователност.

Apache HBase 0.94 с един поглед

 
Професионалисти
  • Вградена версия
  • Силна последователност на ниво запис
  • Предоставя тригери, подобни на RDBMS и съхранени процедури чрез съпроцесори
  • Построен върху изпитани и истински технологии на Hadoop
  • Общност за активно развитие
Минуси
  • Липсва приятелски, подобен на SQL език за заявки
  • Много движещи се части
  • Настройката извън клъстера за развитие на един възел може да бъде трудна
Платформи Изисква Java SE версия 6; може да се изпълнява на Windows с помощта на Cygwin
Разходи Безплатен, с отворен код под лиценза Apache версия 2.0