У меня есть Incomming поток искры данных, глотает сообщения, содержащие идентификаторы устройств:Спарка Streaming играя с Hbase
{deviceId=123 , deviceState: "turned off" }
Я хочу присоединиться к этой таблице информации об устройстве:
{deviceId=123 , deviceInfo: "The red refrigirator" }
Чтобы денормализованных такие как:
{deviceId=123 , deviceState: "turned off", deviceInfo: "The red refrigirator" }
Таблица device_info хранится в HBASE. Теперь вот в чем проблема: Время от времени таблица hbase «device-info» может быть изменена: в таблицу добавлено новое устройство, информация для существующего устройства изменена и т. Д. Эти изменения являются NOT в реальном времени, я могу терпеть несколько минут задержки с обновлениями.
Я вижу три подхода к проблеме:
Не с помощью искры присоединяется: Для каждой записи в DATASTREAM, выполнить один поиск Hbase для DEVICE_INFO по идентификатору.
- Это должно работать, но оно кажется крайне низким и потенциально неэффективным.
Создание RDD из HBase в начале программы, используя «newAPIHadoopRDD», а затем присоединиться к нему с каждым новым microbatch в потоке данных.
- Я мог бы пропустить любые обновления таблицы hbase. (Будет ли таблица HBase когда-нибудь перепроверен?)
Для каждого microbatch в Incomming Datastream (ds.foreachRdd): Создать RDD из HBase (newAPIHadoopRDD), а затем вызвать присоединиться.
- Это кажется опасным: создание так много новых RDD от hbase для каждого искрового потока может добавить слишком много латентности.
Какой подход, который я должен предпринять?
Я встречался с этой проблемой, вы поняли это? – tintin