Как правильно работать с Greenplum. Часть вторая — gpfdist

gpfdistИтак, рассмотрев в прошлом обзоре заблуждения, перейдем к способам эффективной работы с Greenplum.
Основным инструментом для загрузки данных в Greenplum и выгрузке данных из Greenplum является утилита gpfdist. Это по сути http-сервер, с которым Greenplum разговаривает сразу всеми своими узлами, достигая большой скорости как загрузки, так и выгрузки данных.

Возникает вопрос, для чего используется gpfdist? В Greenplum существует понятие external table (внешние таблицы), описание которых выглядит практически так же, как и у обычных таблиц, но в конце добавляется условие типа LOCATION (‘gpfdist://hostname:8080/database_name/table_name.csv’), которое указывает, где именно хранится файл, структура которого описана в external table. External table может быть либо для чтения, либо для записи.

Если external table создается для чтения, то, во-первых, вместо имени файла можно использовать маску (то есть, можно прочитать или загрузить сразу много файлов), а во-вторых, можно читать из заархивированных файлов (.gz, .zip или .bz2), что существенно увеличивает скорость чтения и загрузки файлов, поскольку чтение данных с дисков уменьшается во много раз по сравнению с чтением незаархивированных файлов.

External table может работать сразу с несколькими экземплярами gpfdist, запущенными даже на разных узлах. Это еще больше увеличивает производительность системы — как для загрузки, так и для выгрузки данных.

Основным выигрышем в производительности является то, что Greenplum работает с gpfdist напрямую с каждого из своих узлов. Это означает, что gpfdist должен быть запущен там, где может быть обеспечен доступ ко всем узлам Greenplum. Иначе он просто не будет работать.

Важно отметить, что использование одного экземпляра gpfdist параллельно для загрузки из разных источников, приводит иногда к непредсказуемым результатам. Поэтому, если нужно загрузить или выгрузить несколько таблиц в параллель, то проще всего запустить несколько экземпляров gpfdist на разных портах, и соответствующим образом сконфигурировать описание external tables.

Еще одно важное, но неприятное свойство gpfdist — это принципиальная невозможность выгрузить отсортированный результат. Поскольку выгрузка идет сразу со всех узлов, то результаты могут быть отсортированы только внутри одного узла, а запись их всех в один файл все равно все перемешает. Если необходимо выгрузить отсортированный результат, то тогда нужно использовать команду Postgres copy.

В следующей статье я расскажу об использовании правильного условия distributed by

© Михаил Герштейн, 2013

Поделиться в соц. сетях

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Добавить комментарий