Sqoop 直接导入 Netezza 表权限

Posted

技术标签:

【中文标题】Sqoop 直接导入 Netezza 表权限【英文标题】:Sqoop Direct Import Netezza Table Permissions 【发布时间】:2017-01-27 21:43:34 【问题描述】:

作为 POC 的一部分,我们使用 netezza direct 将数据从 Netezza 导入 Hadoop。

有几个关于 Netezza 特定和 Netezza Sqoop 集成的问题。

第一季度。 Sqoop 直接模式是否总是需要 CREATE EXTERNAL TABLE 和 DROP 权限才能执行直接传输?

第二季度。是否在 Netezza 中创建了外部表?如果是,哪个数据库?我看到 Sqoop 使用以下查询:

CREATE EXTERNAL TABLE '/yarn/local/usercache/someuser/appcache/application_1483624176418_42787/work/task_1483624176418_42787_m_000000/nzexttable-0.txt' 
USING (REMOTESOURCE 'JDBC'  
BOOLSTYLE 'T_F' 
 CRINSTRING FALSE  DELIMITER 44 ENCODING 
'internal'  FORMAT 'Text'  INCLUDEZEROSECONDS TRUE  
NULLVALUE 'null'  MAXERRORS 1) 
AS SELECT * FROM SOME_TBL WHERE (DATASLICEID % 3)

它是否在 db URL 中选择的数据库中创建? jdbc:netezza://somehostname:5480/SOME_DB_1

第三季度。如果 Netezza 需要创建外部表,它是否可以在不同的数据库中创建外部表,而不是在实际表中创建需要将数据拉入 Hadoop 的表。需要进行哪些配置更改?

第四季度。 Sqoop 是否在由各个映射器创建的外部表上运行 DROP 表?

使用 Sqoop 命令:

export HADOOP_CLASSPATH=/opt/nz/lib/nzjdbc3.jar
sqoop import -D mapreduce.job.queuename=some_queue 
-D yarn.nodemanager.local-dirs=/tmp -D mapreduce.map.log.level=DEBUG 
--direct --connect jdbc:netezza://somehost:5480/SOME_DB --table SOME_TBL_1 
--username SOMEUSER --password xxxxxxx --target-dir /tmp/netezza/some_tbl_file 
--num-mappers 2 --verbose   

【问题讨论】:

【参考方案1】:

这是我在 Sqoop 用户社区中得到的回复(感谢 Szabolcs Vasas)。

在 Netezza 直接导入的情况下,Sqoop 执行 CREATE EXTERNAL TABLE 命令(因此您将需要 CREATE EXTERNAL TABLE 权限)来创建表内容到临时文件的备份,并复制此文件的内容文件到 HDFS 上的最终输出。 您粘贴在电子邮件中的 SQL 命令确实是由 Sqoop 执行的命令,但据我从 Netezza 文档(http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html,第 6 个示例)了解,这并没有真正在它支持的任何模式中创建新的外部表up table 的内容,因此没有执行 DROP TABLE 语句。

第一季度。是的,Sqoop 需要 CREATE EXTERNAL TABLE 但不需要 DROP 权限。

第二季度。 Sqoop 不会在任何模式中真正创建新的外部表,它只是备份表的内容(http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html,第 6 个示例)。

第三季度。无法在特定模式中创建 EXTERNAL 表。

第四季度。不,Sqoop 不运行 DROP 命令。

另外,sqoop直接进程创建的表是Netezza TET - Transient external tables。因此,一旦映射器接收到 NamedFifo 数据,外部远程源 JDBC 表就会被删除。因此,表在传输后不会存储在 Netezza 中。

【讨论】:

以上是关于Sqoop 直接导入 Netezza 表权限的主要内容,如果未能解决你的问题,请参考以下文章

Hive表和Netezza表的匹配记录

Sqoop 导入映射器失败,但 sqoop 作业显示正在运行

Sqoop基础

使用 --create-hive-table 直接在 hive 中导入 mysql 表 (sqoop)

Sqoop import导入表时报错java.lang.ClassNotFoundException: org.json.JSONObject

大数据Sqoop将mysql直接抽取至Hbase