У меня есть огромное количество данных в одной таблице (~ 7 миллиардов строк) в экземпляре AWS Oracle RDS. Конечным результатом является то, что я хочу, чтобы эта таблица хранилась в S3 в виде значений, разделенных вертикальной чертой, чтобы я мог прочитать ее в EMR. В основном это одноразовая вещь, поэтому мне нужно, чтобы она работала точно и без повторного запуска всей загрузки, потому что что-то истекло; Мне все равно, как это работает или насколько сложно/раздражающе это настроить. У меня есть root-доступ к коробке Oracle. Я посмотрел на конвейеры данных, но оказалось, что они поддерживают только MySQL, и мне нужно, чтобы он работал с Oracle. Кроме того, у меня недостаточно места на жестком диске, чтобы выгрузить всю таблицу в CSV на экземпляре Oracle, а затем загрузить ее. Как я могу это сделать?
Как перенести много данных из экземпляра AWS Oracle RDS в S3?
Ответы (2)
Для этого можно использовать Sqoop (http://sqoop.apache.org/). Вы можете написать сценарий sqoop, который можно запланировать как «действие EMR» в конвейере данных.
Sqoop использует Hadoop и может открывать несколько подключений к Oracle и выполнять загрузку.
Вы можете хранить необработанные данные на S3 и напрямую считывать их с EMR. Или вы можете скопировать это в EMR, используя действие «S3Distcp» (снова запланированное на конвейере данных, если хотите).
Если у вас нет необходимости в планировании, вы можете развернуть кластер EMR с помощью консоли EMR и запустить на нем Sqoop.
Вы можете использовать Python/boto, чтобы сделать то же самое в меньшем масштабе. Чтобы скопировать 7 миллиардов записей, вам понадобится «всего» 8 дней с использованием одного потока. Вы можете создать очередь из 100 потоков и параллельно обрабатывать разделы таблицы Oracle. Возможно, это не производственное решение, но оно сработало для моих специальных задач.
Взгляните на это Oracle_To_S3_Data_Uploader