Отчетность Cognos по источнику данных Hive выполняется очень медленно?

#hadoop #jdbc #hive #db2 #cognos

#hadoop #jdbc #hive #db2 #cognos

Вопрос:

Я новичок в Cognos и пытаюсь создавать отчеты поверх Hadoop, используя драйвер Hive JDBC. Я могу подключиться к Hive через JDBC и могу генерировать отчеты, но здесь отчет выполняется очень медленно. Я выполнил ту же работу при подключении к DB2, и данные такие же, как в Hadoop. Отчеты выполнялись очень быстро по сравнению с отчетами поверх Hive. Я использую одни и те же наборы данных как в Hadoop, так и в DB2, но не могу понять, почему отчеты поверх Hadoop выполняются очень медленно. Я установил Hadoop в псевдораспределенном режиме и подключился через JDBC.

Я установил следующие версии программного обеспечения, которые я использовал,

  • IBM Cognos 10.2.1 с пакетом исправлений 11,
  • Apache Hadoop 2.7.2,
  • Apache Hive 0.12.

Обе системы установлены в разных системах: Cognos поверх Windows 7 и Hadoop поверх Red-Hat.

Кто-нибудь может сказать мне, где я могу ошибаться в настройке Cognos или Hadoop. Есть ли какой-либо способ ускорить время выполнения отчета в Cognos поверх Hadoop.

Комментарии:

1. Hive, как правило, будет работать медленнее, чем RDBMS. Вы тестировали свой запрос непосредственно в Hive?

2. Есть ли какой-либо способ увеличить скорость, поскольку отчеты выполняются очень медленно, только для простого отчета требуется 2-3 минуты времени

Ответ №1:

Когда вы говорите, что установили Hadoop в псевдораспределенном режиме, вы имеете в виду, что запускаете его только на одном сервере? Если это так, то она никогда не будет такой быстрой, как DB2. Hadoop и Hive предназначены для работы в кластере и масштабирования. Запустите 3 или 4 сервера в кластере, и вы должны обнаружить, что начинаете замечать впечатляющую скорость обработки запросов к большим наборам данных.

Убедитесь, что вы разрешили службе запросов Cognos доступ к большему объему памяти, чем установленный по умолчанию для ее Java-кучи (http://www-01.ibm.com/support/docview.wss?uid=swg21587457) В настоящее время я использую начальный размер 8 ГБ и максимальный 12 Гб, но все же иногда удается это пропустить.

Следующая проблема, с которой вы столкнетесь, заключается в том, что Cognos не знает специфики Hive SQL (или Impala, которую я использую). Это означает, что любой неосновной запрос будет преобразован в select from и, возможно, group by . Большой недостающей частью будет предложение where , которое будет означать, что Cognos попытается собрать все данные из таблицы Hive, а затем выполнить фильтрацию в Cognos, а не передавать их в Hive, где им место. Cognos знает, как написать DB2 SQL и все особенности, чтобы он мог пропускать эту рабочую нагрузку.

Чем сложнее запрос, тем больше функций, специфичных для платформы и т.д., Как правило, не передаются в Hive (функции даты, аналитические функции и т.д.), Поэтому постарайтесь структурировать свои данные и запросы таким образом, чтобы они требовались в фильтрах.

Используйте журналы запросов Hive для отслеживания запросов, выполняемых Cognos. Также попробуйте такие вещи, как добавление полей в запрос, а затем перетащите это поле в фильтр, а не напрямую из модели в фильтр. Я обнаружил, что это может помочь заставить Cognos включить фильтр в предложение where.

Другой вариант — использовать сквозные SQL-запросы в Report Studio и просто записать все это в SQL Hive. Я только что сделал это для набора панелей мониторинга, для которых требовался стек из топ-5 из таблицы фактов с 5 миллионами строк. Для 5 строк Cognos извлекал все 5 миллионов строк, а затем ранжировал их в Cognos. Сделайте это несколько раз, и внезапно у Cognos возникнут проблемы. С помощью сквозного запроса я мог бы использовать функцию Impala Rank () и получить только 5 строк, что намного быстрее, чем это сделала бы DB2, видя, что я работаю в правильном (но небольшом) кластере.

Еще одно соображение, связанное с Hive, заключается в том, используете ли вы Hive на Map Reduce или Hive на TEZ. Из того, что обнаружил коллега, Hive на TEZ намного быстрее выполняет запросы, выполняемые Cognos, чем Hive на Map Reduce.