2016-01-21 2 views
0

Просто интересно, работает ли предикат Parquet также на S3, а не только на HDFS. В частности, если мы используем Spark (без EMR).- предикат Parquet работает на S3, используя Spark non EMR?

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

ответ

0

Да. Откат фильтра не зависит от базовой файловой системы. Это зависит только от spark.sql.parquet.filterPushdown и типа фильтра (не все фильтры могут быть сдвинуты вниз).

См. https://github.com/apache/spark/blob/v2.2.0/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetFileFormat.scala#L313 для логики выталкивания.

+1

Согласно Эмили Curtin на Спарк Summit, это зависит от «файловой системы» (в данном случае хранилище объектов), так как S3 не поддержка произвольного доступа. https://youtu.be/_0Wpwj_gvzg?t=1307 – andresp

+0

Спасибо! И еще один подтвержденный ответ также говорит, что я неправ. Я снова просмотрел код в Spark 2.2.0, и он все еще не зависит от файловой системы. Но это может косвенно зависеть от этого. –

+2

Но у S3 есть случайный доступ: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html#ExampleGetRangeRequestHeaders И Hortonworks рассказывает об отключении фильтра на S3: https: //hortonworks.github. io/hdp-aws/s3-spark/index.html # чтение-орк-и-паркет-наборы данных –

0

Spark использует паркет HDFS & s3 библиотеки, поэтому работает одна и та же логика. (и в искровой версии 1.6 они добавили еще более быстрый ярлык для файлов паркетных схем)

3

Мне было интересно это, поэтому я просто проверил его. Мы используем EMR-кластеры и Spark 1.6.1.

  • Я создал некоторые фиктивные данные в Spark и сохранил его как файл паркета локально, а также на S3.
  • Я создал несколько заданий Spark с различными типами фильтров и выборами столбцов. Я запускал эти тесты один раз для локального файла и один раз для файла S3.
  • Затем я использовал сервер истории искры, чтобы узнать, сколько данных каждая работа имела в качестве входных данных.

Результаты:

  • Для локального паркетного файла: Результаты показали, что выбор колонки и фильтры были вытеснены до чтения, как размер входного был уменьшен, когда работа содержала фильтры или выбор столбцов.
  • Для файла паркета S3: Размер ввода всегда был таким же, как и задание искры, которое обрабатывало все данные. Ни один из выбранных фильтров или столбцов не был нажат до считывания. Файл паркета всегда был полностью загружен с S3. Несмотря на то, что в плане запросов (.queryExecution.executedPlan) показано, что фильтры были сдвинуты вниз.

Я добавлю более подробную информацию о тестах и ​​результатах, когда у меня будет время.

0

Вот ключи, я бы рекомендовал для S3A работы

spark.sql.parquet.filterPushdown true 
spark.sql.parquet.mergeSchema false 
spark.hadoop.parquet.enable.summary-metadata false 

spark.sql.orc.filterPushdown true 
spark.sql.orc.splits.include.file.footer true 
spark.sql.orc.cache.stripe.details.size 10000 

spark.sql.hive.metastorePartitionPruning true 
spark.speculation false 
spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 2 
spark.hadoop.mapreduce.fileoutputcommitter.cleanup.skipped true 
+0

Каков наилучший способ установить эти значения?Я использую Spark в кластере AWS EMR, и я установил эти (сводные метаданные и версию алгоритма) в сценарий Scala. И я использую filterPushdown и mergeSchema только как опции для чтения/записи Parquet. Но я хочу как-то избавиться от _ $ folder $ файлов, которые записаны на S3. –