概要
DataHubは、エンドツーエンドのデータ検出、データ観測可能性、およびデータガバナンスを実現するための最新のデータカタログです。 本ドキュメントでは、OceanBaseをバックエンドストレージとして使用してDataHubサービスをデプロイする方法について説明し、簡単な例を通じてOceanBaseのメタデータ管理を示します。
バージョン互換性
- OceanBaseバージョン:V4.2.4以上。
- DataHubバージョン:1.4.0.2(例)。
前提条件
DataHubを使用する前に、次のことを確認してください:
- OceanBaseデータベースのデプロイが完了し、MySQLモードのユーザーテナントが作成されていること。テナントの作成方法の詳細については、テナントの作成を参照してください。
- Dockerのデプロイが完了し、Dockerサービスが実行中であり、現在のユーザーがdockerコマンドを実行する権限を持っていること(docker infoで確認可能)。
- Docker Compose V2がインストールされていること(docker-composeで確認可能)。
- Python 3.10+およびpipがインストールされていること。
ステップ1:データベース接続文字列を取得する
OceanBaseデータベースのデプロイ担当者から接続文字列を取得します。例:
obclient -h$host -P$port -u$user_name -p$password -D$database_name
パラメータ説明:
$host:接続IP。ODP接続はODPアドレスを使用し、直接接続はOBServer IPを使用します。$port:接続ポート。ODPのデフォルトは2883、直接接続のデフォルトは2881です。$database_name:データベース名。注意
テナントに接続するユーザーには、データベースに対する
CREATE、INSERT、DROPおよびSELECT権限が付与されていなければなりません。ユーザー権限の詳細については、MySQLモードの権限分類を参照してください。$user_name:接続アカウント。ODP形式:ユーザー@テナント#クラスタまたはクラスタ:テナント:ユーザー。直接接続形式:ユーザー@テナント。$password:アカウントのパスワード。
接続文字列の詳細については、OBClientを使用してOceanBaseテナントに接続するを参照してください。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest
ステップ2:DataHubのバックエンドストレージとしてOceanBaseを設定する
- 依存関係をインストールし、環境変数を設定します。
python3 -m pip install pip wheel setuptools
python3 -m pip install acryl-datahub==1.4.0.2
datahub version #、datahubのバージョン情報を取得します。例:1.4.0.2
# 1. 必要な環境変数を設定します
datahub_version="1.4.0.2"
cat > .env << EOF
DATAHUB_VERSION=v${datahub_version}
UI_ingESTION_DEFAULTCLI_VERSION=${datahub_version}
# データベースの設定
host=your_database_host
port=your_database_port
user_name=your_database_username
password=your_database_password
database_name=your_database_dbname
EOF
source .env
データベースのアドレス、ポート番号、データベース名、ユーザー名、パスワードの取得については、ステップ1を参照してください。
DataHubをデプロイします。
cat > docker-compose.quickstart-profile.yml << 'EOF' # このファイルはビルドプロセスの一部として生成されます。ビルドの変更によりこのファイルが変更された場合は、生成されたファイルをチェックインしてください。 name: datahub services: datahub-actions-quickstart: profiles: - quickstart - quickstart-backend depends_on: datahub-gms-quickstart: condition: service_healthy required: true environment: ACTIONS_CONFIG: '' ACTIONS_EXTRA_PACKAGES: '' DATAHUB_GMS_HOST: datahub-gms DATAHUB_GMS_PORT: '8080' DATAHUB_GMS_PROTOCOL: http DATAHUB_SYSTEM_CLIENT_ID: __datahub_system DATAHUB_SYSTEM_CLIENT_SECRET: JohnSnowKnowsNothing ELASTICSEARCH_HOST: search ELASTICSEARCH_PORT: '9200' ELASTICSEARCH_PROTOCOL: http ELASTICSEARCH_USE_SSL: 'false' KAFKA_BOOTSTRAP_SERVER: broker:29092 KAFKA_PROPERTIES_SECURITY_PROTOCOL: PLAINTEXT METADATA_AUDIT_EVENT_NAME: MetadataAuditEvent_v4 METADATA_CHANGE_LOG_VERSIONED_TOPIC_NAME: MetadataChangeLog_Versioned_v1 SCHEMA_REGISTRY_URL: http://datahub-gms:8080/schema-registry/api/ hostname: actions image: acryldata/datahub-actions:${DATAHUB_VERSION}-slim networks: default: null volumes: - type: bind source: ${HOME}/.aws target: /home/datahub/.aws read_only: true bind: create_host_path: true - type: bind source: ${HOME}/.aws/sso/cache target: /home/datahub/.aws/sso/cache bind: create_host_path: true datahub-gms-quickstart: profiles: - quickstart - quickstart-backend depends_on: system-update-quickstart: condition: service_completed_successfully required: true environment: ALTERNATE_MCP_VALIDATION: 'true' DATAHUB_BASE_PATH: / DATAHUB_GMS_BASE_PATH: / DATAHUB_SERVER_TYPE: quickstart DATAHUB_TELEMETRY_ENABLED: 'false' DATAHUB_UPGRADE_HISTORY_KAFKA_CONSUMER_GROUP_ID: generic-duhe-consumer-job-client-gms EBEAN_DATASOURCE_DRIVER: com.mysql.jdbc.Driver EBEAN_DATASOURCE_HOST: $host:$port EBEAN_DATASOURCE_USERNAME: $user_name EBEAN_DATASOURCE_PASSWORD: $password EBEAN_DATASOURCE_URL: jdbc:mysql://$host:$port/$database_name?verifyServerCertificate=false&useSSL=true&useUnicode=yes&characterEncoding=UTF-8 ELASTICSEARCH_HOST: search ELASTICSEARCH_IMPLEMENTATION: opensearch ELASTICSEARCH_INDEX_BUILDER_MAPPINGS_REINDEX: 'true' ELASTICSEARCH_INDEX_BUILDER_SETTINGS_REINDEX: 'true' ELASTICSEARCH_LIMIT_RESULTS_STRICT: 'true' ELASTICSEARCH_PORT: '9200' ELASTICSEARCH_PROTOCOL: http ELASTICSEARCH_USE_SSL: 'false' ENTITY_REGISTRY_CONFIG_PATH: /datahub/datahub-gms/resources/entity-registry.yml ENTITY_SERVICE_ENABLE_RETENTION: 'true' ENTITY_VERSIONING_ENABLED: 'true' ES_BULK_REFRESH_POLICY: WAIT_UNTIL GRAPH_SERVICE_DIFF_MODE_ENABLED: 'true' GRAPH_SERVICE_impl: elasticsearch JAVA_OPTS: -Xms1g -Xmx1g KAFKA_BOOTSTRAP_SERVER: broker:29092 KAFKA_SCHEMAREGISTRY_URL: http://datahub-gms:8080/schema-registry/api/ MAE_CONSUMER_ENABLED: 'true' MCE_CONSUMER_ENABLED: 'true' METADATA_SERVICE_AUTH_ENABLED: 'false' NEO4J_HOST: http://neo4j:7474 NEO4J_PASSWORD: datahub NEO4J_URI: bolt://neo4j NEO4J_USERNAME: neo4j PE_CONSUMER_ENABLED: 'true' POLICY_CACHE_REFRESH_INTERVAL_SECONDS: '120' SCHEMA_REGISTRY_TYPE: INTERNAL SEARCH_BAR_API_VARIANT: SEARCH_ACROSS_ENTITIES SHOW_HAS_SIBLINGS_FILTER: 'true' SHOW_HOME_PAGE_REDESIGN: 'true' SHOW_INGESTION_PAGE_REDESIGN: 'true' SHOW_SEARCH_BAR_AUTOCOMPLETE_REDESIGN: 'true' STRICT_URN_VALIDATION_ENABLED: 'true' THEME_V2_DEFAULT: 'true' UI_INGESTION_ENABLED: 'true' UI_INGESTION_DEFAULT_CLI_VERSION: ${UI_INGESTION_DEFAULT_CLI_VERSION} hostname: datahub-gms healthcheck: test: - CMD-SHELL - curl -sS --fail http://datahub-gms:8080/health timeout: 5s interval: 1s retries: 3 start_period: 1m30s image: acryldata/datahub-gms:${DATAHUB_VERSION} labels: io.datahubproject.datahub.component: gms networks: default: null ports: - mode: ingress target: 8080 published: ${DATAHUB_MAPPED_GMS_PORT:-8080} protocol: tcp volumes: - type: bind source: ${HOME}/.datahub/plugins target: /etc/datahub/plugins bind: create_host_path: true - type: bind source: ${HOME}/.datahub/search target: /etc/datahub/search bind: create_host_path: true frontend-quickstart: profiles: - quickstart - quickstart-frontend depends_on: system-update-quickstart: condition: service_completed_successfully required: true environment: DATAHUB_APP_VERSION: ${DATAHUB_VERSION} DATAHUB_BASE_PATH: / DATAHUB_GMS_BASE_PATH: / DATAHUB_GMS_HOST: datahub-gms DATAHUB_GMS_PORT: '8080' DATAHUB_PLAY_MEM_BUFFER_SIZE: 10MB DATAHUB_SECRET: YouKnowNothing DATAHUB_TRACKING_TOPIC: DataHubUsageEvent_v1 ELASTIC_CLIENT_HOST: elasticsearch ELASTIC_CLIENT_PORT: '9200' JAVA_OPTS: -Xms512m -Xmx512m -Dhttp.port=9002 -Dconfig.file=datahub-frontend/conf/application.conf -Djava.security.auth.login.config=datahub-frontend/conf/jaas.conf -Dlogback.configurationFile=datahub-frontend/conf/logback.xml -Dlogback.debug=false -Dpidfile.path=/dev/null KAFKA_BOOTSTRAP_SERVER: broker:29092 PLAY_HTTP_CONTEXT: / THEME_V2_DEFAULT: 'true' hostname: datahub-frontend-react image: acryldata/datahub-frontend-react:${DATAHUB_VERSION} networks: default: null ports: - mode: ingress target: 9002 published: ${DATAHUB_MAPPED_FRONTEND_PORT:-9002} protocol: tcp volumes: - type: bind source: ${HOME}/.datahub/plugins target: /etc/datahub/plugins bind: create_host_path: true kafka-broker: command: - /bin/bash - -c - | # KRaft clusterIDを生成する file_path="/var/lib/kafka/data/clusterID" if [ ! -f "$$file_path" ]; then /bin/kafka-storage random-uuid > $$file_path echo "Cluster id has been created..." # KRaftで必要な手順:新しいcluster IDでストレージディレクトリをフォーマットする kafka-storage format --ignore-formatted -t $$(cat "$$file_path") -c /etc/kafka/kafka.properties fi export CLUSTER_ID=$$(cat "$$file_path") echo "CLUSTER_ID=$$CLUSTER_ID" /etc/confluent/docker/run environment: KAFKA_ADVERTISED_LISTENERS: BROKER://broker:29092,EXTERNAL://localhost:9092 KAFKA_BROKER_ID: '1' KAFKA_CONFLUENT_SUPPORT_METRICS_ENABLE: 'false' KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_CONTROLLER_QUORUM_VOTERS: 1@broker:39092 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: '0' KAFKA_HEAP_OPTS: -Xms512m -Xmx512m KAFKA_INTER_BROKER_LISTENER_NAME: BROKER KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,BROKER:PLAINTEXT,EXTERNAL:PLAINTEXT KAFKA_LISTENERS: BROKER://broker:29092,EXTERNAL://broker:9092,CONTROLLER://broker:39092 KAFKA_LOG4J_LOGGERS: org.apache.kafka.image.loader.MetadataLoader=WARN KAFKA_MAX_MESSAGE_BYTES: '5242880' KAFKA_MESSAGE_MAX_BYTES: '5242880' KAFKA_NODE_ID: '1' KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: '1' KAFKA_PROCESS_ROLES: controller, broker KAFKA_ZOOKEEPER_CONNECT: null hostname: broker healthcheck: test: - CMD-SHELL - nc -z broker $${DATAHUB_KAFKA_BROKER_PORT:-9092} timeout: 5s interval: 1s retries: 5 start_period: 1m0s image: confluentinc/cp-kafka:8.0.0 networks: default: null ports: - mode: ingress target: 9092 published: '9092' protocol: tcp volumes: - type: volume source: broker target: /var/lib/kafka/data volume: {} opensearch: profiles: - quickstart - quickstart-backend - quickstart-actions - quickstart-frontend - quickstart-storage - quickstart-cassandra - quickstart-postgres - quickstart-postgres-cdc - quickstart-consumers - quickstart-consumers-cdc - debug - debug-min - debug-datahub-actions - debug-frontend - debug-backend - debug-postgres - debug-postgres-cdc - debug-cassandra - debug-consumers - debug-consumers-cdc - debug-neo4j - debug-backend-aws - debug-aws environment: DISABLE_SECURITY_PLUGIN: 'true' ES_JAVA_OPTS: -Xms256m -Xmx512m -Dlog4j2.formatMsgNoLookups=true OPENSEARCH_JAVA_OPTS: -Xms768m -Xmx1024m -Dlog4j2.formatMsgNoLookups=true discovery.type: single-node hostname: search healthcheck: test: - CMD-SHELL - curl -sS --fail http://search:$${DATAHUB_ELASTIC_PORT:-9200}/_cluster/health?wait_for_status=yellow&timeout=0s timeout: 15s interval: 5s retries: 10 start_period: 1m0s image: opensearchproject/opensearch:2.19.3 networks: default: null ports: - mode: ingress target: 9200 published: '9200' protocol: tcp volumes: - type: volume source: osdata target: /usr/share/opensearch/data volume: {} opensearch-setup: profiles: - quickstart - quickstart-datahub-actions - quickstart-backend - quickstart-frontend - quickstart-storage - quickstart-cassandra - quickstart-postgres - quickstart-postgres-cdc - quickstart-consumers - quickstart-consumers-cdc command: - /bin/sh - -c - /create-indices.sh depends_on: opensearch: condition: service_healthy required: true environment: ELASTICSEARCH_HOST: search ELASTICSEARCH_PORT: '9200' ELASTICSEARCH_PROTOCOL: http ELASTICSEARCH_USE_SSL: 'false' USE_AWS_ELASTICSEARCH: 'true' hostname: opensearch-setup image: acryldata/datahub-elasticsearch-setup:${DATAHUB_VERSION} labels: datahub_setup_job: 'true' networks: default: null system-update-quickstart: profiles: - quickstart - quickstart-storage - quickstart-consumers - quickstart-frontend - quickstart-backend command: - -u - SystemUpdate depends_on: opensearch: condition: service_healthy required: true opensearch-setup: condition: service_completed_successfully required: true environment: BACKFILL_BROWSE_PATHS_V2: 'true' CREATE_USER: 'false' CREATE_USER_PASSWORD: datahub CREATE_USER_USERNAME: datahub DATAHUB_BASE_PATH: / DATAHUB_GMS_BASE_PATH: / DATAHUB_GMS_HOST: datahub-gms DATAHUB_GMS_PORT: '8080' DATAHUB_PRECREATE TopsICS: 'true' DATAHUB_SQL_SETUP_ENABLED: 'true' EBEAN_DATASOURCE_DRIVER: com.mysql.jdbc.Driver EBEAN_DATASOURCE_HOST: $host:$port EBEAN_DATASOURCE_USERNAME: $user_name EBEAN_DATASOURCE_PASSWORD: $password EBEAN_DATASOURCE_URL: jdbc:mysql://$host:$port/$database_name?verifyServerCertificate=false&useSSL=true&useUnicode=yes&characterEncoding=UTF-8 ELASTICSEARCH_BUILD_INDICES_CLONE_INDICES: 'false' ELASTICSEARCH_HOST: search ELASTICSEARCH_IMPLEMENTATION: opensearch ELASTICSEARCH_INDEX_BUILDER_MAPPINGS_REINDEX: 'true' ELASTICSEARCH_INDEX_BUILDER_REFRESH_INTERVAL_SECONDS: '3' ELASTICSEARCH_INDEX_BUILDER_SETTINGS_REINDEX: 'true' ELASTICSEARCH_PORT: '9200' ELASTICSEARCH_PROTOCOL: http ELASTICSEARCH_USE_SSL: 'false' ENTITY_REGISTRY_CONFIG_PATH: /datahub/datahub-gms/resources/entity-registry.yml ENTITY_VERSIONING_ENABLED: 'true' GRAPH_SERVICE_IMPL: elasticsearch KAFKA_BOOTSTRAP_SERVER: broker:29092 KAFKA_SCHEMAREGISTRY_URL: http://datahub-gms:8080/schema-registry/api/ NEO4J_HOST: http://neo4j:7474 NEO4J_PASSWORD: datahub NEO4J_URI: bolt://neo4j NEO4J_USERNAME: neo4j PARTITIONS: '3' REPROCESS_DEFAULT_BROWSE_PATHS_V2: 'false' SCHEMA_REGISTRY_SYSTEM_UPDATE: 'true' SCHEMA_REGISTRY_TYPE: INTERNAL SPRING_KAFKA_PROPERTIES_AUTO_REGISTER_SCHEMAS: 'true' SPRING_KAFKA_PROPERTIES_USE_LATEST_VERSION: 'true' USE_CONFLUENT_SCHEMA_REGISTRY: 'false' hostname: datahub-system-update image: acryldata/datahub-upgrade:${DATAHUB_VERSION} labels: datahub_setup_job: 'true' networks: default: null volumes: - type: bind source: ${HOME}/.datahub/plugins target: /etc/datahub/plugins bind: create_host_path: true networks: default: name: datahub_network volumes: broker: name: datahub_broker osdata: name: datahub_osdata EOF # DataHubを起動する docker-compose -f docker-compose.quickstart-profile.yml --profile quickstart up -d # コンテナの状態を確認する。 sudo docker ps -a |grep datahub
パラメータ説明:
$host:OceanBaseデータベースの接続IPアドレス。$port:OceanBaseデータベースの接続ポート(ODPデフォルト2883)。$user_name:OceanBaseデータベースのユーザー名(ODP形式:ユーザー@テナント#クラスタ)。$password:OceanBaseデータベースのユーザーパスワード。$database_name:DataHubバックエンドストレージ用のデータベース名。
ステップ3:DataHubにアクセスする
- DataHub UIページにアクセスします:
http://localhost:9002、ログインユーザー名とパスワードは:datahubです。 - DataHubサービスが正常に稼働していることを確認し、ログインして画面を確認できます。
ステップ4:OceanBaseメタデータを管理する
OceanBaseをDataHubのバックエンドストレージとして使用するだけでなく、OceanBaseのメタデータを管理することもできます:
- DataSourceページで、Create sourceボタンをクリックします。
- データソースタイプとしてMySQLを選択します。
- YAML設定ファイルを編集します。
source:
type: mysql
config:
host_port: '$host:$port'
database: $database_name
username: $user_name
password: $password
include_tables: true
include_views: true
profiling:
enabled: true
profile_table_level_only: true
stateful_ingestion:
enabled: false
sink:
type: datahub-rest
config:
# docker inspect datahub-datahub-gms-quickstart-1 | grep "IPAddress"
server: 'http://172.19.0.5:8080'
データベースのアドレス、ポート番号、データベース名、ユーザー名、パスワードの取得については、ステップ1を参照してください。 YAML設定パラメータの詳細については、DataHub公式Webサイトを参照してください。
- NextとSave & Runをクリックします。
- DataHub UIで、OceanBaseから取り込んだメタデータ情報を確認します。