Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие
Не так давно завершился конкурс разработчиков openEuler University 2020. Наша команда выполнила проект «Разработка клиента Python для openLooKeng» в этом конкурсе, успешно вышла в финал и заняла второе место, а также приобрела новое понимание и опыт сообщества открытого исходного кода. Приглашаем представить здесь наш pyOpenLooKeng и конкурсный процесс.
Что такое openLooKeng?
openLooKeng, ранее известный как Hetu, представляет собой распределенный надежный механизм обработки данных с малой задержкой, который обеспечивает унифицированный интерфейс SQL, высокую производительность, запросы между центрами обработки данных и облаками, расширение источников данных и другие функции, упрощающие интерактивный анализ больших данных. .
openLooKeng использует распределенный SQL-движок FaceBook с открытым исходным кодом Presto для предоставления возможностей интерактивного анализа запросов.Кроме того, он также реализует множество функций, таких как динамическая фильтрация, индексация растровых изображений, несколько кэшей и коннекторы между ЦОД (центр обработки данных, центр обработки данных) и т. д. ., они позволяют openLooKeng иметь лучшую производительность, большую масштабируемость и удобство использования, а также действительно реализовать концепцию «SQL для всего».
Как это делает наш pyOpenLooKeng?
Вот репозиторий нашего проекта:git ee.com/open Euler20…
Краткий анализ проекта
OpenLooKeng принимаетRESTСвязь, включая CLI, JDBC и координатора, координатора и работника. Клиент Python также может использовать связь REST, инкапсулировать оператор в запрос REST в соответствии с запросом OpenLooKeng и отправить его координатору для выполнения, включая следующие запросы:
1. Отправьте запрос POST /v1/statement
2. Запрашивайте, пока запрос не будет завершен: GET /v1/statement/{ID}
3. Удалить запрос: DELETE /v1/statement/{queryId}
В то же время OpenLooKeng должен предоставлять функции шифрования и аутентификации, должен поддерживать шифрование HTTPS иBasicиKerberosСертификация. Как модуль OpenLooKeng, клиент Python должен соответствовать спецификациям разработки OpenLooKeng, в то же время клиент должен быть полностью протестирован, покрытие модульного теста должно соответствовать требованиям OpenLooKeng, а функции завершены, и он может нормально получить доступ к бизнесу OpenLooKeng.
Введение в архитектуру
-
auth: схема используется для получения сеанса запроса, который аутентифицируется HTTPBasic или Kerberos;
-
err: содержит ошибки и предупреждения, которые могут возникнуть во время операции,
-
общий: базовый класс для некоторой общей логики DB-API;
-
соединения: управление соединениями openLooKeng для получения курсоров, установки зашифрованной аутентификационной информации и т. д.;
-
курсор: курсор представляет собой курсор базы данных и используется для управления контекстом операций выборки.
Функции
pyopenLooKeng использует спецификацию API базы данных PEP-249v2.0. PEP-249 DB-API обеспечивает согласованный интерфейс доступа к различным базам данных.Например, мы можем легко перенести используемую базу данных из Mysql в OpenLooKeng, всего лишь с несколькими изменениями кода.
Как и в случае с PyMysql, нам нужно использоватьcur.execute()функция отправки запроса запроса. семейство функций выборки (fetchone() fetchmany() fetchall()), чтобы получить результирующий набор; передатьcancel()функция отмены запроса.
pyOpenLooKeng также реализует некоторые другие функции, такие как информация о кластере, информация о рабочем узле, информация о данных запроса и информация о данных этапа, которые можно получить в Connection.
В процессе мы обнаружили, что openLooKengv1/stageИнтерфейс RESTful недоступен, мы вернулись в сообщество и подняли вопрос:git ee.com/open la OO pit…
Мы также поддерживаем шифрование HTTPS и аутентификацию Basic и Kerberos,
Подробный код выглядит следующим образом:
from pyopenLooKeng import connections, auth
myAuth = auth.BasicAuthentication(username='user', password='password')
# Kerberos authentication can also be used
conn = connections.connect(host='host', port=8080, catalog='system', schema='runtime',
protocol="https", https_verify="trust", auth=myAuth)
print(conn.cluster())
print(conn.query())
# ...
cur = conn.cursor()
cur.execute("SHOW TABLES")
res = cur.fetchall()
print(res)
# (('nodes',), ('queries',), ('tasks',), ('transactions',))
При шифровании HTTPS мы также реализуем два метода: игнорирование проверки сертификата и использование сертификата сторонней библиотеки python certifi, поэтому мы можем поместить открытый ключ openLooKeng вcertifi.where()Указанный файл повышает безопасность и удобство pyOpenLooKeng.
Опыт соревнований
Это наш первый раз, когда мы участвуем в конкурсе сообщества открытого исходного кода, и у нас есть много идей и опыта в этом процессе.
- Сообщество с открытым исходным кодом очень помогает. Сначала мы столкнулись с проблемой, что установка застряла в ожидании запуска кластера. Мы пытались много раз и не могли решить ее. Старший в группе сообщества WeChat сказал, что сталкивался с этим и необходимо вручную настроить и изменить его файл конфигурации. Наконец нам это удалось. Второе это баг интерфейса этапа.Сначала я думал что это проблема с моей собственной настройкой окружения.Пообщавшись с комьюнити я определил что должен быть баг в коде системы. Под руководством учителя сообщества Сюй Дэчжи я представил проблему openLooKeng.
- Эффективное использование таких инструментов, как двухнедельный отчет о проблемах gitee и вики, может предоставить пользователям большое удобство и помочь разработчикам планировать время.
- Учась на программном обеспечении с открытым исходным кодом, сначала мы понятия не имели, что делать с PEP-249, но позже мы обратились к реализации pymysql и получили от нее большую помощь.
- Открытый исходный код не только публикует собственный код, но и имеет четкую и понятную документацию, код должен соответствовать стандартам разработки сообщества, быть полностью протестированным, а самое главное поддерживать его долгое время.
В будущем наша команда продолжит улучшать этот проект, чтобы помочь развитию openLooKeng, и желаю нашему openLooKeng все лучше и лучше!