Размер блока объекта FileStatus

#hadoop #hdfs

#hadoop #hdfs

Вопрос:

Согласно руководству по HDFS, для файлов меньшего размера hadoop не выделяет полный блок для хранения данных файла на узле данных. Я использую FileStatus с использованием java api для подключения для извлечения информации метаданных, связанной с путем к файлу. Ниже приведен приведенный код.

 ...
FileSystem fs = FileSystem.get(URI.create("hdfs://10.0.7.111:8020/"), conf);
iterator = fs.listFiles(new Path("/"), true);           
            while(iterator.hasNext()){
                LocatedFileStatus status = iterator.next();             
                Path path = status.getPath();               
                System.out.println(path);
                FileStatus status1 = FileSystem.get(URI.create(path.toString()), conf).getFileStatus(path);
                System.out.println(status1.isDirectory());
                System.out.println(status1.isFile());
                System.out.println("Length "   status1.getLen());
                System.out.println(status1.getReplication());
                System.out.println("Block Size"   status1.getBlockSize());              
            }
...
  

Я ожидаю, что размер блока будет равен размеру файла, но отображать 128 МБ. Ниже приведен результат. Правильно ли я понимаю? Заранее благодарю за ответ.

 File : hdfs://10.0.7.111:8020/t1/test1.txt
...
Length : 53
...
Block Size : 134217728
  

Ответ №1:

Размер блока в Hadoop имеет совсем другое значение, чем то, к которому вы могли бы привыкнуть при сравнении с часто используемыми нами нераспределенными файловыми системами (HDFS, EXT3, FAT32 и т.д.). Вам вообще не следует беспокоиться о потраченном впустую пространстве и размере блока, как это было бы в других файловых системах.

Размер блока в HDFS означает только это: 1) при сохранении файла HDFS разделит файл на блоки и сохранит их на разных компьютерах, чтобы равномерно распределить данные по нескольким машинам

2) при чтении на каждый блок будет выполняться одна задача mapper, позволяющая выполнять параллелизацию при обработке больших файлов

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