Мир больших данных приближается к Kubernetes, и мы уже видим, как многие продукты для обработки данных и искусственного интеллекта / машинного обучения создают свои решения на основе Kubernetes, чтобы гарантировать стабильность, масштабируемость и доступность.
До сих пор большинство решений основывалось на виртуальных машинах, без перечисленных выше уровней оркестрации, автоматизации или управления конфигурацией, что делало эти решения менее масштабируемыми и немного неудобными.
С Kubernetes мы можем предоставить гораздо более масштабируемые решения, которые полностью автоматизированы и сохранят свое состояние после сбоев.
С желанием запускать рабочие нагрузки больших данных в Kubernetes возникает потребность в простом решении, которое будет охватывать большинство сценариев использования организаций, чтобы создать общий язык, сэкономить рабочую силу и основать навыки инженеров на одном компоненте.
Для этого многие организации обращаются к Presto, распределенному механизму запросов SQL, который может извлекать данные из нескольких источников, таких как Elasticseaerch, Cassandra, SQL и S3. С помощью presto вы можете накапливать свои знания в области SQL без необходимости создавать свои собственные сценарии и конвертеры, которые в конечном итоге создают разрозненность организации и мешают вам достичь ваших бизнес-целей.
Возможность Presto запрашивать S3 решает множество проблем, возникающих в мире больших данных. Организации в основном сосредоточены на передаче всех своих данных в Data Lake для хранения структурированных, неструктурированных и полуструктурированных данных, поступающих с устройств Интернета вещей, социальных сетей, внутренних систем и т. Д. во-вторых, вы можете основать свою организацию на Presto, будь то для BI или для обучения алгоритмам AI / ML.
В этой демонстрации я покажу вам, как можно использовать Openshift Container Platform для запуска кластера Presto с помощью Stratbust’s Presto Operator, который будет управлять всем жизненным циклом нашего кластера. Кроме того, мы будем использовать контейнерное хранилище Openshift как для объектного, так и для блочного хранилища, чтобы хранить наши запрошенные данные. Для части анализа данных мы будем использовать оператор Open Data Hub, который предоставит нам возможность подключить Superset к presto, чтобы выполнить некоторый BI-анализ.
Давайте начнем!
Предпосылки
- Работающий кластер Openshift 4.6.3
- Доступный сервис S3 (Mine предоставляется с OCS4.6)
- Работающий кластер OpenDataHub
Установка
Подготовка службы S3
Чтобы начать демонстрацию, сначала давайте взглянем на наши установленные операторы в рамках проекта openshift-storage
, чтобы убедиться, что оператор Openshift Container Storage
полностью установлен:
Теперь, когда у нас установлен оператор и StorageCluster
полностью запущен и работает, давайте проверим, что кластер Ceph, обеспечивающий резервное копирование нашего решения хранения, полностью готов к работе. Для этого мы включим модуль tools, который позволит нам запускать команды Ceph:
oc rsh -n openshift-storage $(oc get pods -n openshift-storage | grep rook-ceph-tools | grep Running | awk '{print $1}')
Теперь запустим ceph -s
, чтобы убедиться, что наш кластер находится в работоспособном состоянии:
$ ceph -s cluster: id: 571a7398-d050-429f-83b0-f758e42e024b health: HEALTH_OK services: mon: 3 daemons, quorum a,b,c (age 13m) mgr: a(active, since 13m) mds: ocs-storagecluster-cephfilesystem:1 {0=ocs-storagecluster-cephfilesystem-b=up:active} 1 up:standby-replay osd: 3 osds: 3 up (since 13m), 3 in (since 13m) rgw: 1 daemon active (s3a.a) task status: scrub status: mds.ocs-storagecluster-cephfilesystem-a: idle mds.ocs-storagecluster-cephfilesystem-b: idle data: pools: 10 pools, 176 pgs objects: 305 objects, 87 MiB usage: 3.1 GiB used, 1.5 TiB / 1.5 TiB avail pgs: 176 active+clean io: client: 938 B/s rd, 45 KiB/s wr, 1 op/s rd, 2 op/s wr
Мы видим, что наш кластер полностью готов к работе, мы можем создать пользователя S3, которому мы дадим возможность взаимодействовать с нашим сервисом OCS S3:
$ radosgw-admin user create --display-name="odh" --uid=odh { "user_id": "odh", "display_name": "odh", "email": "", "suspended": 0, "max_buckets": 1000, "subusers": [], "keys": [ { "user": "odh", "access_key": "HC8V2PT7HX8ZFS8NQ37R", "secret_key": "Y6CENKXozDDikJHQgkbLFM38muKBnmWBsAA1DXyU" } ],
Большой! теперь у нас есть сервис S3, с которым мы можем взаимодействовать.
Загрузите данные в нашу корзину S3
В этом разделе мы загрузим предварительно созданный JSON в корзину S3, чтобы Presto мог запрашивать его. Давайте создадим конфигурацию для awscli
:
$ export AWS_ACCESS_KEY_ID=HC8V2PT7HX8ZFS8NQ37R
$ export AWS_SECRET_ACCESS_KEY=Y6CENKXozDDikJHQgkbLFM38muKBnmWBsAA1DXyU
Важный! используйте те же учетные данные, которые вы создали в предыдущем разделе, чтобы Presto мог видеть созданный сегмент.
Файл JSON, accounts.json
предварительный просмотр:
{"name": "Michael"} {"name": "Shimon", "age": 30, "country": "Israel"} {"name": "Melissa", "age":12, "country": "Spain"} {"name": "Shon", "age":24, "country": "Spain"} {"name": "Jake", "age":28, "country": "US"} {"name": "Kate", "age":50, "country": "Hungary"} {"name": "Aaron", "age":35, "country": "Africa"}
Теперь давайте создадим корзину и загрузим наш файл JSON в корзину S3:
$ aws s3 mb s3://processed-data --endpoint-url http://rgw-openshift-storage.apps.cluster-b601.b601.example.opentlc.com
$ aws s3 cp accounts.json s3://processed-data/accounts.json/ --endpoint-url http://rgw-openshift-storage.apps.cluster-b601.b601.example.opentlc.com
Важно! для создания схемы Presto объект должен быть помещен в префикс S3 (папку). В реальном мире эта фаза выполняется автоматически, так как ваши конвейеры ETL, вероятно, будут обрабатывать данные (бронза-серебро-золото) и перебрасывать все обработанные объекты в корзину Gold, в нашем случае это корзина обработанных данных.
Развертывание нашего кластера Presto
Чтобы Presto сохранял метаданные, мы используем Hive. Поскольку Hive требуется место для хранения всей информации о схемах и таблицах, кластер PostgreSQL следует развернуть заранее.
Для этого мы воспользуемся командой oc
для создания нашего развертывания:
$ oc create -f https://github.com/shonpaz123/cephdemos/raw/master/superset-presto-ocs/01-presto-pg-deployment.yml
Давайте проверим, что база данных PostgreSQL полностью работоспособна:
$ oc get pods
NAME READY STATUS RESTARTS AGE
postgres-68d5445b7c-fpp8x 1/1 Running 0 46
Теперь давайте посмотрим, как наш кластер PostgreSQL ограничил PVC, исходящий из нашего класса хранилища RBD:
$ oc get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE postgres-pv-claim Bound pvc-452121cc-c46f-4444-9424-113f00587e6e 5Gi RWO ocs-storagecluster-ceph-rbd 14m
Большой! наш кластер PostgreSQL готов потреблять данные из OCS! Теперь давайте создадим наш кластер presto, прежде чем мы это сделаем, мы установим Presto Operator, поступающий из Operator Hub:
Сначала мы создадим секрет, который Presto будет использовать для доступа к нашей службе S3, этот секрет будет содержать наш доступ к S3 и секретный ключ:
$ oc create secret generic aws-secret --from-literal=AWS_ACCESS_KEY_ID="HC8V2PT7HX8ZFS8NQ37R" --from-literal=AWS_SECRET_ACCESS_KEY="Y6CENKXozDDikJHQgkbLFM38muKBnmWBsAA1DXyU"
Мы укажем на Престо, чтобы он извлек учетные данные из этого секрета.
Отлично, теперь мы можем создать наш кластер, для этого мы воспользуемся командой oc
, чтобы создать Presto CR для Presto Operator, который в конечном итоге создаст наш кластер со всей необходимой конфигурацией:
$ oc create -f
https://github.com/shonpaz123/cephdemos/raw/master/superset-presto-ocs/02-presto-deployment.yml
Важно! убедитесь, что вы изменили как hive.s3.endpoint
, так и s3Endpoint
, чтобы они указывали на вашу службу S3. Если ваша служба S3 находится внутри самого кластера Openshift, вам следует указать IP-адрес службы S3 ClusterIP для работы с path_style
, например:
$ oc get svc -n openshift-storage | grep rgw
rook-ceph-rgw ClusterIP 172.30.255.77 <none>
Теперь, когда у нас есть IP-адрес S3, мы можем поместить его в Presto CR, чтобы Presto мог его использовать. Давайте проверим, что наш кластер Presto полностью готов к работе:
$ oc get pods NAME READY STATUS RESTARTS AGE hive-metastore-presto-odh-5fd66d5848-w84cw 1/1 Running 0 6m46s postgres-68d5445b7c-fpp8x 1/1 Running 0 13m presto-coordinator-presto-odh-84cf47f6f9-22wx2 2/2 Running 0 6m46s presto-operator-877cb866b-7fmkd 1/1 Running 0 10m presto-worker-presto-odh-7864984fc5-m4jjg 1/1 Running 0 6m46s presto-worker-presto-odh-7864984fc5-rp85m 1/1 Running 0 6m46s
Большой! у нас есть все необходимые ресурсы, чтобы начать запрашивать нашу службу S3! Для этого подключимся к нашему модулю coordinator
:
$ oc rsh $(oc get pods | grep coordinator | grep Running | awk '{print $1}')
Теперь мы подключимся к presto-cli
оболочке, чтобы запустить несколько запросов:
sh-4.4$ presto-cli --catalog hive presto> CREATE SCHEMA hive.accounts WITH (location='s3a://processed-data/accounts.json/'); CREATE SCHEMA
Мы сообщаем Presto, что хотим создать схему, которая будет расположена в определенном префиксе (папке) в нашей корзине S3. Теперь давайте создадим таблицу, которая будет сопоставлена с загруженным ранее JSON:
presto> USE hive.accounts; presto:accounts> CREATE TABLE accounts (name varchar, age int, country varchar) WITH (format = 'json', external_location = 's3a://processed-data/accounts.json/'); CREATE TABLE
Мы переключили наш контекст на использование созданной схемы, затем создали таблицу, которая сопоставляет все поля столбцов с ключами JSON, которые есть в нашей корзине S3, и наконец сказали Presto, что файл, находящийся в корзине, имеет формат JSON.
Там Там Там! настал наш момент :)
Теперь давайте запросим нашу таблицу:
presto:accounts> SELECT * from accounts; name | age | country ---------+------+--------- Michael | NULL | NULL Shimon | 30 | Israel Melissa | 12 | Spain Shon | 24 | Spain Jake | 28 | US Kate | 50 | Hungary Aaron | 35 | Africa Aaron | 35 | Africa (8 rows)
Джекпот! мы только что SQL запросили JSON, находящийся в нашей корзине S3!
В реальной производственной среде вы определенно не будете работать с presto-cli
, и вам понадобится более интеллектуальное решение, для этого мы воспользуемся Superset
, чтобы начать работу по бизнес-аналитике.
Для этого мы воспользуемся оператором Open Data Hub
, который предоставит нам полное развертывание надмножества:
Теперь, когда у нас установлен Superset, давайте войдем в него, чтобы интегрировать с ним Presto. Для этого мы будем искать его маршрут, чтобы иметь доступ к нему извне:
oc get route NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD route.route.openshift.io/superset superset-openshift-operators.apps.cluster-b601.b601.example.opentlc.com superset 8088-tcp None
Теперь войдите в пользовательский интерфейс Superset с учетными данными admin:admin
, если не указано иное.
Перейдите в Базы данных - ›Добавить базу данных и добавьте нашу базу данных учетных записей, расположенную на Presto, в качестве нашей базы данных (вы должны использовать службу Presto ClusterIP, чтобы подключить Suprtset к ней). Наконец, нажмите кнопку Проверить соединение, чтобы убедиться, что все в порядке:
Теперь перейдите в SQL LAb → SQL Editor и начните запрашивать нашу базу данных учетных записей:
Мы можем нажать кнопку Explore
, чтобы создать диаграмму и добавить ее на панель инструментов, я создал некоторые заранее, и это выглядит так:
Здесь мы использовали таблицу счетов от Presto и создали несколько панелей управления бизнес-аналитикой, которые подходят и полезны для нашего бизнеса. Это может значительно улучшить процесс принятия решений.
Большой! Мы только что создали нашу первую работу в области бизнес-аналитики над Openshift!
Заключение
Мы увидели, как мы можем запускать SQL-запросы к службе S3, которые все были расположены в Openshift и предоставлялись полностью управляемыми операторами как часть Openshift Operator Hub. Это позволит снизить TTM и ускорить достижение бизнес-целей, поскольку все это осуществляется на единой платформе - продукты бизнес-аналитики, обработки данных и хранения под одной крышей.
Надеюсь, вам это показалось интересным, увидимся в следующий раз :)