WRT кластер из 3 узлов, состоящий из c3.2x больших экземпляров.изменить запрос куста, чтобы заставить более одного редуктора
У меня есть две таблицы. Таблица U имеет около 65 миллионов записей и содержит среди других полей широты и долготы. Таблица L содержит около 1 миллиона записей , а также содержит широту и долготу.
U хранится как таблица ORC.
Задача заключается в определении того, сколько записей U попадают в радиусе 10 миль мест в L.
select l.id, count(u.id) from U u, L l where 3960 *
acos(cos(radians(l.lat)) * cos(radians(u.lat)) * cos(radians(l.long) -
radians(u.long)) + sin(radians(l.lat)) * sin(radians(u.lat))) < 10.0
group by l.id;
Бит 3960 * acos(cos(radians(l.lat)) * cos(radians(u.lat)) * cos(radians(l.long) - radians(u.long)) + sin(radians(l.lat)) * sin(radians(u.lat))) < 10.0
просто расстояние между Шир/ пар должно быть меньше, чем 10 миль.
Задача: Запрос, кажется, требуется навсегда. Пока фаза завершается относительно быстро, фаза снижения застревает на некотором фиксированном проценте (80% иш)
Я заметил это в выходных сообщениях, которые выделяет Hive. Количество уменьшить задачи, определенные во время компиляции: 1
Я попытался увеличения количества восстановителей, установив mapred.reduce.tasks до 7, но это всегда заканчивается как 1. Я не был успешным в увеличивая количество редукторов.
This answer, кажется, предполагает, что, возможно, если я напишу свой запрос по-другому, то могу заставить более 1 редуктора. Но я еще не смог этого сделать.
Расчет времени исполнения: Для одного места в L требуется около 60 секунд, чтобы получить ответ. По этому счету он должен занять 60 миллионов секунд, что составляет около 700 дней! Стоит ли так много времени? Даже для Hadoop.
Я также попытался положить addional ограничения как ограничивающая лат, длиной в 10 миль на 10 миль квадратика с расположением в L в центре коробки, но время, потраченное сейчас 40 секунд на 1 место который не является большим улучшением.
Вопросы:
1) Как я могу заставить большее количество переходников? 2) Есть ли лучший (с точки зрения времени выполнения) запрос? 3) Любой другой совет, который поможет мне решить эту проблему.
Версия: Hadoop - 2.7.0 Java 1.7.0_80 Hive 1.2.1
Я думаю, вы должны смотреть на расширениях ГИС для улья: https://cwiki.apache.org/confluence/дисплей/Hive/Spatial + запросы. –
какая версия Hadoop вы используете? mapreduce.job.reduces заменяет mapreduce.job.reduces в Hadoop 2.x –
Существует перекрестное объединение U x L, а затем фильтрация. Перекрестное соединение умножает строки. Можно ли преобразовать предложение WHERE, чтобы присоединиться к предложению ON? Вот так: ОТ УН ВХОДЯЩИЙ ПРИСОЕДИНЕНИЕ L l ON (3960 * acos (cos (радианы (l.lat)) * cos (радианы (u.lat)) * cos (радианы (l.long) - radians (u.long)) + sin (радианы (l.lat)) * sin (радиан (u.lat))) <10.0) ГРУППА BY l.id – leftjoin