Каков наилучший способ параллельного импорта таблиц Oracle с использованием Sqoop? - PullRequest
0 голосов
/ 28 апреля 2019

Я использую Sqoop для импорта таблиц оракула в HDFS.

У меня около 50 таблиц для импорта, и из 50 таблиц 10-15 таблиц слишком велики (около 50 ГБ).

В первый раз я хочу импортировать их как полную загрузку, а после этого я буду импортировать только инкрементные данные.

В настоящее время я подготовил 2 сценария оболочки следующим образом: - 1. Скрипт для полного дампа (Ежедневно будет выполняться полный дамп) 2. Скрипт для инкрементальных данных (поскольку я уже выполнил полный дамп, теперь он будет получать только инкрементные данные).

И я запланировал эти 2 сценария в определенное время, скажем, в 7:00.

Оба сценария работают нормально, но, как вы можете видеть, он будет параллельно выполнять только два задания sqoop.

Но я хочу запускать 4 задания sqoop одновременно, чтобы получить больше параллелизма.

Итак, как я могу добиться большего параллелизма, выполняя более 2 заданий sqoop параллельно.

Любая помощь в этом отношении будет высоко оценена.

Вот пример моейВсе сценарии: -

sqoop job --exec sqoop_job1

sqoop job --exec sqoop_job2

1 Ответ

0 голосов
/ 29 апреля 2019

Apache Oozie - это инструмент оркестровки, который может помочь вам запускать задания последовательно или параллельно в зависимости от ваших потребностей.Если у вас установлен Apache Oozie, вы можете попробовать это.У него есть действие для sqoop, и вам не нужно идти через скрипт оболочки.Oozie обладает всеми функциями рабочего процесса или инструмента оркестровки, такими как повторный запуск или, если при полной загрузке не удается остановить все и т. Д.

Пример файла workflow.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>
...