Як налаштувати Trino та Superset на Minikube?

Що таке Trino?

Trino — це розподілений механізм запитів, який обробляє дані паралельно на кількох серверах. Існує два типи серверів Trino: координатори та робітники. Наступні розділи описують ці сервери та інші компоненти архітектури Trino.

Що таке Apache Superset?

Apache Superset — це сучасний веб-додаток для бізнес-аналітики, готовий до використання на підприємствах. Він швидкий, легкий, інтуїтивно зрозумілий і має безліч налаштувань, які дозволяють користувачам з будь-яким рівнем навичок легко досліджувати та візуалізувати свої дані, від простих кругових діаграм до детальних геопросторових графіків на deck.gl.

Для цього проекту я використовував такі бази даних як бекенди для Trino.

  1. Mysql — Inventory
  2. Mysql — Petclinic
  3. Mongodb Atlas

Я налаштував Trino та Superset для отримання даних з вищезазначених баз даних.

pic

Налаштування баз даних:

1. Mysql — Inventory

Використовуйте наступний Yaml для створення тестової бази даних для інвентаризації:

apiVersion: apps/v1   
 kind: Deployment   
 metadata:   
 name: mysql-inventory   
 spec:   
 selector:   
 matchLabels:   
 app: mysql-inventory   
 strategy:   
 type: Recreate   
 template:   
 metadata:   
 labels:   
 app: mysql-inventory   
 spec:   
 containers:   
 - image: quay.io/debezium/example-mysql:2.4   
 name: mysql-inventory   
 env:   
 - name: MYSQL_ROOT_PASSWORD   
 value: rootpass   
 - name: MYSQL_USER   
 value: mysqluser   
 - name: MYSQL_PASSWORD   
 value: mysqlpw   
 ports:   
 - containerPort: 3306   
 name: mysql-inventory   

 ---   

 apiVersion: v1   
 kind: Service   
 metadata:   
 name: mysql-inventory   
 spec:   
 ports:   
 - port: 3306   
 selector:   
 app: mysql-inventory   
 clusterIP: None

Використовуйте наступні облікові дані для підключення до бази даних, запустивши команду в pod: petclinic/petclinic

pic

**2.

Mysql2 — Petclinic

Використовуйте наступний Yaml для створення тестової бази даних для Petclinic:

