Sqoop 直接导入 Netezza Table 权限
Sqoop Direct Import Netezza Table Permissions
作为 POC 的一部分,我们正在使用 netezza direct 将数据从 Netezza 导入到 Hadoop。
有几个关于 Netezza 特定和 Netezza Sqoop 集成的问题。
Q1。 Sqoop 直接模式是否总是需要 CREATE EXTERNAL TABLE 和 DROP 权限才能执行直接传输?
Q2。外部 table 是否在 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
Q3。如果 Netezza 需要创建外部 table,它是否可以在与实际 table 数据需要拉入 Hadoop 的数据库不同的数据库中创建外部 table。需要完成的配置更改是什么?
Q4。 Sqoop 运行 DROP table on external table which was created by individual mappers 吗?
使用的 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
这是我在 Sqoop 用户社区中得到的回复(感谢 Szabolcs Vasas)。
在 Netezza 直接导入的情况下,Sqoop 执行 CREATE EXTERNAL TABLE 命令(因此您需要 CREATE EXTERNAL TABLE 权限)来创建内容的备份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 个示例)中了解到,这并没有真正创建一个新的外部 table 在任何模式中,它只是备份 table 的内容,因此没有 DROP TABLE 语句被执行。
Q1。是的,Sqoop 需要 CREATE EXTERNAL TABLE 但不需要 DROP 权限。
Q2。 Sqoop 并没有真正在任何模式中创建新的外部 table 它只是备份 table 的内容(http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html,第 6 个示例)。
Q3。无法在特定架构中创建 EXTERNAL table。
Q4。不,Sqoop 没有 运行 DROP 命令。
另外,sqoop direct进程创建的table是Netezza TET - Transient external tables。因此,一旦映射器接收到 NamedFifo 数据,外部远程源 JDBC table 就会被删除。因此,table 不会在传输后存储在 Netezza 中。
作为 POC 的一部分,我们正在使用 netezza direct 将数据从 Netezza 导入到 Hadoop。
有几个关于 Netezza 特定和 Netezza Sqoop 集成的问题。
Q1。 Sqoop 直接模式是否总是需要 CREATE EXTERNAL TABLE 和 DROP 权限才能执行直接传输?
Q2。外部 table 是否在 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
Q3。如果 Netezza 需要创建外部 table,它是否可以在与实际 table 数据需要拉入 Hadoop 的数据库不同的数据库中创建外部 table。需要完成的配置更改是什么?
Q4。 Sqoop 运行 DROP table on external table which was created by individual mappers 吗?
使用的 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
这是我在 Sqoop 用户社区中得到的回复(感谢 Szabolcs Vasas)。
在 Netezza 直接导入的情况下,Sqoop 执行 CREATE EXTERNAL TABLE 命令(因此您需要 CREATE EXTERNAL TABLE 权限)来创建内容的备份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 个示例)中了解到,这并没有真正创建一个新的外部 table 在任何模式中,它只是备份 table 的内容,因此没有 DROP TABLE 语句被执行。
Q1。是的,Sqoop 需要 CREATE EXTERNAL TABLE 但不需要 DROP 权限。
Q2。 Sqoop 并没有真正在任何模式中创建新的外部 table 它只是备份 table 的内容(http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html,第 6 个示例)。
Q3。无法在特定架构中创建 EXTERNAL table。
Q4。不,Sqoop 没有 运行 DROP 命令。
另外,sqoop direct进程创建的table是Netezza TET - Transient external tables。因此,一旦映射器接收到 NamedFifo 数据,外部远程源 JDBC table 就会被删除。因此,table 不会在传输后存储在 Netezza 中。