Моя установка:
Два кластера 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
?
com.amazon.ws.emr.hadoop.fs.EmrFileSystem
). Смотрите мое обновление. Это заставляет меня предположить, что чтение из HDFS вернет «нормальное» количество разделов, поскольку при этом будет использоваться собственная реализация Hadoop fs (хотя это не проверялось). - person Eric Eijkelenboom   schedule 13.05.2015