Мой запрос улья зависает, и я не знаю почему (с использованием hadoop 0.20.1, улья 0.9).
Запрос:
SELECT
a.field1 FROM table_1 a
LEFT SEMI JOIN
(SELECT DISTINCT(usrId) FROM table_2 b
WHERE soemthing=true ORDER BY rand() limit 1000) random_user_ids
WHERE a.usrId=random_user_ids.usrId
EXPLAIN возвращает мне:
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1
Stage-3 depends on stages: Stage-2
Stage-0 is a root stage
Набор данных
- ~ 200M записей внутри таблицы
- отношение table_1.usrId к table_1 должно быть примерно 1:40, т.е. 1000 * 40 = 40000 должно быть возвращено в приведенном выше запросе
Наблюдения:
- Задание зависает на последнем этапе 3 на уровне 33% (сокращение> сортировка), где происходит соединение (результат соединения составляет около 40000)
- Помимо того, что это медленно, почему сокращение> сортировка вообще является частью этапа-3? Он должен только присоединяться к вещам, а не ЗАКАЗАТЬ ничего
- размер редуктора всего 1 (из-за сортировки?), что почти всегда плохо, поскольку он не масштабируется.
Если вам нужен дополнительный ввод (например, более подробная информация EXPLAIN, дополнительная информация о кластере), просто сообщите.
Спасибо!