HDFS: точное значение dfs.block.size - PullRequest
1 голос
/ 16 апреля 2020

В нашем кластере dfs.block.size настроен на 128 МБ, но я видел довольно много файлов размером 68,8 М, что является странным размером. Я был озадачен тем, как именно этот параметр конфигурации влияет на то, как файлы выглядят в HDFS.

  • Первое, что я хочу sh, чтобы убедиться в том, что в идеале будут файлы всех размеров блока размер уже настроен? Здесь я имею в виду в идеале файл и блок в сопоставлении один на один
  • Если файлы не являются небольшими по своей природе, но генерируются заданиями MR, что может быть возможной причиной этих небольших файлов?
  • Еще один момент, который нужно добавить, это то, что мы используем функцию разделения hive dynamici c, которая, я не уверен, является ли источником проблем. Для источника маленьких файлов я проверил этот блог, но он Небольшие файлы Проблема

Но ситуации на самом деле не совпадают с моей, что делает мое замешательство остается. Надеюсь, кто-нибудь может дать мне некоторое представление об этом. Большое спасибо в Advandce.

1 Ответ

1 голос
/ 16 апреля 2020

Файлы могут быть меньше блоков, в этом случае они не занимают весь размер блока в файловой системе. Прочитайте этот ответ: { ссылка }

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

insert overwrite table mytable partition(event_date)
select col1, col2, event_date 
 from some_table;

Например, если вы выполняете указанную выше команду и на последнем шаге всего 200 редукторов и 20 различных разделов event_date, то каждый редуктор создаст файл в каждом разделе. Это приведет к 200x20 = 4000 файлов.

Почему это происходит? Поскольку данные распределяются случайным образом между редукторами, каждый редуктор получает данные всех разделов и создает файлы в каждом разделе.

Если вы добавите distribute by partition key

insert overwrite table mytable partition(event_date)
select col1, col2, event_date 
 from some_table
distribute by event_date;

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

Вы можете добавить что-то еще в дистрибутив, чтобы создать больше файлов (и запустить больше редукторов для лучшего параллелизм). Прочитайте следующие ответы: { ссылка }, { ссылка }, Укажите минимальное количество сгенерированных файлов из Hive insert

...