unixODBC/isqlを使用してNetezzaサーバーからデータを取得するLinuxサーバー(Cloudera)にスクリプトがあります。ローカルファイルシステム上にテキストファイルを生成し、それをHDFSにプッシュします。unixODBC/isqlを使用してHDFSにデータをロード
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に直接接続、またはパイプするいずれかの方法がある場合、私は疑問に思って。言い換えれば、私は原因ローカルファイルシステム上のテキストファイルを作成スキップしたいです(ソーステーブルは数百GBです)。
私がsqoopを使用していない理由は、プロジェクトの所要時間が長すぎるためです。上記のスクリプトは2-3時間でテキストファイルを作成することができますが、sqoopはデータをロードするのに平均7-8時間かかっています。私のチームのスペシャリストのエキスパートは、時間を節約するためにコマンドを微調整しようとしましたが、運がありませんでした。
要約すると、ローカルファイルシステムをスキップしてこのデータをHDFSに直接ロードできますか?