使用 unixODBC/isql 将数据加载到 HDFS
Posted
技术标签:
【中文标题】使用 unixODBC/isql 将数据加载到 HDFS【英文标题】:Loading Data to HDFS with unixODBC/isql 【发布时间】:2016-09-13 13:22:28 【问题描述】:我在 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 小时来加载数据。我团队的 sqoop 专家尝试微调命令以缩短时间,但没有成功。
总而言之,是否可以跳过本地文件系统并将这些数据直接加载到 HDFS?
【问题讨论】:
【参考方案1】:Netezza 包括 Fluid Query,它允许 Netezza 查询其他数据源,而且您更感兴趣的是,能够以各种格式将数据直接从 Netezza 移动到 HDFS。
虽然软件权利是 Fluid Query 包含在 Netezza 中,但您的管理员必须在使用前安装和配置它。
Here's a quick overview of Fluid Query.
【讨论】:
以上是关于使用 unixODBC/isql 将数据加载到 HDFS的主要内容,如果未能解决你的问题,请参考以下文章