Как перенести много данных из экземпляра AWS Oracle RDS в S3?

У меня есть огромное количество данных в одной таблице (~ 7 миллиардов строк) в экземпляре AWS Oracle RDS. Конечным результатом является то, что я хочу, чтобы эта таблица хранилась в S3 в виде значений, разделенных вертикальной чертой, чтобы я мог прочитать ее в EMR. В основном это одноразовая вещь, поэтому мне нужно, чтобы она работала точно и без повторного запуска всей загрузки, потому что что-то истекло; Мне все равно, как это работает или насколько сложно/раздражающе это настроить. У меня есть root-доступ к коробке Oracle. Я посмотрел на конвейеры данных, но оказалось, что они поддерживают только MySQL, и мне нужно, чтобы он работал с Oracle. Кроме того, у меня недостаточно места на жестком диске, чтобы выгрузить всю таблицу в CSV на экземпляре Oracle, а затем загрузить ее. Как я могу это сделать?


person Jeff Tucker    schedule 03.03.2015    source источник


Ответы (2)


Для этого можно использовать Sqoop (http://sqoop.apache.org/). Вы можете написать сценарий sqoop, который можно запланировать как «действие EMR» в конвейере данных.

Sqoop использует Hadoop и может открывать несколько подключений к Oracle и выполнять загрузку.

Вы можете хранить необработанные данные на S3 и напрямую считывать их с EMR. Или вы можете скопировать это в EMR, используя действие «S3Distcp» (снова запланированное на конвейере данных, если хотите).

Если у вас нет необходимости в планировании, вы можете развернуть кластер EMR с помощью консоли EMR и запустить на нем Sqoop.

person user1452132    schedule 04.03.2015
comment
Это выглядит многообещающе! Спасибо - person Jeff Tucker; 04.03.2015
comment
Это сработало! В итоге я просто использовал sqoop непосредственно в качестве шага в своем кластере EMR, а затем использовал s3distcp в качестве еще одного шага, поэтому нет конвейера данных, но я вижу, как было бы относительно легко включить это в конвейер данных в будущем. - person Jeff Tucker; 05.03.2015

Вы можете использовать Python/boto, чтобы сделать то же самое в меньшем масштабе. Чтобы скопировать 7 миллиардов записей, вам понадобится «всего» 8 дней с использованием одного потока. Вы можете создать очередь из 100 потоков и параллельно обрабатывать разделы таблицы Oracle. Возможно, это не производственное решение, но оно сработало для моих специальных задач.

Взгляните на это Oracle_To_S3_Data_Uploader

person Alex B    schedule 06.04.2016