使用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,但管理员必须在使用前安装和配置它。