Является ли размер входного разделения постоянным или зависит от логической записи?

Полное руководство Hadoop гласит:

When you have Minimum split size 1, Maximum split size Long.MAX_VALUE, Block 
size 64MB then the Split size is 64MB.

Логические записи TextInputFormat являются строками. Поскольку длина каждой строки различна, как мы можем разделить размер ровно на 64 МБ?


person FourOfAKind    schedule 08.07.2012    source источник


Ответы (2)


Блоки HDFS представляют собой последовательности байтов. Они не знают ни линий, ни какой-либо другой структуры. Таким образом, вы можете разделить только один блок (конечно, размером 64 МБ), заканчивающийся в середине строки (т.е. не включая всю последнюю строку). Когда вы читаете его с помощью TextInputFormat, он также позаботится о том, чтобы прочитать некоторые байты из следующего блока, чтобы вы также получили всю последнюю строку.

person Razvan    schedule 08.07.2012
comment
Могу ли я сказать, что размер разделения не является постоянным? - person FourOfAKind; 08.07.2012
comment
Итак, почему размер разделения не является постоянным в приведенном выше сценарии? За исключением последнего блока, размер сплита должен составлять 64 МБ. Следует отметить, что хотя запись может охватывать несколько блоков, она обрабатывается инфраструктурой Hadoop и прозрачна для конечного пользователя. - person Praveen Sripati; 08.07.2012
comment
размер разделения в этом сценарии составляет 64 МБ + оставшаяся_часть_последней_линии => он может быть не совсем постоянным. - person Razvan; 08.07.2012

Всегда соблюдайте 2 правила:

  1. Определите, находитесь ли вы в середине записи
  2. может поверх этой записи и прочитать следующую полную запись

Первая половина записи становится последней записью предыдущего InputSplit.

person Roger    schedule 31.07.2013