HDFS SQOOP NOLOGGING将任务导出到Oracle数据库

bfnvny8b  于 2022-12-09  发布在  HDFS
关注(0)|答案(2)|浏览(219)

我完全被难住了,因为我试图将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>
cx6n0qe3

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模式:
数据标记语言:

  • 由INSERT或MERGE语句生成的直接路径INSERT(串行或并行)。NOLOGGING不适用于任何

由MERGE陈述式产生的UPDATE作业。

  • 直接加载程序(SQL*Loader)

数据描述语言:

  • CREATE TABLE ... AS SELECT(在NOLOGGING模式下,将记录表的创建,但不记录直接路径插入。)
  • CREATE TABLE ... LOB存储子句... LOB参数... CACHE|无缓存|缓存读取数
  • ALTER TABLE ... LOB存储子句... LOB参数... CACHE|无缓存|CACHE READS(指定记录新创建的LOB列)
  • ALTER TABLE ...修改LOB存储子句...修改LOB参数... CACHE|无缓存|CACHE READS(更改现有LOB列的事件记录)
  • 更改表格...移动
  • ALTER TABLE ...(涉及数据移动的所有分区操作)
  • ALTER TABLE ... ADD PARTITION(仅限散列分区)
  • 更改表...合并分区
  • 更改表...拆分分区
  • 更改表...移动分区
  • 更改表...修改分区...添加子分区
  • 更改表...修改分区...合并子分区
  • 创建索引
  • 更改索引...重建
  • 更改索引...重建[子]分区
  • 更改索引...拆分分区”

此外,请参阅此处:http://www.dba-oracle.com/t_nologging_append.htm

deyfvvtc

deyfvvtc2#

首先,请确保您有oraoop连接器。配置单元版本〉1.4.6有它。其次,这些-D命令对命令的位置很敏感。您能用所有参数运行一个简单的sqooop语句吗?看看您面临的问题。理想的带有所有-D选项的sqoop语句如下所示

sqoop import -Dsqoop.export.records.per.statement=10000 -Dsqoop.export.statements.per.transaction=100 -Doraoop.nologging=true <rest of commands>

相关问题