Требуется ли presto хранилище метаданных улья для чтения файлов паркета из S3?

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

Kafka-->Spark-->Parquet<--Presto

Я могу создать паркет в S3, используя Spark, и он отлично работает. Теперь я смотрю на presto и, как мне кажется, обнаружил, что для запроса с parquet требуется мета-хранилище hive. Я не мог заставить presto читать мои паркетные файлы, хотя паркет сохраняет схему. Значит ли это, что во время создания файлов паркета искровое задание должно также хранить метаданные в хранилище метаданных улья?

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

Или вы могли бы пролить свет на это, если есть лучший альтернативный способ?


person Dangerous Scholar    schedule 01.05.2017    source источник
comment
моя схема данных меняется - вы добавляете новые файлы с измененной схемой или перезаписываете все файлы новыми файлами в новой схеме?   -  person Piotr Findeisen    schedule 02.05.2017
comment
@PiotrFindeisen Я не уверен, что слежу за ним, но мой вариант использования - схема данных меняется, поэтому намерение состоит в том, чтобы сгенерировать новые паркетные файлы с новой схемой, а также обновить схему хранилища метаданных улья.   -  person Dangerous Scholar    schedule 02.05.2017
comment
А как насчет старых файлов? Являются ли новые файлы всего лишь частью данных (старые и новые файлы вместе составляют таблицу)? Или новые файлы заменяют старые файлы (и поэтому новая схема заменяет старую схему)?   -  person Piotr Findeisen    schedule 03.05.2017


Ответы (1)


Вы храните файлы Parquet на S3. Возможности Presto S3 - это подкомпонент разъема Hive. Как вы сказали, вы можете позволить Spark определять таблицы в Spark или использовать для этого Presto, например

create table hive.default.xxx (<columns>) 
with (format = 'parquet', external_location = 's3://s3-bucket/path/to/table/dir');

(В зависимости от версии хранилища метаданных Hive и его конфигурации вам может потребоваться использовать s3a вместо s3.)

Технически должно быть возможно создать соединитель, который выводит схемы таблиц из заголовков Parquet, но я не знаю о существующем.

person Piotr Findeisen    schedule 02.05.2017
comment
Спасибо за предложение. Я пытался сделать то же самое, но проблема, с которой я столкнулся, заключалась в том, что я не мог найти способ обновить схему хранилища метаданных улья и одновременно создать файл на s3. По сути, я не мог найти прямого способа сделать и то, и другое за один раз. Я нашел этот api createExternalTable () в Spark, но не так много документации по нему. - person Dangerous Scholar; 02.05.2017