使用unixODBC/isql将数据加载到HDFS

问题描述:

我在Linux服务器(Cloudera)上使用unixODBC/isql从Netezza服务器提取数据的脚本。它在本地文件系统上生成一个文本文件,然后将其推送到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才能加载数据。我的团队的sqoop专家试图微调命令以缩短时间,但没有运气。

总而言之,是否可以跳过本地文件系统并将这些数据直接加载到HDFS?

Netezza包含Fluid Query,它允许Netezza查询其他数据源以及更多的兴趣,可以将数据直接从Netezza以各种格式转移到HDFS。

虽然软件权利是Netezza随附的Fluid Query,但管理员必须在使用前安装和配置它。

Here's a quick overview of Fluid Query.