Справка по запросам Hbase/Hadoop
Вопрос
Я работаю над проектом с другом, который будет использовать Hbase для хранения своих данных.Есть ли хорошие примеры запросов?Кажется, я пишу тонну Java-кода для перебора списков RowResult, хотя в мире SQL я мог написать простой запрос.Я что-то пропустил?Или в Hbase чего-то не хватает?
Решение
Я думаю, что вы, как и многие из нас, совершаете ошибку, рассматривая bigtable и HBase как еще одну СУБД, хотя на самом деле это столбцово-ориентированная модель хранения, предназначенная для эффективного хранения и извлечения больших наборов разреженных данных.В идеале это означает сохранение связей «многие к одному», например, в одной строке.Ваши запросы должны возвращать очень мало строк, но содержать (потенциально) много точек данных.
Возможно, если бы вы рассказали нам больше о том, что вы пытаетесь сохранить, мы могли бы помочь вам спроектировать вашу схему, соответствующую способу ведения дел bigtable/HBase.
Чтобы получить хорошее представление о том, чем HBase отличается от «традиционной» СУБД, прочтите эту замечательную статью: Согласование импеданса:Когда использовать HBase Брайан Даксбери.
Другие советы
Если вы хотите получить доступ к HBase с помощью языка запросов и драйвера JDBC, это возможно.Пол Эмброуз выпустил библиотеку HBQL на сайте hbql.com, которая поможет вам в этом.Я использовал его в нескольких проектах, и он работает хорошо.У вас, очевидно, не будет доступа к полному SQL, но это сделает его немного проще в использовании.
Я посмотрел на Hadoop и Hbase, и как Шон сказал, что вскоре я понял, что это не дало мне того, что я действительно хотел, а именно кластерной базы данных, совместимой с JDBC.
Я думаю, вам было бы лучше использовать что-то вроде C-JDBC или HA-JDBC что больше похоже на то, чего я добивался.(Лично я не продвинулся ни в одном из них, кроме чтения документации, поэтому не могу сказать, какой из них хорош, если таковой имеется.)
Я бы порекомендовал взглянуть на Apache Улей проект, похожий на HBase (в том смысле, что это распределенная база данных), реализующий язык, похожий на SQL.
Спасибо за ответ, Шон, и извините за поздний ответ.Я часто допускаю ошибку, рассматривая HBase как СУБД.Так часто из-за этого мне приходилось переписывать код!Так трудно разучиться.
Сейчас у нас всего 4 стола.Что в данном случае очень мало, учитывая мое прошлое.Я просто надеялся использовать некоторый Функциональность РСУБД в основном придерживается модели хранения, ориентированной на столбцы.
Рад слышать, что вы, ребята, используете HBase!Я не эксперт ни в каком смысле, но вот пара вещей, которые могут помочь.
HBase основан на BigTable или вдохновлен им, который AppEngine предоставляет как API своей базы данных, поэтому просматриваю их документы должно очень помочь, если вы работаете над веб-приложением.
Если вы не работаете над веб-приложением, итерация, которую вы описываете, обычно выполняется с помощью карты/сокращения (не выдавайте ненужные значения).Пропуск значений с помощью итераторов практически гарантирует, что в вашем приложении будут узкие места с наборами данных размера HBase.Если вы обнаружите, что все еще думаете на SQL, ознакомьтесь с учебным пособием по свиньям и ульям Cloudera.
По сути, вся ментальная разница между HBase и SQL (для не-веб-приложений) сводится к следующему: «Отправляйте вычисления в данные, а не отправляйте данные в вычисления» — если вы помните об этом во время кодирования, у меня всё получится :-)
С уважением,
Дэйвид