Настройка автономного сервиса Hive Metastore для Presto и AWS S3
Я работаю в среде, где у меня есть сервис S3, используемый как озеро данных, но не AWS Athena. Я пытаюсь настроить Presto, чтобы иметь возможность запрашивать данные в S3, и я знаю, что мне нужно определить структуру данных в виде таблиц Hive через службу Hive Metastore. Я развертываю каждый компонент в Docker, поэтому я хотел бы сохранить минимальный размер контейнера. Какие компоненты из Hive мне нужны, чтобы можно было просто запустить службу Metastore? На самом деле меня не волнует запуск Hive, только Metastore. Можно ли обрезать то, что нужно, или для этого уже есть предварительно настроенный пакет? Я не смог найти в Интернете ничего, кроме загрузки Hadoop и Hive. Возможно ли то, что я пытаюсь сделать?
1 ответ
Существует обходной путь, что вам не нужно улей, чтобы запустить Presto. Однако я не пробовал этого с какой-либо распределенной файловой системой, такой как s3, но код предполагает, что она должна работать (по крайней мере, с HDFS). На мой взгляд, стоит попробовать, потому что вам вообще не нужен новый образ докера для улья.
Идея состоит в том, чтобы использовать встроенный FileHiveMetastore. Он не задокументирован и не рекомендуется для использования в производстве, но вы можете поиграть с ним. Информация о схеме хранится рядом с данными в файловой системе. Очевидно, у него есть свои плюсы и минусы. Я не знаю деталей вашего варианта использования, поэтому не знаю, соответствует ли он вашим потребностям.
Конфигурация:
connector.name=hive-hadoop2
hive.metastore=file
hive.metastore.catalog.dir=file:///tmp/hive_catalog
hive.metastore.user=cox
Демо-версия:
presto:tiny> create schema hive.default;
CREATE SCHEMA
presto:tiny> use hive.default;
USE
presto:default> create table t (t bigint);
CREATE TABLE
presto:default> show tables;
Table
-------
t
(1 row)
Query 20180223_202609_00009_iuchi, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:00 [1 rows, 18B] [11 rows/s, 201B/s]
presto:default> insert into t (values 1);
INSERT: 1 row
Query 20180223_202616_00010_iuchi, FINISHED, 1 node
Splits: 51 total, 51 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]
presto:default> select * from t;
t
---
1
(1 row)
После всего вышесказанного мне удалось найти на моей машине следующее:
/tmp/hive_catalog/
/tmp/hive_catalog/default
/tmp/hive_catalog/default/t
/tmp/hive_catalog/default/t/.prestoPermissions
/tmp/hive_catalog/default/t/.prestoPermissions/user_cox
/tmp/hive_catalog/default/t/.prestoPermissions/.user_cox.crc
/tmp/hive_catalog/default/t/.20180223_202616_00010_iuchi_79dee041-58a3-45ce-b86c-9f14e6260278.crc
/tmp/hive_catalog/default/t/.prestoSchema
/tmp/hive_catalog/default/t/20180223_202616_00010_iuchi_79dee041-58a3-45ce-b86c-9f14e6260278
/tmp/hive_catalog/default/t/..prestoSchema.crc
/tmp/hive_catalog/default/.prestoSchema
/tmp/hive_catalog/default/..prestoSchema.crc
Это теперь доступно автономно /hive-standalone-metastore-3.0.0/
в дистрибутиве Apache Hive.
Начиная с Hive 3.0, Metastore выпускается в виде отдельного пакета и может работать без остальной части Hive. Это называется автономным режимом.
По умолчанию Metastore настроен для использования с Hive, поэтому в этой конфигурации необходимо изменить несколько параметров конфигурации.
metastore.task.threads.always -> org.apache.hadoop.hive.metastore.events.EventCleanerTask,org.apache.hadoop.hive.metastore.MaterializationsCacheCleanerTask
metastore.expression.proxy -> org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy
Необходимость настраивать улей только для метастаза кажется действительно громоздкой. Вы рассматривали возможность использования каталога данных клея AWS? Таким образом, вам не придется ничего управлять. Вы можете найти подробную информацию здесь: https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto-glue.html
Мне удалось интегрироваться с AWS S3 с помощью Presto SQL и HMS 3.0. Я сделал запись, если это поможет. https://www.linkedin.com/pulse/presto-sql-s3-abhishek-gupta