Как найти размер файла HDFS

Как найти размер файла HDFS? Какую команду следует использовать для определения размера любого файла в HDFS.

Ответ 1

Вы можете использовать hadoop fs -ls для отображения файлов в текущем каталоге, а также их данных. 5-й столбец вывода команды содержит размер файла в байтах.

Например, команда hadoop fs -ls input вводит следующий вывод:

Found 1 items
-rw-r--r--   1 hduser supergroup      45956 2012-07-19 20:57 /user/hduser/input/sou

Размер файла sou составляет 45956 байт.

Ответ 2

Я также очень hadoop fs -dus <path> использую hadoop fs -dus <path>. Например, если каталог HDFS с именем "/user/frylock/input" содержит 100 файлов, и вам нужен общий размер для всех этих файлов, которые вы могли бы запустить:

hadoop fs -dus /user/frylock/input

и вы вернете общий размер (в байтах) всех файлов в каталоге "/user/frylock/input".

Кроме того, имейте в виду, что HDFS сохраняет данные избыточно, поэтому фактическое физическое хранилище, используемое файлом, может быть в 3 раза или больше, чем то, что сообщается с помощью hadoop fs -ls и hadoop fs -dus.

Ответ 3

Я использовал функцию ниже, которая помогла мне получить размер файла.

public class GetflStatus
{
    public long getflSize(String args) throws IOException, FileNotFoundException
    {
        Configuration config = new Configuration();
        Path path = new Path(args);
        FileSystem hdfs = path.getFileSystem(config);
        ContentSummary cSummary = hdfs.getContentSummary(path);
        long length = cSummary.getLength();
        return length;
    }
}

Ответ 4

См. Приведенную ниже команду с awk-скриптом, чтобы увидеть размер (в GB) отфильтрованного вывода в HDFS:

hadoop fs -du -s /data/ClientDataNew/**A***  | awk '{s+=$1} END {printf "%.3fGB\n", s/1000000000}'

выход ---> 2,089 ГБ

hadoop fs -du -s /data/ClientDataNew/**B***  | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}'

выход ---> 1,724 ГБ

hadoop fs -du -s /data/ClientDataNew/**C***  | awk '{s+=$1} END {printf  "%.3fG\n", s/1000000000}'

выход ---> 0.986GB

Ответ 5

Если вы хотите сделать это через API, вы можете использовать метод getFileStatus().

Ответ 6

hdfs dfs -du -s -h /directory

Это читаемая человеком версия, иначе она будет давать плохие единицы (чуть больше)