kind: Service   
 apiVersion: v1   
 metadata:   
 name: mysql-petclinic   
 labels:   
 app: mysql-petclinic   
 spec:   
 ports:   
 - name: 3306-tcp   
 protocol: TCP   
 port: 3306   
 targetPort: 3306   
 - name: 33060-tcp   
 protocol: TCP   
 port: 33060   
 targetPort: 33060   
 internalTrafficPolicy: Cluster   
 type: ClusterIP   
 ipFamilyPolicy: SingleStack   
 sessionAffinity: None   
 selector:   
 app: mysql-petclinic   
 deployment: mysql-petclinic   
 ---   
 apiVersion: v1   
 data:   
 init.sql: |   
 CREATE TABLE IF NOT EXISTS vets (   
 id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   
 first_name VARCHAR(30),   
 last_name VARCHAR(30),   
 INDEX(last_name)   
 ) engine=InnoDB;   

 CREATE TABLE IF NOT EXISTS specialties (   
 id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   
 name VARCHAR(80),   
 INDEX(name)   
 ) engine=InnoDB;   

 CREATE TABLE IF NOT EXISTS vet_specialties (   
 vet_id INT(4) UNSIGNED NOT NULL,   
 specialty_id INT(4) UNSIGNED NOT NULL,   
 FOREIGN KEY (vet_id) REFERENCES vets(id),   
 FOREIGN KEY (specialty_id) REFERENCES specialties(id),   
 UNIQUE (vet_id,specialty_id)   
 ) engine=InnoDB;   

 CREATE TABLE IF NOT EXISTS types (   
 id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   
 name VARCHAR(80),   
 INDEX(name)   
 ) engine=InnoDB;   

 CREATE TABLE IF NOT EXISTS owners (   
 id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   
 first_name VARCHAR(30),   
 last_name VARCHAR(30),   
 address VARCHAR(255),   
 city VARCHAR(80),   
 telephone VARCHAR(20),   
 INDEX(last_name)   
 ) engine=InnoDB;   

 CREATE TABLE IF NOT EXISTS pets (   
 id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   
 name VARCHAR(30),   
 birth_date DATE,   
 type_id INT(4) UNSIGNED NOT NULL,   
 owner_id INT(4) UNSIGNED NOT NULL,   
 INDEX(name),   
 FOREIGN KEY (owner_id) REFERENCES owners(id),   
 FOREIGN KEY (type_id) REFERENCES types(id)   
 ) engine=InnoDB;   

 CREATE TABLE IF NOT EXISTS visits (   
 id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   
 pet_id INT(4) UNSIGNED NOT NULL,   
 visit_date DATE,   
 description VARCHAR(255),   
 FOREIGN KEY (pet_id) REFERENCES pets(id)   
 ) engine=InnoDB;   

 INSERT IGNORE INTO vets VALUES (1, 'James', 'Carter');   
 INSERT IGNORE INTO vets VALUES (2, 'Helen', 'Leary');   
 INSERT IGNORE INTO vets VALUES (3, 'Linda', 'Douglas');   
 INSERT IGNORE INTO vets VALUES (4, 'Rafael', 'Ortega');   
 INSERT IGNORE INTO vets VALUES (5, 'Henry', 'Stevens');   
 INSERT IGNORE INTO vets VALUES (6, 'Sharon', 'Jenkins');   

 INSERT IGNORE INTO specialties VALUES (1, 'radiology');   
 INSERT IGNORE INTO specialties VALUES (2, 'surgery');   
 INSERT IGNORE INTO specialties VALUES (3, 'dentistry');   

 INSERT IGNORE INTO vet_specialties VALUES (2, 1);   
 INSERT IGNORE INTO vet_specialties VALUES (3, 2);   
 INSERT IGNORE INTO vet_specialties VALUES (3, 3);   
 INSERT IGNORE INTO vet_specialties VALUES (4, 2);   
 INSERT IGNORE INTO vet_specialties VALUES (5, 1);   

 INSERT IGNORE INTO types VALUES (1, 'cat');   
 INSERT IGNORE INTO types VALUES (2, 'dog');   
 INSERT IGNORE INTO types VALUES (3, 'lizard');   
 INSERT IGNORE INTO types VALUES (4, 'snake');   
 INSERT IGNORE INTO types VALUES (5, 'bird');   
 INSERT IGNORE INTO types VALUES (6, 'hamster');   

 INSERT IGNORE INTO owners VALUES (1, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023');   
 INSERT IGNORE INTO owners VALUES (2, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749');   
 INSERT IGNORE INTO owners VALUES (3, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763');   
 INSERT IGNORE INTO owners VALUES (4, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198');   
 INSERT IGNORE INTO owners VALUES (5, 'Peter', 'McTavish', '2387 S.
Вставка 'Fair Way', 'Madison', '6085552765');   
 INSERT IGNORE INTO owners VALUES (6, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654');   
 INSERT IGNORE INTO owners VALUES (7, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387');   
 INSERT IGNORE INTO owners VALUES (8, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683');   
 INSERT IGNORE INTO owners VALUES (9, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435');   
 INSERT IGNORE INTO owners VALUES (10, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487');   
 INSERT IGNORE INTO owners VALUES (11, 'Burr', 'Sutter', '123 ABC Lane', 'Wonderland', '5555555555');   

 INSERT IGNORE INTO pets VALUES (1, 'Leo', '2000-09-07', 1, 1);   
 INSERT IGNORE INTO pets VALUES (2, 'Basil', '2002-08-06', 6, 2);   
 INSERT IGNORE INTO pets VALUES (3, 'Rosy', '2001-04-17', 2, 3);   
 INSERT IGNORE INTO pets VALUES (4, 'Jewel', '2000-03-07', 2, 3);   
 INSERT IGNORE INTO pets VALUES (5, 'Iggy', '2000-11-30', 3, 4);   
 INSERT IGNORE INTO pets VALUES (6, 'George', '2000-01-20', 4, 5);   
 INSERT IGNORE INTO pets VALUES (7, 'Samantha', '1995-09-04', 1, 6);   
 INSERT IGNORE INTO pets VALUES (8, 'Max', '1995-09-04', 1, 6);   
 INSERT IGNORE INTO pets VALUES (9, 'Lucky', '1999-08-06', 5, 7);   
 INSERT IGNORE INTO pets VALUES (10, 'Mulligan', '1997-02-24', 2, 8);   
 INSERT IGNORE INTO pets VALUES (11, 'Freddy', '2000-03-09', 5, 9);   
 INSERT IGNORE INTO pets VALUES (12, 'Lucky', '2000-06-24', 2, 10);   
 INSERT IGNORE INTO pets VALUES (13, 'Sly', '2002-06-08', 1, 10);   

 INSERT IGNORE INTO visits VALUES (1, 7, '2010-03-04', 'rabies shot');   
 INSERT IGNORE INTO visits VALUES (2, 8, '2011-03-04', 'rabies shot');   
 INSERT IGNORE INTO visits VALUES (3, 8, '2009-06-04', 'neutered');   
 INSERT IGNORE INTO visits VALUES (4, 7, '2008-09-04', 'spayed');   
 immutable: false   
 kind: ConfigMap   
 metadata:   
 name: mysql-db-init   
 ---   
 apiVersion: apps/v1   
 kind: Deployment   
 metadata:   
 labels:   
 app: mysql-petclinic   
 name: mysql-petclinic   
 spec:   
 progressDeadlineSeconds: 600   
 replicas: 1   
 revisionHistoryLimit: 10   
 selector:   
 matchLabels:   
 app: mysql-petclinic   
 strategy:   
 rollingUpdate:   
 maxSurge: 25%   
 maxUnavailable: 25%   
 type: RollingUpdate   
 template:   
 metadata:   
 creationTimestamp: null   
 labels:   
 app: mysql-petclinic   
 deployment: mysql-petclinic   
 spec:   
 containers:   
 - env:   
 - name: MYSQL_USER   
 value: petclinic   
 - name: MYSQL_PASSWORD   
 value: petclinic   
 - name: MYSQL_ROOT_PASSWORD   
 value: petclinic   
 - name: MYSQL_DATABASE   
 value: petclinic   
 image: 'docker.io/mysql:latest'   
 imagePullPolicy: Always   
 name: mysql-petclinic   
 ports:   
 - containerPort: 3306   
 protocol: TCP   
 - containerPort: 33060   
 protocol: TCP   
 terminationMessagePath: /dev/termination-log   
 terminationMessagePolicy: File   
 volumeMounts:   
 - mountPath: /var/lib/mysql   
 name: mysql-1   
 - mountPath: /docker-entrypoint-initdb.d   
 name: mysql-db-init   
 dnsPolicy: ClusterFirst   
 restartPolicy: Always   
 schedulerName: default-scheduler   
 terminationGracePeriodSeconds: 30   
 volumes:   
 - name: mysql-1   
 - configMap:   
 defaultMode: 493   
 name: mysql-db-init   
 name: mysql-db-init

Використовуйте наступні облікові дані для підключення до бази даних, запустивши команду в pod: mysqluser/mysqlpw

pic

3. Mongo

Скоро буде!!

4. Postgres

Скоро буде!!

Налаштування Trino на Minikube:

  1. Додати репозиторій Helm
$ helm repo add trino https://trinodb.github.io/charts
  1. Встановіть Trino за допомогою helm chart
$ helm install example-trino-cluster trino/trino
  1. Перевірте Pods
    Оновіть Config Map [example-trino-cluster-catalog] для Trino:
data:   
 mongo.properties: |   
 connector.name=mongodb   

 mongodb.connection-url=mongodb+srv://user:[email protected]/   
 mysqlinventory.properties: |   
 connector.name=mysql   
 connection-url=jdbc:mysql://mysql-inventory:3306   
 connection-user=mysqluser   
 connection-password=mysqlpw   
 mysqlpetclinic.properties: |   
 connector.name=mysql   
 connection-url=jdbc:mysql://mysql-petclinic:3306   
 connection-user=petclinic   
 connection-password=petclinic   
 tpcds.properties: |   
 connector.name=tpcds   
 tpcds.splits-per-node=4   
 tpch.properties: |   
 connector.name=tpch   
 tpch.splits-per-node=4
  1. Перезапустіть деплойменти для Trino
$ kubectl rollout restart -n trino-superset deployment example-trino-cluster-coordinator
  1. Порт-форвардинг для Trino CLI, щоб він міг слухати кластер Trino.
$ PODNAME=$(kubectl -n trino-superset get pods -o NAME| grep coordinator)  

$ kubectl -n trino-superset port-forward $POD_NAME 8080:8080
  1. Завантажте trino-cli з наступного місця.

  2. Java-додаток надасть доступ до trino-cli, запустіть запити, використовуючи контекст і назву каталогу.

pic

Налаштування Superset:

  1. Додайте репозиторій helm для Superset
$ helm repo add superset https://apache.github.io/superset  

"superset" був доданий до ваших репозиторіїв
  1. Встановіть Superset за допомогою helm та custom values.yaml з бібліотекою sqlalchemy

Використовуйте наступний файл values.yaml для конфігурації бібліотеки sqlalchemy для Trino

bootstrapScript: |   

 #!/bin/bash   
 pip install sqlalchemy-trino &&\   
 if [! -f ~/bootstrap]; then echo "Running Superset with uid {{   
 .Values.runAsUser }}" > ~/bootstrap; fi
$ helm upgrade --install --values values.yaml superset superset/superset
  1. Порт-форвардинг для Trino CLI, щоб він міг слухати кластер Trino.
$ kubectl port-forward service/superset 8088:8088 --namespace superset
  1. Увійдіть у Superset з наступними обліковими даними: admin / admin

  2. Створіть з'єднання Trino в Superset

Перейдіть до Налаштування > Підключення до баз даних і натисніть на +Іконка бази даних для створення нового підключення до бази даних

pic

Використовуйте наступний рядок підключення [відредагуйте його відповідно]:

trino://[email protected]:8080
  1. Запускайте запити до ваших баз даних через інтерфейс Superset.

Перейдіть до Sql Lab в верхньому меню та запускайте ваші SQL запити.

pic

Використовуйте команди для отримання результатів з кількох баз даних.

SELECT * from mysqlinventory.inventory.customers;  

SELECT * from mysqlpetclinic.petclinic.owners;  

SELECT * from mongo.sample_mflix.users where name like "%Stark%";




Перекладено з: [How to Setup Trino and Superset on Minikube ?](https://medium.com/@vishnoiabhishek1/how-to-setup-trino-and-superset-on-minikube-6990e0521ae8)

Leave a Reply

Your email address will not be published. Required fields are marked *