Что управляет количеством разделов при чтении файлов Parquet?

Моя установка:

Два кластера Spark. Один на EC2 и один на Amazon EMR. Оба со Spark 1.3.1.

Кластер EMR был установлен с помощью emr-bootstrap-actions. Кластер EC2 был установлен со сценариями EC2 Spark по умолчанию.

Код:

Прочитайте папку, содержащую 12 файлов Parquet, и подсчитайте количество разделов.

val logs = sqlContext.parquetFile(“s3n://mylogs/”)
logs.rdd.partitions.length

Наблюдения:

  • В EC2 этот код дает мне 12 разделов (по одному на файл, имеет смысл).
  • В EMR этот код дает мне 138 (!) разделов.

Вопрос:

Что управляет количеством разделов при чтении файлов Parquet?

Точно такую ​​же папку я читал на S3, с точно таким же релизом Spark. Это наводит меня на мысль, что могут быть некоторые параметры конфигурации, которые управляют тем, как происходит разбиение. У кого-нибудь есть больше информации об этом?

Мы будем очень признательны за идеи.

Спасибо.

ОБНОВЛЕНИЕ:

Похоже, что многие разделы созданы реализацией файловой системы EMR S3 (com.amazon.ws.emr.hadoop.fs.EmrFileSystem).

При удалении

<property><name>fs.s3n.impl</name><value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value></property>

из core-site.xml (таким образом возвращаясь к файловой системе Hadoop S3), я получаю 12 разделов.

При работе с EmrFileSystem кажется, что количество разделов можно контролировать с помощью:

<property><name>fs.s3n.block.size</name><value>xxx</value></property>

Может ли быть более чистый способ управления количеством разделов при использовании EmrFileSystem?


person Eric Eijkelenboom    schedule 11.05.2015    source источник
comment
Если данные находятся в HDFS в EMR, дает ли это вам такое же большее количество разделов?   -  person ChristopherB    schedule 12.05.2015
comment
Похоже, что многие разделы исходят из реализации файловой системы EMR S3 (com.amazon.ws.emr.hadoop.fs.EmrFileSystem). Смотрите мое обновление. Это заставляет меня предположить, что чтение из HDFS вернет «нормальное» количество разделов, поскольку при этом будет использоваться собственная реализация Hadoop fs (хотя это не проверялось).   -  person Eric Eijkelenboom    schedule 13.05.2015
comment
Я пришел к такому же выводу, размер блока по умолчанию составляет 64 МБ. Это беспокоит? Больше разделов позволяет выполнять больше параллельных задач. S3 не следит за структурой блоков файловой системы, и данные в любом случае извлекаются из S3 с помощью ранжированных HTTP-запросов. Могут быть накладные расходы задачи, которые, возможно, необходимо сбалансировать с размером блока. Можно настроить размер блока с помощью sc.hadoopConfiguration.set(fs.s3n.block.size).   -  person ChristopherB    schedule 13.05.2015
comment
Ты прав Кристофер. Спасибо за трюк с hadoopConfiguration, не думал об этом. Думаю, мне придется смириться с аппроксимацией количества разделов. Странность ERMFS :)   -  person Eric Eijkelenboom    schedule 13.05.2015