gpt4 book ai didi

python - 使用Sqoop并行导入Oracle表的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 20:26:50 24 4
gpt4 key购买 nike

我正在使用Sqoop将oracle表导入HDFS。

我要导入约50个表,而50个表中有10-15个表太大(约50GB)。

第一次,我想将它们作为满负载导入,然后,我将仅导入增量数据。

目前,我已经准备了两个shell脚本,如下所示:
1.完整转储脚本(每天将进行完整转储)
2.增量数据的脚本(由于我已经进行了完全转储,现在它将仅获取增量数据)。

我已经将这2个脚本安排在某个特定时间(例如上午7点)。

这两个脚本都运行良好,但是如您所见,它将仅并行执行两个sqoop作业。

但是我想一次开始4个工作,以获得更多的并行性。

因此,我如何通过并行执行两个以上的sqoop作业来实现更多的并行性。

任何对此的帮助将不胜感激。

这是我的shell脚本示例:

sqoop job --exec sqoop_job1

sqoop job --exec sqoop_job2

最佳答案

Apache Oozie是一种编排工具,可以帮助您根据需要按顺序或并行运行作业。如果您安装了Apache Oozie,则可以尝试一下。它有一个针对sqoop的 Action ,您不需要通过shell脚本。 Oozie具有工作流程或编排工具的所有功能,例如重新运行或如果满载无法停止所有操作等

示例工作流程.xml,定义了如何运行多个作业

        <?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.2" name="sqoop-wf-fork-example">

<start to="sqoop-wf-fork"/>

<fork name="sqoop-wf-fork">
<path start="sqoop-categories"/>
<path start="sqoop-customers"/>
</fork>


<action name="sqoop-categories">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<command>import --connect jdbc:mysql://localhost:3306/retail_db --username root --password cloudera --table categories --driver com.mysql.jdbc.Driver --delete-target-dir --m 1</command>
</sqoop>
<ok to="joinActions"/>
<error to="fail"/>
</action>

<action name="sqoop-customers">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<command>import --connect jdbc:mysql://localhost:3306/retail_db --username root --password cloudera --table customers --driver com.mysql.jdbc.Driver --delete-target-dir --m 1</command>
</sqoop>
<ok to="joinActions"/>
<error to="fail"/>
</action>

<join name="joinActions" to="end-wf"/>

<kill name="fail">
<message>Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end-wf"/>
</workflow-app>

关于python - 使用Sqoop并行导入Oracle表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55892555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com