Объедините небольшие файлы из S3, чтобы создать файл 10 Мб - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в карте уменьшить. У меня есть ведро s3, которое получает 3000 файлов каждую минуту. Я пытаюсь использовать Map Reduce для объединения этих файлов, чтобы сделать файл размером 10 -100 МБ. Код python будет использовать Mrjob и будет работать на aws EMR. Документация Mrjob гласит, что mapper_raw может использоваться для передачи целых файлов в маппер.

class MRCrawler (MRJob):

def mapper_raw(self, wet_path, wet_uri):
    from warcio.archiveiterator import ArchiveIterator

    with open(wet_path, 'rb') as f:
        for record in ArchiveIterator(f):
            ...

Есть ли способ ограничить его чтением только 5000 файлов в запустите один и удалите эти файлы после того, как редуктор сохранит результаты на S3, чтобы те же файлы не были выбраны при следующем запуске.

1 Ответ

0 голосов
/ 02 марта 2020

вы можете сделать следующим образом

  1. настроить SQS на корзине s3
  2. иметь лямбду, которая запускается cron; который читает события из sqs и копирует соответствующие файлы в промежуточную папку - вы можете настроить эту лямбду на чтение только 5000 msgs в данный момент времени.
  3. выполнить всю вашу обработку в верхней части промежуточной папки, и после того, как вы выполните задание ur spark в emr, очистите промежуточную папку

это должно сделать

...