TableMapReduceUtil.initTableMapperJob против GET за строку в заданиях mapreduce - PullRequest
0 голосов
/ 31 августа 2018

У меня есть таблица hbase (с именем Org) с несколькими строками и еще одна таблица (Org_Lookup), которая является своего рода поиском первой таблицы. Каждая строка в «Org_Lookup» имеет только один столбец со значением в виде набора ключей строки таблицы «Org». Сказав это сейчас, у меня есть файл hdfs с содержанием каждой строки в качестве ключа строки таблицы: Org_Lookup. Теперь я хочу удалить все соответствующие строки из таблицы «Org», заглянув в таблицу «Org_Lookup» для каждого ключа строки из файла HDFS. Любые предложения о том, как этого добиться оптимально

Думая о 2 подходах:

  1. Иметь задание MR с маппером чтения ключа строки из HDFS и выполнить GET для таблицы hbase: "Org_Lookup", прочитать значение столбца, используя набор ключей строки, указывающих на 1-ю таблицу, и передать его в набор редукторов, отвечающих за ядро. от "HFileOutputFormat2.configureIncrementalLoad" для массового удаления.

  2. Иметь работу MR с несколькими картографами. Один читает файл HDFS и выводит ключ строки в том виде, как он есть, в то время как другой читатель чтения из настройки таблицы «Org_lookup» использует «TableMapReduceUtil.initTableMapperJob». Теперь редуктор получит Iterable от обоих преобразователей и решит испустить ключи строк, прочитанные tableMapper, только если входящий ключ является частью вывода обоих преобразователей. Теперь у нас есть выходной файл HDFS со всеми rowKeys таблицы "Org". Теперь есть еще одно задание MR для массового удаления.

В 1-м случае я делаю GET-вызов Hbase для каждой строки из файла HDFS, где, как и во 2-м случае, я читаю все записи, используя «TableMapReduceUtil.initTableMapperJob». Что было бы лучше по производительности, если предположить, что входной файл HDFS имеет записи около 100K

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...