Экспорт данных Hive to vertica с помощью именованного канала Unix

Может ли кто-нибудь помочь мне, как сделать большой и быстрый экспорт в Hive в Vetica без какого-либо соединителя Hadoop?

В настоящее время я экспортирую то же самое через Unix Namedpipe, но производительность не так хороша.

почти 5 параллельных потоков для загрузки данных в vertica, а время составляет около 230 минут для 1,6 миллиарда наборов записей?

может ли кто-нибудь помочь мне улучшить эту производительность, и если мы можем оптимизировать этот экспорт?

Спасибо абхи


person abhishek rastogi    schedule 18.11.2014    source источник
comment
Непонятно, о чем вы спрашиваете, возможно, предоставьте пример кода или дополнительную информацию.   -  person EternalHour    schedule 18.11.2014
comment
эй, на самом деле мы планируем перенести большие таблицы из hivr, например, 3 миллиарда записей из улья в vertica с помощью именованного канала unix, сначала выберите col1 col2 из таблиц улья › mkfifo, после этого мы подключаемся к vertica и начинаем копировать, как показано ниже cat mkfifo | скопируйте в vertica, мы выполняем это выполнение с 5 параллельными потоками на 5 узлах в vertica.   -  person abhishek rastogi    schedule 18.11.2014
comment
@abhishekrastogi это разовая вещь или будет происходить часто?   -  person Kermit    schedule 18.11.2014


Ответы (1)


Мы делаем это, используя не именованный канал (mkfifo), а стандартный анонимный канал оболочки:

hive -e "select whatever FROM wherever" | \
dd bs=1M | \
/opt/vertica/bin/vsql -U $V_USERNAME -w $V_PASSWORD -h $HOST $DB -c \
"COPY schema.table FROM LOCAL STDIN DELIMITER E'\t' NULL 'NULL' DIRECT"

Это прекрасно работает для нас. Обратите внимание на «dd» между hive и vsql. Это обязательно для правильной работы. Трудно дать вам хорошие цифры, потому что наш оператор выбора Hive на самом деле не тривиален, и я не знаю, на что было потрачено время (обработка куста или загрузка данных).

Но, честно говоря, использование именованного канала, как вы, или безымянного канала, как мы, — это хороший способ сделать это, и на системном уровне мало что можно оптимизировать. Тем не менее, есть несколько вещей, которые следует учитывать:

  • время вычислить ваш запрос улья
  • где вы запускаете свой запрос. Например, если вы запускаете его со стороннего компьютера, данные должны передаваться из улья на ваш сервер в vertica. Выполнение команды на сервере куста или на узле Vertica может ускорить процесс, пропустив ненужный прыжок.
  • Оператор COPY: используете ли вы DIRECT?
  • и, конечно же, обычные проекции (несколько проекций замедляют загрузку), ресурсы Vertica и так далее.
person Guillaume    schedule 20.11.2014