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 表权限的主要内容,如果未能解决你的问题,请参考以下文章
Sqoop 导入映射器失败,但 sqoop 作业显示正在运行
使用 --create-hive-table 直接在 hive 中导入 mysql 表 (sqoop)
Sqoop import导入表时报错java.lang.ClassNotFoundException: org.json.JSONObject