При выборе набора записей из таблицы данных большого объема данных для каждой записи необходимо создать уникальный ключ. В последовательном режиме работы легко создать уникальный идентификатор, вызывая soem, например max (id). Поскольку улей запускает задачу параллельно, как мы можем генерировать уникальный ключ как часть запроса выбора, не ставя под угрозу производительность hadoop. Действительно ли это проблема с уменьшением карты или нам нужно пойти на последовательный подход к ее решению.Уникальное генерирование ключей в Hive/Hadoop
ответ
Если по какой-то причине вы не хотите иметь дело с UUID, то это решение (основанное на числовых значениях) не требует, чтобы ваши параллельные блоки «разговаривали» друг с другом или синхронизировали вообще. Таким образом, он очень эффективен, но не гарантирует, что ваши целые ключи будут непрерывными.
Если у вас есть сказать, N параллельных блоков исполнения, и вы знаете, ваш N, и каждый блок присваивается идентификатор от 0 до N - 1, то вы можете просто создать уникальное целое во всех единицах
Unit #0: 0, N, 2N, 3N, ...
Unit #1: 1, N+1, 2N+1, 3N+1, ...
...
Unit #N-1: N-1, N+(N-1), 2N+(N-1), 3N+(N-1), ...
в зависимости от того, где вам необходимо сгенерировать ключи (картографа или редуктора) вы можете получить N от конфигурации Hadoop:
Mapper: mapred.map.tasks
Reduce: mapred.reduce.tasks
... и идентификатор вашего устройства: в Java, это:
context.getTaskAttemptID().getTaskID().getId()
Не уверен в отношении улья, но это также должно быть возможно.
SELECT T.*, ROW_NUMBER() OVER (ORDER BY T.C1) AS SEQ_NBR
FROM TABLE T
Здесь С1 является любой числовой столбец в T. Это будет генерировать уникальный номер для каждой записи при выборе из таблицы T, начиная с 1. Если это один раз, а затем активность раствор хорошо.
Если вам нужно повторять этот процесс каждый день и вставлять эти данные в таблицу T2 и генерировать уникальный идентификатор, вы можете попробовать ниже.
SELECT T.*, ROW_NUMBER() OVER (ORDER BY T.C1)+ SEQ_T2 AS SEQ_NBR
FROM TABLE T, (SELECT MAX(SEQ) AS SEQ_T2 FROM TABLE T2)
Надеюсь, это поможет!
Используйте UUID вместо цифр. Он работает по-настоящему распределенным способом.
select reflect("java.util.UUID", "randomUUID")
- 1. Уникальное генерирование пары ключей на Android
- 2. уникальное генерирование случайных чисел
- 3. Уникальное генерирование идентификатора
- 4. Эффективное уникальное генерирование ключей для записей базы данных
- 5. Шесть цифр Уникальное генерирование кода
- 6. Уникальное генерирование идентификатора на облаке
- 7. Генерирование ключей в открытом ключе Криптография
- 8. Джанго уникальное сочетание внешних ключей
- 9. Уникальное ограничение внешних ключей в модели Sequelize
- 10. Уникальное генерирование случайных чисел с таблицей базы данных
- 11. Уникальное генерирование HashCode для уникального объекта с использованием C#
- 12. Генерирование и использование ключей сущностей в пределах ndb.Transaction
- 13. C: Генерирование хеш-ключей для больших наборов данных?
- 14. django: уникальное имя для объекта в пределах набора внешних ключей
- 15. не Генерирование ключей для EVP, основанный на движке
- 16. генерирование комбинаций в Matlab
- 17. Генерирование события в MFC
- 18. Двойное генерирование в Java
- 19. Генерирование RValue
- 20. крошечное случайное генерирование ID
- 21. Фильтра (уникальное) соответствие значения
- 22. MySQL обновляет ограничение, уникальное
- 23. Автоматическое генерирование значения столбца относительно другого столбца
- 24. генерирование случайных значений в iPhone
- 25. Идиоматическое генерирование HTML в PHP
- 26. генерирование новых переменных в c
- 27. OpenGL: Генерирование эллипса в коде
- 28. генерирование случайных чисел в php
- 29. генерирование случайных чисел в verilog
- 30. Динамическое генерирование JSX в реакторе
Это лучший комментарий о Hadoop генерировать уникальный идентификатор, который я прочитал. – Tuxman