Как создать и прочитать внешнюю таблицу в GPDB

У нас есть небольшой кластер gpdb. Когда я пытаюсь создать и прочитать свою первую внешнюю таблицу, используя протокол gpfdist.

Получение ошибки при чтении внешней таблицы: т.е.

prod=# select * from ext_table
prod-# ;
ERROR:  connection with gpfdist failed for gpfdist://gpmasterhost:8080/demo/gp_RevenueReport_stg0.txt. effective url: http://gpmasterhost:8080/demo/gp_RevenueReport_stg0.txt. error code = 111 (Connection refused)  (seg0 slice1 datanode2 40000 pid=5402)
prod=#

Мы попробовали команду DDL для внешней таблицы:

CREATE EXTERNAL TABLE ext_table
(
  "ID" bigint,
  "time" timestamp without time zone,
   )
 LOCATION (
    'gpfdist://gpmasterhost:8080/demo/gp_RevenueReport_stg0.txt'
)
 FORMAT 'TEXT' (delimiter ';' null '' escape '~' )
ENCODING 'UTF8';

Любая помощь в этом будет высоко оценена!


person NEO    schedule 16.06.2016    source источник


Ответы (2)


Вы должны создать процесс gpfdist на «gpmasterhost», который прослушивает порт 8080 и обслуживает файлы, включающие демонстрацию каталога, содержащую gp_RevenueReport_stg0.txt.

gpfdist -p 8080 -d path_to_demo & 
person Jon Roberts    schedule 16.06.2016
comment
Я запустил команду, она говорит и все еще выполняется: [gpadmin@mdw ~]$ 2016-06-16 14:49:05 32581 ИНФОРМАЦИЯ Перед открытием сокетов для прослушивания доступны следующие сокеты для прослушивания: 2016-06-16 14:49:05 32581 ИНФОРМАЦИЯ Сокет IPV6: [::]:8080 2016-06-16 14:49:05 32581 ИНФОРМАЦИЯ Сокет IPV4: 0.0.0.0:8080 2016-06-16 14:49:05 32581 ИНФОРМАЦИЯ Попытка открыть прослушиваемый сокет: 2016- 06-16 14:49:05 32581 INFO Успешное открытие сокета для прослушивания 2016-06-16 14:49:05 32581 INFO Попытка открытия сокета для прослушивания: 2016-06-16 14:49:05 32581 INFO Сокет IPV4: 0.0.0.0 :8080 Обслуживание HTTP на порту 8080, каталог /home/gpadmin/demo - person NEO; 16.06.2016
comment
[root@mdw ~]# ps aux |grep gpfdist root 9417 0.0 0.0 103244 868 pts/1 R+ 14:57 0:00 grep gpfdist gpadmin 32581 0.0 0.0 27148 1692 pts/0 S 14:49 0:00 gpfdist -p 8080 -d /home/gpadmin/demo [root@mdw ~]# - person NEO; 16.06.2016
comment
когда я читаю файл, выбранный * из ext_table, получаю это: ОШИБКА: код ответа HTTP 404 от gpfdist (gpfdist://gphostname:8080/demo/gp_RevenueReport_stg0.txt): файл HTTP/1.0 404 не найден (url.c :352) (seg0 slice1 datanode1:40000 pid=6185) (cdbdisp.c:1326) - person NEO; 16.06.2016
comment
Каталог, указанный в опции -d, будет корнем сервера gpfdist. Если ваш каталог данных: /my/data/dir/demo/gp_RevenueReport_stg0.txt, тогда командная строка gpfdist должна быть: gpfdist -p 8080 -d /my/data/dir & - person Stephen Carter; 16.06.2016
comment
понятно . Это означает, что нам нужно только поставить /home/gpadmin и снова мне нужно снова запустить эту команду .gpfdist -p 8080 -d /home/gpadmin & . Должен ли я убить существующий процесс gpfdist, который работает в каталоге /home/gpadmin/demo - person NEO; 16.06.2016
comment
prod=# select * from schema.ext_table ; ID | время ----+------ (0 строк) - person NEO; 16.06.2016
comment
Большое спасибо вам обоим. когда мне нужно взять нагрузку с hdfs на greenplum. этот протокол не будет работать? - person NEO; 16.06.2016
comment
При загрузке из hdfs вы должны использовать протокол gphdfs вместо gpfdist. Вы вообще не будете использовать gpfdist при чтении из hdfs. - person Jon Roberts; 16.06.2016
comment
проверил с протоколом gphdfs и создал читаемый внешний файл в gpdb. Спасибо, Джон. - person NEO; 16.06.2016

Как сказал Джон, вам нужно будет запустить gpfdist в вашей системе «gpmasterhost».

Однако, основываясь на ваших заметках, gpfdist работает в вашем демонстрационном каталоге:

ps aux |grep gpfdist root 9417 0.0 0.0 103244 868 pts/1 R+ 14:57 0:00 grep gpfdist gpadmin 32581 0.0 0.0 27148 1692 pts/0 S 14:49 0:00 gpfdist -p 8080 -d /home/gpadmin/ демо

Таким образом, вам нужно либо изменить свое ВНЕШНЕЕ определение на (обратите внимание, что я не использую демо-каталог):

СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ ext_table ("ID" bigint, временная метка "time" без часового пояса, ) LOCATION ('gpfdist://gpmasterhost:8080/gp_RevenueReport_stg0.txt') FORMAT 'TEXT' (разделитель ';' null '' escape '~ ' ) КОДИРОВАНИЕ 'UTF8';

Или запустите gpfdist на один уровень выше (/home/gpadmin) без изменения внешней таблицы.

person CanuckAFK    schedule 16.06.2016
comment
Кроме того, gpfdist — это просто демон lighthttp, насколько я понимаю, поэтому вы также можете протестировать его с помощью wget, чтобы убедиться, что вы можете подключиться и извлечь нужные файлы за пределы greenplum. - person CanuckAFK; 16.06.2016
comment
Спасибо, я собираюсь использовать /home/gpadmin up level. - person NEO; 16.06.2016