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

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

我在linux服务器(cloudera)上有一个脚本,它使用unixodbc/isql从netezza服务器提取数据。它在本地文件系统上生成一个文本文件,然后将其推送到hdfs。

  1. export ODBCHOME=;
  2. export ODBCINI=;
  3. export LIBPATH=;
  4. export LD_LIBRARY_PATH=;
  5. NZ_ODBC_INI_PATH=/home/myuser/sql/;
  6. export NZ_ODBC_INI_PATH;
  7. export ODBCINI=/home/myuser/sql/odbc.ini;
  8. export NZ_HOME=/usr/local/nz;
  9. export PATH=$PATH:$NZ_HOME/bin64;
  10. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NZ_HOME/lib64;
  11. export NZ_HOST=myntzserver
  12. EXTRACT_PATH=/home/myuser/trgt_path/;
  13. export EXTRACT_PATH;
  14. cd $EXTRACT_PATH;
  15. hive_char=`printf "\035\n"`
  16. isql nettezaServer1 tsg1dev \$\$infadmin11 -v<<EOF
  17. drop table test_1;
  18. 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);
  19. insert into test_1 SELECT GRP,ID,DATA FROM SCHEMA1..test_table;
  20. EOF
  21. 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的简要概述。

相关问题