HAR-файл Hadoop: фаза перемешивания

Файлы Hadoop Archive (HAR) позволяют объединять несколько файлов в Hadoop, чтобы избежать проблемы с массивными небольшими файлами. HAR использует инфраструктуру Hadoop MapReduce для создания своих файлов и требует от пользователя загружать все файлы в HDFS ранее. Как только мы загрузим наши файлы в HDFS, мы можем запустить задание HAR MapReduce, чтобы создать файл HAR.

* Я сделал несколько поисков в Google, чтобы увидеть, как работает HAR, но многие мои вопросы остаются без ответа. *

Мои вопросы:

  1. Как HAR MapReduce Job выбирает входные для него задачи карты.
  2. Объединяет ли каждая задача карты входные файлы в промежуточный файл, который представляет выходные данные задачи карты?
  3. И, наконец, как выполняется этап перемешивания задания HAR MapReduce.

Я провел несколько экспериментов, и после того, как я понял, что создание файла HAR чрезвычайно медленное по сравнению с созданием SequenceFile или MapFile. Это кажется мне абсурдным, потому что с MapReduce создание файла HAR идет параллельно, в отличие от SequenceFiles и MapFile, где файлы обрабатываются один за другим.

Столкнувшись с этим, я посмотрел на возможную причину медленного создания файла HAR.

Чтобы создать мой SequenceFile и мой MapFile, я не загружал все файлы в кластер Hadoop. Оценивая время создания каждого файла, я не учел в случае HAR время, которое потребовалось мне для загрузки всех файлов в HDFS. Поскольку HAR использует MapReduce, я посмотрел, как работает MapReduce, и перечислил 6 дисковых операций:

Уменьшение карты

  1. Для каждой задачи карты входные данные задачи, загруженные с диска, и выходные данные задачи записываются обратно на диск. Это заставляет меня предположить, что HAR Job на этом этапе читает некоторые файлы на входе и объединяет их для генерации выходных данных задачи карты.

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

  3. Сокращение выполняется путем считывания на диске выходных данных фазы тасования и сортировки, которые составляют входные данные фазы сокращения, которые генерируют конечный выходной сигнал. После того, как я проанализирую также, как выполняется создание MapFile (это папка, содержащая файлы последовательности буксировки: данные и индекс): данные добавляются в SequenceFile парой ключ-значение, где ключ и значение должны иметь тип Writable, Для каждого файла, который я хочу добавить в свой SequenceFile, я создаю объект Text, используя имя файла, и из двоичного содержимого файла я создаю BytesWritable, который добавляю в SequenceFile, как показано на следующем коде:

    public long creatMapFile () выбрасывает IOException {

    Path path = new Path(mapFilePath);
    
    if (fs.exists(path)) {
        fs.delete(path, true);
    }
    
    MapFile.Writer.Option wKeyOpt = MapFile.Writer.keyClass(Text.class);
    SequenceFile.Writer.Option wValueOpt = SequenceFile.Writer.valueClass(BytesWritable.class);
    
    long currentTimeMillis = System.currentTimeMillis();
    
    try (MapFile.Writer writer = new MapFile.Writer(conf, path, wKeyOpt, wValueOpt)) {
    
        List<FileStatus> fses = Arrays.asList(lfs.listStatus(new Path(localDataPath)));
        fses.sort((x, y) -> x.getPath().getName().compareTo(y.getPath().getName()));
        for (FileStatus status : fses) {
            if (status.isFile()) {
                byte[] bs = new byte[(int) status.getLen()];
                lfs.open(status.getPath()).readFully(bs);
                writer.append(new Text(status.getPath().getName()), new BytesWritable(bs));
            }
        }
    }
    
    return = System.currentTimeMillis() - currentTimeMillis;
    

    }

Для Sequence и MapFiles я думаю, что они требуют только двух дисковых операций: при чтении небольшого файла и при добавлении содержимого файла в большой файл. Если мои предположения верны, то являются ли многочисленные операции с дисками, требуемые MapReduce, замедляющими создание файла HAR по сравнению с архивными файлами других типов?

В противном случае, почему создание файла HAR медленнее, чем MapFile, несмотря на то, что HAR использует MapReduce.

0 ответов

Другие вопросы по тегам