Как добавить коннекторы в presto на Amazon EMR

Я установил небольшой кластер EMR с установленным Hive / Presto, я хочу запрашивать файлы на S3 и импортировать их в Postgres на RDS.

Чтобы выполнить запросы на S3 и сохранить результаты в таблице в postgres, я сделал следующее:

  1. Запустил 3-узловой кластер EMR из консоли AWS.
  2. Вручную SSH в главный узел, чтобы создать ВНЕШНЮЮ таблицу в кусте, глядя на корзину S3.
  3. Вручную SSH в каждый из 3 узлов и добавьте новый файл каталога:

    /etc/presto/conf.dist/catalog/postgres.properties 
    

    со следующим содержанием

    connector.name=postgresql
    connection-url=jdbc:postgresql://ip-to-postgres:5432/database
    connection-user=<user>
    connection-password=<pass>
    

    и отредактировал этот файл

    /etc/presto/conf.dist/config.properties
    

    добавление

    datasources=postgresql,hive
    
  4. Перезапустите presto, выполнив следующие действия вручную на всех 3 узлах

    sudo restart presto-server
    

Кажется, эта установка работает хорошо.

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

Есть ли подходящий способ для моего приложения (с использованием boto или других методов) обновлять конфигурации с помощью

  1. Добавление нового файла каталога во все узлы /etc/presto/conf.dist/catalog/ для каждой новой базы данных
  2. Добавление новой записи во все узлы в /etc/presto/conf.dist/config.properties
  3. Изящный перезапуск presto для всего кластера (в идеале, когда он переходит в режим ожидания, но это не является серьезной проблемой.

person Ger    schedule 17.03.2016    source источник
comment
если мой ответ сработал для вас, отметьте его как правильный ответ i.stack.imgur.com/QpogP.png   -  person mostafazh    schedule 04.11.2018


Ответы (3)


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

#!/bin/sh

# "cluster_nodes.txt" with private IP address of each node.
aws emr list-instances --cluster-id <cluster-id> --instance-states RUNNING | grep PrivateIpAddress | sed 's/"PrivateIpAddress"://' | sed 's/\"//g' | awk '{gsub(/^[ \t]+|[ \t]+$/,""); print;}' > cluster_nodes.txt

# For each IP connect with ssh and configure.
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Connecting $line"
    scp -i <PEM file> postgres.properties hadoop@$line:/tmp;
    ssh -i <PEM file> hadoop@$line "sudo mv /tmp/postgres.properties /etc/presto/conf/catalog;sudo chown presto:presto /etc/presto/conf/catalog/postgres.properties;sudo chmod 644 /etc/presto/conf/catalog/postgres.properties; sudo restart presto-server";
done < cluster_nodes.txt
person Root G    schedule 28.09.2018

Во время предоставления кластера: вы можете предоставить сведения о конфигурации во время предоставления.

См. Presto Connector Configuration о том, как добавить это автоматически во время подготовки вашего кластера.

person muruga    schedule 21.12.2016

Вы можете предоставить конфигурацию через консоль управления следующим образом:

Создать консоль EMR кластера

Или вы можете использовать awscli для передачи этих конфигураций следующим образом:

#!/bin/bash

JSON=`cat <<JSON
[
  { "Classification": "presto-connector-postgresql",
    "Properties": {
      "connection-url": "jdbc:postgresql://ip-to-postgres:5432/database",
      "connection-user": "<user>",
      "connection-password": "<password>"
    },
    "Configurations": []
  }
]
JSON`

aws emr create-cluster --configurations "$JSON" # ... reset of params
person mostafazh    schedule 12.10.2017