我们使用netezza direct将数据从netezza导入hadoop,作为poc的一部分。
有几个关于netezza特定和netezza sqoop集成的问题。
问题1。sqoop直接模式是否总是需要create external table和drop特权来执行直接传输?
问题2。外部表是在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
问题3。如果netezza需要创建外部表,那么它是否可以在不同的数据库中创建外部表,而不是在需要将包含数据的实际表拉入hadoop的数据库中创建外部表。需要做什么配置更改?
第四季度。sqoop是否在由单个Map器创建的外部表上运行drop table?
使用的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条答案
按热度按时间4c8rllxm1#
这是我在sqoop用户社区得到的回复(感谢szabolcsvasas)。
在netezza direct imports的情况下,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个示例)这并不是在任何模式中创建新的外部表,它只是备份表的内容,因此不执行drop table语句。
问题1。是的,sqoop需要创建外部表,但不需要drop特权。
问题2。sqoop并不真正在任何模式中创建新的外部表,它只是备份表的内容(http://www.ibm.com/support/knowledgecenter/ssulqd_7.2.1/com.ibm.nz.load.doc/c_load_create_external_tbl_expls.html,第6例)。
问题3。无法在特定架构中创建外部表。
第四季度。不,sqoop不运行drop命令。
此外,由sqoop直接进程创建的表是netezza tet-transient external tables。因此,一旦Map程序以namedfifo的形式接收到数据,就会删除外部remotesource jdbc表。因此,在传输之后,表不会存储在netezza中。