Для создания индексов Geomesa создает несколько таблиц в HBase. У меня есть несколько вопросов:
Я планирую использовать комбинацию Geomesa с Hbase (при поддержке S3) для хранения своих геопространственных данных; размер данных может вырасти до терабайтов или петабайтов.
Я изучаю, насколько надежна Geomesa с точки зрения синхронизации между основной и индексной таблицами?
HBase-таблицы:
каталог1
catalog1_node_id_v4 (основная таблица)
catalog1_node_z2_geom_v5 (индексная таблица)
catalog1_node_z3_geom_lastUpdateTime_v6 (индексная таблица)
catalog1_node_attr_identifier_geom_lastUpdateTime_v8 (индексная таблица)
Схема Геомеса
geomesa-hbase описать-схему -c каталог1 -f узел
ИНФОРМАЦИЯ Описание атрибутов функции «узел»
ключ | Строка
пространство имен | Строка
идентификатор | Строка (индексированный атрибут)
идентификатор версии | Строка
идентификатор узла | Строка
широта | Целое число
долгота | Целое число
время последнего обновления | Дата (пространственно-временная индексация)
теги | Карта
геом | Точка (с пространственно-временной индексацией) (с пространственной индексацией)
Данные пользователя:
geomesa.index.dtg | последнее время обновления
геомеса.индексы | z3:6:3:geom:lastUpdateTime,z2:5:3:geom,id:4:3:,attr:8:3:identifier:geom:lastUpdateTime
GeoMesa ничего не делает для синхронизации индексов — обычно об этом следует позаботиться в вашем конвейере загрузки.
Если у вас есть надежный идентификатор функции, привязанный к данной входной функции, вы можете написать эту функцию несколько раз, не создавая дубликатов. Если во время загрузки происходит сбой пакета функций из-за временной проблемы, вы можете просто переписать их, чтобы убедиться, что индексы верны.
Для HBase, когда вы вызываете flush
или close
для автора функций, ожидающие изменения будут отправлены в кластер. После успешного завершения этого метода данные сохраняются в HBase. Если возникнет исключение, вам следует повторно попробовать неудавшиеся функции. При последующих сбоях HBase может потребоваться восстановить журналы упреждающей записи (WAL) в соответствии со стандартной операцией HBase.
Функция также может не быть записана из-за проверки (например, нулевая геометрия). В этом случае вы не захотите повторно использовать эту функцию, так как она никогда не будет успешно принята. Если вы используете платформу конвертера GeoMesa, вы можете использовать функции предварительная проверка, чтобы убедиться, что они будут правильно загружены.
Если у вас еще нет конвейера загрузки, вы можете проверить геомеса-нифи, который позволит вам преобразовывать и проверять входные данные, а также автоматически повторять сбои через потоки Nifi.
Спасибо Эмилио за объяснение. Какое исключение выдает Geomesa, когда ему не удается записать разные индексные таблицы? У вас есть какой-нибудь документ о списках исключений, которые выдает geomesa?
Если это ошибка проверки, обычно это будет IllegalArgumentException
. Если есть ошибка записи в HBase, это будет любое исключение, которое выдает клиент HBase.
Основываясь на вашем ответе, я предполагаю, что когда Geomesa попытается вставить данные в индексную таблицу (например, catalog1_node_z3_geom_lastUpdateTime_v6), и это не удастся, Geomesa выдаст исключение Hbase, даже если она успешно сохранила данные в другой индексированной таблице и основной таблице. Верно ли это понимание?
Да, именно поэтому вы должны повторить неудачную запись — это гарантирует возможную согласованность.
поэтому, если я обновлю одну запись в основной таблице, мне также придется вручную обновлять все индексные таблицы?
Нет, если вы используете API для обновления, он обновит все индексные таблицы за вас.
поэтому, если я обновлю одну запись в основной таблице, мне также придется вручную обновлять все индексные таблицы?