unixODBC/isql을 사용하여 Netezza 서버에서 데이터를 가져 오는 Linux 서버 (Cloudera)에 스크립트가 있습니다. 로컬 파일 시스템에 텍스트 파일을 생성 한 다음 HDFS로 푸시합니다. 이 글은 온다 HDFS에 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/
궁금하고있다. 즉, 나는 인해 로컬 파일 시스템에 텍스트 파일을 생성 건너 뛰려면 (소스 테이블은 수백 GB입니다).
sqoop을 사용하지 않는 이유는 프로젝트 요구 사항이 너무 오래 걸리기 때문입니다. 위의 스크립트는 2-3 시간 내에 텍스트 파일을 생성 할 수 있지만 평균 sqoop은 데이터를로드하는 데 7-8을 사용합니다. 우리 팀의 전문가는 시간을 줄이기 위해 명령을 미세 조정하려했지만 행운이 없었습니다.
요약하면, 로컬 파일 시스템을 건너 뛰고이 데이터를 HDFS에 직접로드 할 수 있습니까?