我完全被难住了,因为我试图将NOLOGGING包括在从HIVE到Oracle数据库的SQOOP导出任务中。
SQOOP用户指南-https:sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_nologging要求用途:- Doraoop. nlogging =true
我想我已经正确地将下面的代码添加到了我的代码中,但是它似乎不起作用。
<property>
<name>Doraoop.nologging</name>
<value>true</value>
</property>
下面的脚本运行,但我没有看到任何性能提升,这使我认为它没有工作。
<!-- Sqoop export of data from HDFS to OR Datalab -->
<action name="SQOOP_EXPORT" retry-max="2" retry-interval="5">
<sqoop xmlns="uri:oozie:sqoop-action:0.4">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapreduce.job.queuename</name>
<value>${yarn_queueName}</value>
</property>
<property>
<name>org.apache.sqoop.export.text.dump_data_on_error</name>
<value>true</value>
</property>
<property>
<name>hadoop.security.credential.provider.path</name>
<value>jceks://hdfs/user/lib/keystore.pswd</value>
</property>
<property>
<name>Doraoop.nologging</name>
<value>true</value>
</property>
<property>
<name>sqoop.export.records.per.statement</name>
<value>100000</value>
</property>
<property>
<name>sqoop.export.statements.per.transaction</name>
<value>10</value>
</property>
</configuration>
<arg>export</arg>
<arg>--connect</arg>
<arg>jdbc:oracle:thin:@*****test****:12345/DATALAND</arg>
<arg>--username</arg>
<arg>LANDING</arg>
<arg>--password-alias</arg>
<arg>pswd.ordl</arg>
<arg>--export-dir</arg>
<arg>${sqoopHDFSDataDir}</arg>
<arg>--table</arg>
<arg>${sqoopDataTable}</arg>
<arg>--columns</arg>
<arg>${sqoopDataColumns}</arg>
<arg>--input-fields-terminated-by</arg>
<arg>\001</arg>
<arg>--input-lines-terminated-by</arg>
<arg>\n</arg>
<arg>--input-null-string</arg>
<arg>\\N</arg>
<arg>--input-null-non-string</arg>
<arg>\\N</arg>
<arg>-m</arg>
<arg>${sqoopNumMappers}</arg>
</sqoop>
<ok to="HIVE2_LOG_SCRIPT"/>
<error to="Email_failure"/>
</action>
2条答案
按热度按时间cx6n0qe31#
在Oracle中,不记录并不总是意味着“不记录”。它只适用于特定情况下的某些直接写入导入,并不一定意味着即使在这种情况下也不记录事务日志。nologging选项也可以被强制记录日志的数据库或表空间设置覆盖(很可能是任何生产数据库中的情况)。
还要注意,nologging操作会影响您从备份恢复的能力:始终在任何nlogging操作之前和之后立即执行备份,并且不允许在nlogging操作正在进行时发生其他日志记录事务。
从文档中:
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/logging_clause.html#GUID-C4212274-5595-4045-A599-F033772C496E
“如果指定NOLOGGING,则数据库对象的创建以及后续的常规插入操作将记录在重做日志文件中。直接路径插入操作将不会被记录...
如果要为其指定事件记录属性的对象驻留在处于强制事件记录模式的数据库或表空间中,则Oracle数据库将忽略任何NOLOGGING设置,直到数据库或表空间退出强制事件记录模式...
仅在支持LOGGING的位置的子集中支持NOLOGGING。仅以下操作支持NOLOGGING模式:
数据标记语言:
由MERGE陈述式产生的UPDATE作业。
数据描述语言:
此外,请参阅此处:http://www.dba-oracle.com/t_nologging_append.htm
deyfvvtc2#
首先,请确保您有oraoop连接器。配置单元版本〉1.4.6有它。其次,这些-D命令对命令的位置很敏感。您能用所有参数运行一个简单的sqooop语句吗?看看您面临的问题。理想的带有所有-D选项的sqoop语句如下所示