使用unixodbc/isql将数据加载到hdfs

2nc8po8w  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(720)

我在linux服务器(cloudera)上有一个脚本,它使用unixodbc/isql从netezza服务器提取数据。它在本地文件系统上生成一个文本文件,然后将其推送到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小时来加载数据。我团队中的sqoopMaven试图微调命令以缩短时间,但没有成功。
总而言之,是否可以跳过本地文件系统并将这些数据直接加载到hdfs?

ar7v8xwq

ar7v8xwq1#

netezza包括fluid query,它允许netezza查询其他数据源,您更感兴趣的是,能够以各种格式将数据直接从netezza移动到hdfs。
虽然netezza附带了fluid query软件,但管理员必须在使用前安装并配置它。
下面是fluid query的简要概述。

相关问题