2013-07-02 3 views
3

Я обнаружил некоторые (значительные) различия в производительности (как в режиме реального времени, так и в процессорном времени) между Pig and Hive и ищу способы найти их в основе этих различий. Я использовал функцию объяснения обоих языков (т. Е. Hive: ключевое слово EXPLAIN, Pig: pig -e 'explain -script explain.pig'), чтобы сравнить и сравнить генерируемое синтаксическое дерево, логические, физические и планы сокращения карты. Однако оба, похоже, делают то же самое. Однако диспетчер заданий показывает разницу в количестве карт и уменьшении задач (я, следовательно, гарантировал, что оба используют одинаковое количество карт и уменьшают задачи, а разница в производительности остается). Поэтому мой вопрос: каким другим способом я могу анализировать происходящее (возможно, на уровне более низкого уровня/байт-кода)?Производительность: Pig vs Hive

EDIT: Я выполняю тесты TPC-H с помощью TPC (доступно https://issues.apache.org/jira/browse/PIG-2397 и https://issues.apache.org/jira/browse/HIVE-600). Однако даже более простые сценарии демонстрируют довольно большую разницу в производительности. Например:

SELECT (dataset.age * dataset.gpa + 3) AS F1, 
    (dataset.age/dataset.gpa - 1.5) AS F2 
    FROM dataset 
    WHERE dataset.gpa > 0; 

мне еще нужно, чтобы полностью оценить TPC-H тестов (будет обновляться позже), однако результаты для более простых сценариев, подробно описаны в данном документе: https://www.dropbox.com/s/16u3kx852nu6waw/output.pdf

(JPG: http://i.imgur.com/1j1rCWS.jpg)

+0

Можете ли вы показать скрипт и SQL, которые вы используете для тестирования? – zsxwing

+0

Как установить раздел в таблице данных в Hive? – zsxwing

+0

Извините, что вы имеете в виду? Я не совсем понимаю (я совершенно новый для Hadoop)/Hive – JB2

ответ

3

Я читал некоторые исходные коды Pig и Hive раньше. Я могу поделиться некоторыми мнениями.

Поскольку я сосредоточился на внедрении Join, здесь я могу предоставить некоторые сведения о внедрении Pig и Hive. Внедрение Hive's Join менее эффективно, чем Pig. Я понятия не имею, почему Hive необходимо создать так много объектов (такие операции очень медленные и их следует избегать) в реализации Join. Я думаю, именно поэтому Hive делает Join медленнее, чем Pig. Если вас это интересует, вы можете проверить код CommonJoinOperator самостоятельно. Поэтому я предполагаю, что Свинья обычно более эффективна, чем ее высококачественные коды.

+0

Спасибо! Мне это очень интересно - кажется странным. Я бы ожидал, что обе они дадут аналогичную производительность. На какие другие разделы базы кода вы бы порекомендовали посмотреть? – JB2

+0

Итак, вы хотите узнать больше деталей в их реализации? И Свинья и Улей? – zsxwing

+0

Да. В частности, что касается различий в производительности. Я просмотрел документацию (вот что я думаю). Но, может быть, у вас есть полезные ресурсы/ссылки/статьи, которые вы рекомендуете? – JB2

Смежные вопросы