У меня есть сценарий на Linux-сервере (Cloudera), который использует unixODBC/isql для извлечения данных с сервера Netezza. Он генерирует текстовый файл в локальной файловой системе и затем помещает его в HDFS.Загрузка данных в HDFS с помощью unixODBC/isql
export ODBCHOME=;
export ODBCINI=;
export LIBPATH=;
export LD_LIBRARY_PATH=;
NZ_ODBC_INI_PATH=/home/myuser/sql/;
export NZ_ODBC_INI_PATH;
export ODBCINI=/home/myuser/sql/odbc.ini;
export NZ_HOME=/usr/local/nz;
export PATH=$PATH:$NZ_HOME/bin64;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NZ_HOME/lib64;
export NZ_HOST=myntzserver
EXTRACT_PATH=/home/myuser/trgt_path/;
export EXTRACT_PATH;
cd $EXTRACT_PATH;
hive_char=`printf "\035\n"`
isql nettezaServer1 tsg1dev \$\$infadmin11 -v<<EOF
drop table test_1;
CREATE EXTERNAL TABLE test_1 (GRP BIGINT, ID BIGINT, DATA CHARACTER V VARYING(10)) USING (DATAOBJECT ("$EXTRACT_PATH/test_1.txt") REMOTESOURCE 'ODBC' delimiter 2);
insert into test_1 SELECT GRP,ID,DATA FROM SCHEMA1..test_table;
EOF
hdfs dfs -put /home/myuser/trgt_path/test_1.txt /user/projects/my_dir/
мне интересно, если есть способ, чтобы либо подключаться непосредственно к HDFS, или трубы данных в HDFS, как это происходит. Другими словами, я хочу, чтобы пропустить создание текстового файла в локальной файловой системе из-за к пространственным ограничениям (исходная таблица - сотни ГБ).
Причина, по которой я не использую sqoop, заключается в том, что время, которое требуется, слишком велико для требований проекта. Сценарий выше может создать текстовый файл за 2-3 часа, тогда как sqoop в среднем занимает 7-8 для загрузки данных. Эксперт sqoop моей команды попытался точно настроить команду, чтобы сократить время, но не повезло.
Подводя итоги, можно ли пропустить локальную файловую систему и загрузить эти данные прямо в HDFS?