メタデータ管理 - Atlas の導入と使用 (Hive、Solr、Kafka、Kerberos の統合)

概要

導入

Apache Atlas は、組織がデータ資産のカタログを構築し、これらの資産を分類および管理し、データ アナリストとデータ ガバナンス チームにこれらのデータ資産に関するコラボレーション機能を提供するためのオープン メタデータ管理およびガバナンス機能を提供します

これらのデータを適切に管理したい場合は、テキストや文書などを使用するだけでは十分ではなく、画像を使用する必要があります。Atlas はメタデータをグラフに変換するツールです。

Atlas の具体的な機能は次のとおりです。

メタデータの分類 個人情報や機密情報などのメタデータの機密管理をサポートします。
メタデータの取得 メタデータの種類や分類に応じた検索が可能で、全文検索にも対応
血族関係 テーブルとテーブル、フィールドとフィールドの間の血縁関係をサポートします。これは、問題のバックトラッキングや影響分析などに便利です。

(1) テーブル間の近親関係依存性

(2) 分野間の血族依存性

アーキテクチャ開発

(1) 以下の図は、第 1 世代のメタデータ アーキテクチャを示しています。通常、これは古典的なモノリシック フロント エンド (おそらく Flask アプリケーション) で、クエリ用のメイン ストア (通常は MySQL/Postgres)、検索クエリを提供するための検索インデックス (通常は Elasticsearch)、そしてこのアーキテクチャのこの第 1.5 世代では、おそらくリレーショナル データベースの「再帰クエリ」制限に達すると、グラフ インデックスを使用してリネージ (通常は Neo4j) グラフ クエリを処理しました。

(2) すぐに、第 2 世代アーキテクチャが登場しました。モノリシック アプリケーションは、メタデータ ストア データベースの前に配置されるサービスに分割されています。このサービスは、プッシュ メカニズムを使用してメタデータをシステムに書き込むことができる API を提供します。

(3) 第 3 世代のアーキテクチャはイベントベースのメタデータ管理アーキテクチャであり、顧客はニーズに応じてさまざまな方法でメタデータ データベースを操作できます。

メタデータの低遅延ルックアップ、メタデータ属性に対する全文検索およびランク付け検索を実行する機能、メタデータ関係に関するグラフ クエリ、および完全なスキャンおよび分析機能。

Apache Atlas はこのアーキテクチャを使用し、Hadoop エコシステムと密接に結合されています。

アーキテクチャ原理

アトラスには次のコンポーネントが含まれています。

  • Hbase を使用してメタデータを保存する
  • Solr を使用したインデックス作成
  • インジェスト/エクスポート コレクションとエクスポート コンポーネント、Type System タイプ システム、および Graph Engine グラフィックス エンジンが一緒になって Atlas のコア メカニズムを構成します。
  • すべての機能は API を通じてユーザーに提供され、Kafka メッセージ システムを通じて統合することもできます
  • Atlas は、メタデータを取得するためのさまざまなソース (Hive、Sqoop、Storm) をサポートしています。
  • 優れた UI サポート

(1) コア層

Atlas コアは次のコンポーネントで構成されます。

  • 取り込み/エクスポート: 取り込みコンポーネントを使用すると、メタデータを Atlas に追加できます。同様に、エクスポート コンポーネントは、Atlas によって検出されたメタデータの変更をイベントとして公開します。コンシューマーは、これらの変更イベントを使用して、メタデータの変更にリアルタイムで応答できます。

  • タイプ システム: Atlas を使用すると、ユーザーは管理したいメタデータ オブジェクトのモデルを定義できます。モデルは「タイプ」と呼ばれる定義で構成されます。「エンティティ」と呼ばれる「タイプ」のインスタンスは、管理される実際のメタデータ オブジェクトを表します。タイプ システムは、ユーザーがタイプとエンティティを定義および管理できるようにするコンポーネントです。Hive テーブルなど、Atlas によってすぐに管理されるすべてのメタデータ オブジェクトは、タイプを使用してモデル化され、エンティティとして表されます。新しいタイプのメタデータを Atlas に保存するには、タイプ システム コンポーネントの概念を理解する必要があります。

    注意すべき重要な点は、Atlas のモデリングの汎用的な性質により、データ スチュワードとインテグレータが技術メタデータとビジネス メタデータの両方を定義できることです。Atlas の機能を使用して、2 つの間の豊富な関係を定義することもできます。

  • グラフ エンジン: Atlas は内部でグラフ モデルを使用して、管理するメタデータ オブジェクトを永続化します。このアプローチは、メタデータ オブジェクト間の豊富な関係を効率的に処理するための優れた柔軟性を提供します。グラフ エンジン コンポーネントは、Atlas タイプ システムのタイプとエンティティ、および基礎となるグラフ永続モデルの間の変換を担当します。グラフィックス エンジンは、グラフィックス オブジェクトの管理に加えて、メタデータ オブジェクトを効率的に検索できるように、メタデータ オブジェクトの適切なインデックスも作成します。Atlas はJanusGraphを使用してメタデータ オブジェクトを保存します。

(2) 統合層

Atlas では、ユーザーは次の 2 つの方法でメタデータを管理できます。

  • API -Atlas のすべての機能は、タイプとエンティティの作成、更新、削除を可能にする REST API を通じてエンドユーザーに公開されます。これは、Atlas によって管理されるタイプとエンティティをクエリおよび検出するための主要なメカニズムでもあります。
  • メッセージング: API に加えて、ユーザーは Kafka ベースのメッセージング インターフェイスを使用して Atlas と統合することも選択できます。これは、メタデータ オブジェクトを Atlas に渡す場合や、アプリケーションを構築できるメタデータ変更イベントで Atlas を使用する場合に便利です。メッセージング インターフェイスは、スケーラビリティや信頼性などを向上させるために、Atlas とのより疎結合な統合を使用したい場合に特に役立ちます。Atlas は、フックとメタデータ通知イベントのダウンストリーム コンシューマー間の通信のための通知サーバーとして Apache Kafka を使用します。イベントは、フックと Atlas によってさまざまな Kafka トピックに書き込まれます。

(3)Metadata sources层

Atlas は、すぐに使える複数のメタデータ ソースの統合をサポートしています。将来的にはさらに多くの統合が追加される予定です。現在、Atlas は次のソースからのメタデータの抽出と管理をサポートしています。

  • HBase
  • ハイブ
  • スクープ
  • カフカ

統合には 2 つの意味があります。Atlas が定義するメタデータ モデルは、これらのコンポーネントのオブジェクトを表すために使用されます。Atlas は、これらのコンポーネントからメタデータ オブジェクトを取り込むためのコンポーネントを提供します (リアルタイムまたは場合によってはバッチ モードで)。

(4) アプリケーション層

Atlas によって管理されるメタデータは、多くのガバナンス ニーズを満たすためにさまざまなアプリケーションで使用されます。

Atlas Admin UI -このコンポーネントは、データスチュワードや科学者がメタデータを検出して注釈を付けることを可能にするWebベースのアプリケーションです。ここで最も重要なのは、Atlas によって管理されるメタデータ タイプとオブジェクトをクエリするために使用できる検索インターフェイスと SQL に似たクエリ言語です。管理 UI は、Atlas の REST API を使用して機能を構築します。

タグベースのポリシー: Apache Ranger は、さまざまな Hadoop コンポーネントとの広範な統合を提供する、Hadoop エコシステム用の高度なセキュリティ管理ソリューションです。Ranger を Atlas と統合することで、セキュリティ管理者はメタデータ主導のセキュリティ ポリシーを定義して効果的なガバナンスを実現できます。Ranger は、Atlas によって通知されたメタデータ変更イベントのコンシューマーです。

型システムの概要

Atlas を使用すると、ユーザーは管理したいメタデータ オブジェクトのモデルを定義できます。モデルはtype(类型)と呼ばれる定義で構成されます。呼び出されるentities(实体)インスタンスはtype(类型)、管理される実際のメタデータ オブジェクトを表します。タイプ システムは、ユーザーがタイプとエンティティを定義および管理できるようにするコンポーネントです。Hive テーブルなど、Atlas によってすぐに管理されるすべてのメタデータ オブジェクトは、型を使用してモデル化され、エンティティとして表されます。新しいタイプのメタデータを Atlas に保存するには、タイプ システム コンポーネントの概念を理解する必要があります。

タイプ

Atlas の「タイプ」は、特定のタイプのメタデータ オブジェクトがどのように保存され、アクセスされるかを定義します。タイプは、定義されたメタデータ オブジェクトの 1 つ以上のプロパティのコレクションを表します。開発経験のあるユーザーは、オブジェクト指向プログラミング言語の「クラス」またはリレーショナル データベースの「テーブル スキーマ」によって定義される「型」を理解できます。

  • すべてのタイプのアトラスは、次の API を通じて取得できます: http://atlas:21000/api/atlas/v2/types/typedefs
  • この API を通じて hive_table タイプの定義を取得します: http://atlas:21000/api/atlas/v2/types/typedef/name/hive_table

hive_table 型の概要

Atlas を使用するタイプの一例は、Hive テーブルです。Hive テーブルは次のプロパティを定義します。

Name:         hive_table
TypeCategory: Entity
SuperTypes:   DataSet
Attributes:
    name:             string
    db:               hive_db
    owner:            string
    createTime:       date
    lastAccessTime:   date
    comment:          string
    retention:        int
    sd:               hive_storagedesc
    partitionKeys:    array<hive_column>
    aliases:          array<string>
    columns:          array<hive_column>
    parameters:       map<string,string>
    viewOriginalText: string
    viewExpandedText: string
    tableType:        string
    temporary:        boolean
{
    "category": "ENTITY",
    "guid": "30a12b7c-faed-4ead-ad83-868893ebed93",
    "createdBy": "cloudera-scm",
    "updatedBy": "cloudera-scm",
    "createTime": 1536203750750,
    "updateTime": 1536203750750,
    "version": 1,
    "name": "hive_table",
    "description": "hive_table",
    "typeVersion": "1.1",
    "options": {
        "schemaElementsAttribute": "columns"
    },
    "attributeDefs": [
        {
            "name": "db",
            "typeName": "hive_db",
            "isOptional": false,
            "cardinality": "SINGLE",
            "valuesMinCount": 1,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "createTime",
            "typeName": "date",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "lastAccessTime",
            "typeName": "date",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "comment",
            "typeName": "string",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "retention",
            "typeName": "int",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "sd",
            "typeName": "hive_storagedesc",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false,
            "constraints": [
                {
                    "type": "ownedRef"
                }
            ]
        },
        {
            "name": "partitionKeys",
            "typeName": "array<hive_column>",
            "isOptional": true,
            "cardinality": "SET",
            "valuesMinCount": 0,
            "valuesMaxCount": 2147483647,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false,
            "constraints": [
                {
                    "type": "ownedRef"
                }
            ]
        },
        {
            "name": "aliases",
            "typeName": "array<string>",
            "isOptional": true,
            "cardinality": "SET",
            "valuesMinCount": 0,
            "valuesMaxCount": 2147483647,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "columns",
            "typeName": "array<hive_column>",
            "isOptional": true,
            "cardinality": "SET",
            "valuesMinCount": 0,
            "valuesMaxCount": 2147483647,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false,
            "constraints": [
                {
                    "type": "ownedRef"
                }
            ]
        },
        {
            "name": "parameters",
            "typeName": "map<string,string>",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "viewOriginalText",
            "typeName": "string",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "viewExpandedText",
            "typeName": "string",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "tableType",
            "typeName": "string",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "temporary",
            "typeName": "boolean",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": true,
            "includeInNotification": false
        }
    ],
    "superTypes": [
        "DataSet"
    ],
    "subTypes": []
}

上記の例から次の点に気づくことができます。

  • Atlas のタイプは次のようにname一意に識別されます。

  • attributeDefs は、このタイプの属性の定義を表します。

  • 型にはメタタイプがあります。Atlas には次のメタタイプがあります。

    • プリミティブメタタイプ: boolean、byte、short、int、long、float、double、biginteger、bigdecimal、string、date
    • 列挙型メタタイプ
    • コレクションのメタタイプ: 配列、マップ
    • 複合メタタイプ: エンティティ、構造体、分類、関係
  • エンティティ (Entity) タイプと分類 (Classification) タイプは、「スーパータイプ / 親タイプ」(スーパータイプ) と呼ばれる他のタイプから継承できます。これには、スーパータイプで定義されたプロパティが含まれます。これにより、モデラーは関連するタイプのセットなどに共通のプロパティを定義できます。オブジェクト指向言語がクラスのスーパークラスを定義する方法と似ています。Atlas の型は、複数のスーパータイプから拡張することもできます。

    この例では、各ハイブ テーブルは、DataSetという事前定義されたスーパータイプから拡張されています。この事前定義されたタイプの詳細については、後で説明します。

  • メタタイプEntityStructClassificationまたはを持つ型はRelationship、プロパティのコレクションを持つことができます。各プロパティには名前 (例: name) とその他の関連プロパティがあります。プロパティは式を使用して参照できますtype_name.attribute_name属性自体は Atlas メタタイプを使用して定義されることに注意してください。

    この例では、hive_table.name は文字列、hive_table.aliases は文字列の配列、hive_table.db は hive_db という型のインスタンスを参照します。

  • 属性内の型参照 (hive_table.db など) は特に興味深いもので、このような属性を使用すると、Atlas で定義された 2 つの型間の任意の関係を定義でき、それによってリッチなモデルを構築できます。さらに、参照リストを属性タイプとして収集することもできます (たとえば、hive_table タイプから hive_column タイプへの参照のリストを表す hive_table.columns)。

DataSet タイプの定義

{
    "category": "ENTITY",
    "guid": "d31c0a02-6999-4f81-a62a-07d7654aec84",
    "createdBy": "cloudera-scm",
    "updatedBy": "cloudera-scm",
    "createTime": 1536203676149,
    "updateTime": 1536203676149,
    "version": 1,
    "name": "DataSet",
    "description": "DataSet",
    "typeVersion": "1.1",
    "attributeDefs": [],
    "superTypes": [
        "Asset"
    ],
    "subTypes": [
        "rdbms_foreign_key",
        "rdbms_db",
        "kafka_topic",
        "hive_table",
        "sqoop_dbdatastore",
        "hbase_column",
        "rdbms_instance",
        "falcon_feed",
        "jms_topic",
        "hbase_table",
        "rdbms_table",
        "rdbms_column",
        "rdbms_index",
        "hbase_column_family",
        "access_info",
        "hive_column",
        "avro_type",
        "fs_path"
    ]
}

DataSet には多くのサブタイプがあり、Atlas に付属するタイプの一部は DataSet から継承されていることがわかります。

同時に、DataSet は Asset (資産を意味します) を継承し、いくつかの共通属性がその中で定義されます。

資産タイプの定義

{
    "category": "ENTITY",
    "guid": "349a5c61-47c3-4f4b-9a79-7fd59454a73a",
    "createdBy": "cloudera-scm",
    "updatedBy": "cloudera-scm",
    "createTime": 1536203676083,
    "updateTime": 1536203676083,
    "version": 1,
    "name": "Asset",
    "description": "Asset",
    "typeVersion": "1.1",
    "attributeDefs": [
        {
            "name": "name",
            "typeName": "string",
            "isOptional": false,
            "cardinality": "SINGLE",
            "valuesMinCount": 1,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": true,
            "includeInNotification": false
        },
        {
            "name": "description",
            "typeName": "string",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "owner",
            "typeName": "string",
            "isOptional": true,
            "cardinality": "SINGLE",
            "valuesMinCount": 0,
            "valuesMaxCount": 1,
            "isUnique": false,
            "isIndexable": true,
            "includeInNotification": false
        }
    ],
    "superTypes": [
        "Referenceable"
    ],
    "subTypes": [
        "rdbms_foreign_key",
        "rdbms_db",
        "rdbms_instance",
        "DataSet",
        "rdbms_table",
        "rdbms_column",
        "rdbms_index",
        "Infrastructure",
        "Process",
        "avro_type",
        "hbase_namespace",
        "hive_db"
    ]
}

アセットタイプには3つのプロパティが定義されています

  • 名前: 名前
  • 所有者: 所有者
  • 説明: 説明

また、ハイブ データベース hive_db、hbase 名前空間 hbase_namespace など、アセットの意味を表す多くのサブタイプもあります。これは Referenceable 型を継承します。

参照可能な型の定義

{
    "category": "ENTITY",
    "guid": "34c72533-2e80-4e5c-9226-e15b163f98d1",
    "createdBy": "cloudera-scm",
    "updatedBy": "cloudera-scm",
    "createTime": 1536203673540,
    "updateTime": 1536203673540,
    "version": 1,
    "name": "Referenceable",
    "description": "Referenceable",
    "typeVersion": "1.0",
    "attributeDefs": [
        {
            "name": "qualifiedName",
            "typeName": "string",
            "isOptional": false,
            "cardinality": "SINGLE",
            "valuesMinCount": 1,
            "valuesMaxCount": 1,
            "isUnique": true,
            "isIndexable": true,
            "includeInNotification": false
        }
    ],
    "superTypes": [],
    "subTypes": [
        "hive_storagedesc",
        "Asset"
    ]
}

この型は、この型内で一意の修飾名である非常に重要な属性、qualifiedName を定義します。この属性を使用して型名を照合し、Atlas で対応する一意のエンティティ コンテンツを見つけることができます。グローバルに一意である guid との違いに注意してください。 。

例えば:

  • ハイブ データベースの修飾名: test@primary
  • データベース test 内のテーブル test_table のqualifiedName: test.test_table@primary
  • テーブル test_table のフィールド名のqualifiedName: test.test_table.name@primary

@primaryはデフォルトのクラスタ名を示し、以下のようにクラスタ名を設定することで、クラスタ名を追加することで、異なるクラスタ間でエンティティを一意に識別することができます。

アトラスクラスター名

主要な

プロセスタイプの定義

{
    "category": "ENTITY",
    "guid": "7c03ccad-29aa-4c5f-8a27-19b536068f69",
    "createdBy": "cloudera-scm",
    "updatedBy": "cloudera-scm",
    "createTime": 1536203677547,
    "updateTime": 1536203677547,
    "version": 1,
    "name": "Process",
    "description": "Process",
    "typeVersion": "1.1",
    "attributeDefs": [
        {
            "name": "inputs",
            "typeName": "array<DataSet>",
            "isOptional": true,
            "cardinality": "SET",
            "valuesMinCount": 0,
            "valuesMaxCount": 2147483647,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        },
        {
            "name": "outputs",
            "typeName": "array<DataSet>",
            "isOptional": true,
            "cardinality": "SET",
            "valuesMinCount": 0,
            "valuesMaxCount": 2147483647,
            "isUnique": false,
            "isIndexable": false,
            "includeInNotification": false
        }
    ],
    "superTypes": [
        "Asset"
    ],
    "subTypes": [
        "falcon_feed_replication",
        "falcon_process",
        "falcon_feed_creation",
        "sqoop_process",
        "hive_column_lineage",
        "storm_topology",
        "hive_process"
    ]
}
  • プロセス タイプはアセット タイプを継承するため、名前、所有者、説明、および修飾名という 4 つの属性があります。
  • 独自の一意の入力と出力はプロセスの入力と出力を表します。これは、Atlas リネージ管理のすべてのタイプのスーパークラスです。

概念的には、これはあらゆるデータ変換操作を表すために使用できます。たとえば、生データのハイブ テーブルを集計を格納する別のハイブ テーブルに変換する ETL プロセスは、特定のタイプの拡張プロセス タイプになる可能性があります。プロセス タイプには、入力と出力という 2 つの固有のプロパティがあります。入力と出力はどちらも DataSet エンティティの配列です。したがって、Process タイプのインスタンスは、これらの入力と出力を使用して、DataSet の系統がどのように進化するかをキャプチャできます。

エンティティ

Atlas では、オブジェクトの特定の値またはインスタンスでentityあり、現実世界の特定のメタデータ オブジェクトを表します。typeオブジェクト指向プログラミング言語に例えると实例(instance)ある.类(Class)对象(Object)

エンティティの一例は、Hive テーブルです。Hive の「デフォルト」データベースには「customers」というテーブルがあります。テーブルは、Atlas の hive_table 型の「エンティティ」です。これはエンティティ タイプのインスタンスであるため、Hive テーブルの「type」の一部である各属性の値を持ちます。次に例を示します。

guid:     "9ba387dd-fa76-429c-b791-ffc338d3c91f"
typeName: "hive_table"
status:   "ACTIVE"
values:
    name:             “customers”
    db:               { "guid": "b42c6cfc-c1e7-42fd-a9e6-890e0adf33bc", "typeName": "hive_db" }
    owner:            “admin”
    createTime:       1490761686029
    updateTime:       1516298102877
    comment:          null
    retention:        0
    sd:               { "guid": "ff58025f-6854-4195-9f75-3a3058dd8dcf", "typeName": "hive_storagedesc" }
    partitionKeys:    null
    aliases:          null
    columns:          [ { "guid": ""65e2204f-6a23-4130-934a-9679af6a211f", "typeName": "hive_column" }, { "guid": ""d726de70-faca-46fb-9c99-cf04f6b579a6", "typeName": "hive_column" }, ...]
    parameters:       { "transient_lastDdlTime": "1466403208"}
    viewOriginalText: null
    viewExpandedText: null
    tableType:        “MANAGED_TABLE”
    temporary:        false

上記の例から次の点に気づくことができます。

  • エンティティ タイプの各インスタンスは、一意の識別子 GUID によって識別されます。この GUID は、オブジェクトの定義時に Atlas サーバーによって生成され、エンティティの存続期間中は一定のままです。この特定のエンティティには、いつでもその GUID を使用してアクセスできます。

    この例では、デフォルト データベースの "customers" テーブルは、GUID "9ba387dd-fa76-429c-b791-ffc338d3c91f" によって一意に識別されます。

  • エンティティは指定されたタイプであり、タイプの名前はエンティティ定義で提供されます。

    この例では、「customers」テーブルのタイプは「hive_table」です。

  • このエンティティの値は、hive_table 型定義で定義された属性のすべての属性名とその値のマップです。
    プロパティ値は、プロパティのデータ型に基づきます。エンティティ タイプ属性には、AtlasObjectId タイプの値が含まれます。

Entity のこの設計により、Entity メタタイプと Struct メタタイプの違いがわかるようになりました。Entity と Struct はどちらも他の型のプロパティを構成します。ただし、エンティティ タイプのインスタンスには ID があり (GUID 値があり)、他のエンティティ (たとえば、hive_table エンティティの hive_db エンティティ) から参照できます。Struct 型のインスタンスには独自の ID がありません。Struct 型の値は、エンティティ自体に「埋め込まれた」プロパティのコレクションです。

{
  "referredEntities" : {
    "779734cc-9011-4066-9bb1-25df6f28ac72" : {
      "typeName" : "hive_column",
      "attributes" : {
        "owner" : "wangjian5185",
        "qualifiedName" : "test.student.age@primary",
        "name" : "age",
        "description" : null,
        "comment" : null,
        "position" : 1,
        "type" : "int",
        "table" : {
          "guid" : "75a0c17a-dfdb-4532-9aae-c87b64be958d",
          "typeName" : "hive_table"
        }
      },
      "guid" : "779734cc-9011-4066-9bb1-25df6f28ac72",
      "status" : "ACTIVE",
      "createdBy" : "admin",
      "updatedBy" : "admin",
      "createTime" : 1536215508751,
      "updateTime" : 1536215508751,
      "version" : 0
    },
    "c47aed54-e4d2-4080-aa7a-5428075f5b20" : {
      "typeName" : "hive_column",
      "attributes" : {
        "owner" : "wangjian5185",
        "qualifiedName" : "test.student.phone@primary",
        "name" : "phone",
        "description" : null,
        "comment" : null,
        "position" : 2,
        "type" : "int",
        "table" : {
          "guid" : "75a0c17a-dfdb-4532-9aae-c87b64be958d",
          "typeName" : "hive_table"
        }
      },
      "guid" : "c47aed54-e4d2-4080-aa7a-5428075f5b20",
      "status" : "ACTIVE",
      "createdBy" : "admin",
      "updatedBy" : "admin",
      "createTime" : 1536215508751,
      "updateTime" : 1536215508751,
      "version" : 0
    },
    "7c4b4cd5-841d-409b-b38a-77ec8779e252" : {
      "typeName" : "hive_column",
      "attributes" : {
        "owner" : "wangjian5185",
        "qualifiedName" : "test.student.name@primary",
        "name" : "name",
        "description" : null,
        "comment" : null,
        "position" : 0,
        "type" : "string",
        "table" : {
          "guid" : "75a0c17a-dfdb-4532-9aae-c87b64be958d",
          "typeName" : "hive_table"
        }
      },
      "guid" : "7c4b4cd5-841d-409b-b38a-77ec8779e252",
      "status" : "ACTIVE",
      "createdBy" : "admin",
      "updatedBy" : "admin",
      "createTime" : 1536215508751,
      "updateTime" : 1536215508751,
      "version" : 0
    },
    "a6038b00-ce2d-4612-9436-d63092d09182" : {
      "typeName" : "hive_storagedesc",
      "attributes" : {
        "bucketCols" : null,
        "qualifiedName" : "test.student@primary_storage",
        "sortCols" : null,
        "storedAsSubDirectories" : false,
        "location" : "hdfs://cdhtest/user/hive/warehouse/test.db/student",
        "compressed" : false,
        "inputFormat" : "org.apache.hadoop.mapred.TextInputFormat",
        "outputFormat" : "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
        "parameters" : null,
        "table" : {
          "guid" : "75a0c17a-dfdb-4532-9aae-c87b64be958d",
          "typeName" : "hive_table"
        },
        "serdeInfo" : {
          "typeName" : "hive_serde",
          "attributes" : {
            "serializationLib" : "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
            "name" : null,
            "parameters" : null
          }
        },
        "numBuckets" : 0
      },
      "guid" : "a6038b00-ce2d-4612-9436-d63092d09182",
      "status" : "ACTIVE",
      "createdBy" : "admin",
      "updatedBy" : "admin",
      "createTime" : 1536215508751,
      "updateTime" : 1536215508751,
      "version" : 0
    }
  },
  "entity" : {
    "typeName" : "hive_table",
    "attributes" : {
      "owner" : "wangjian5185",
      "temporary" : false,
      "lastAccessTime" : 1533807252000,
      "aliases" : null,
      "qualifiedName" : "test.student@primary",
      "columns" : [ {
        "guid" : "7c4b4cd5-841d-409b-b38a-77ec8779e252",
        "typeName" : "hive_column"
      }, {
        "guid" : "779734cc-9011-4066-9bb1-25df6f28ac72",
        "typeName" : "hive_column"
      }, {
        "guid" : "c47aed54-e4d2-4080-aa7a-5428075f5b20",
        "typeName" : "hive_column"
      } ],
      "description" : null,
      "viewExpandedText" : null,
      "sd" : {
        "guid" : "a6038b00-ce2d-4612-9436-d63092d09182",
        "typeName" : "hive_storagedesc"
      },
      "tableType" : "MANAGED_TABLE",
      "createTime" : 1533807252000,
      "name" : "student",
      "comment" : null,
      "partitionKeys" : null,
      "parameters" : {
        "transient_lastDdlTime" : "1533807252"
      },
      "db" : {
        "guid" : "a804165e-77ff-4c60-9ee7-956760577a1e",
        "typeName" : "hive_db"
      },
      "retention" : 0,
      "viewOriginalText" : null
    },
    "guid" : "75a0c17a-dfdb-4532-9aae-c87b64be958d",
    "status" : "ACTIVE",
    "createdBy" : "admin",
    "updatedBy" : "admin",
    "createTime" : 1536215508751,
    "updateTime" : 1536281983181,
    "version" : 0
  }
}

テーブル名: Student には 3 つの列が含まれます: 名前、年齢、電話番号

  • 最初に、referredEntities には、テーブルの参照エンティティ オブジェクト、つまり 3 つの列エンティティと hive_storagedesc エンティティ (テーブルのストレージ情報を示す) が含まれており、これらは実際には GUID として格納されます。
  • エンティティには、テーブルの学生、名前、所有者、GUID、ステータス、属性などに関する情報が含まれています。
  • クラス タイプのインスタンスである各エンティティは、一意の識別子 GUID によって識別されます。この GUID は、オブジェクトの定義時に Atlas サーバーによって生成され、エンティティの存続期間中は一定のままです。いつでも、その GUID を使用して特定のエンティティにアクセスできます。

属性

属性がエンティティ、構造体、分類、関係などのメタタイプで定義されていることを見てきました。ただし、プロパティは名前とメタタイプ値を持つものとして列挙します。ただし、Atlas の属性には、型システムに関連するさらに多くの概念を定義するプロパティがあります。

属性には次のプロパティがあります。

name:        string,
    typeName:    string,
    isOptional:  boolean,
    isIndexable: boolean,
    isUnique:    boolean,
    cardinality: enum
"attributeDefs" : [ {
    "name" : "db",
    "typeName" : "hive_db",
    "isOptional" : false,   //请注意“isOptional = false”约束 - 如果没有db引用,则无法创建表实体。
    "cardinality" : "SINGLE",
    "valuesMinCount" : 1,
    "valuesMaxCount" : 1,
    "isUnique" : false,
    "isIndexable" : false
  }, {
    "name" : "createTime",
    "typeName" : "date",
    "isOptional" : true,
    "cardinality" : "SINGLE",
    "valuesMinCount" : 0,
    "valuesMaxCount" : 1,
    "isUnique" : false,
    "isIndexable" : false
  }, {
    "name" : "columns",
    "typeName" : "array<hive_column>",
    "isOptional" : true,
    "cardinality" : "SET",
    "valuesMinCount" : 0,
    "valuesMaxCount" : 2147483647,
    "isUnique" : false,
    "isIndexable" : false,
    "constraints" : [ {
      "type" : "ownedRef"    //请注意列的“ownedRef”约束。通过这样,我们指出定义的列实体应始终绑定到它们所定义的表实体。
    } ]
  }

上記のプロパティは次の意味を持ちます。

  • name: 属性の名前

  • typeName:基本型や日付などの属性型、各種型、コレクション型など。

  • isOptional: オプションですか。 false は属性を指定する必要があることを意味します

  • cardinality:SINGLE(単一)、LIST(複数繰り返し可能)、SET(複数繰り返し可能)の3種類があります。

  • valuesMinCount: 属性の最小数

  • valuesMaxCount: 属性の最大数

  • isComposite:

    • このフラグはモデリングの側面を表します。プロパティが複合として定義されている場合、プロパティに含まれるエンティティから独立したライフサイクルを持つことができないことを意味します。この概念の良い例は、ハイブ テーブルの一部を形成する列のセットです。列はハイブ テーブルの外では意味を持たないため、複合属性として定義されます。
    • 複合属性とそれに含まれるエンティティは Atlas で作成する必要があります。つまり、ハイブ テーブルと一緒にハイブ列を作成する必要があります。
  • isIndexable: プロパティ値を述語として使用して検索を効率的に実行できるように、このプロパティにインデックスを付ける必要があるかどうかを示すフラグ。

  • isUnique

    • インデックス作成にも関係します。一意として指定された場合、JanusGraph でこのプロパティに対して特別なインデックスが作成され、等価ベースの検索が可能になったことを意味します。
    • このフラグに true 値を持つ属性は、このエンティティを他のエンティティから区別するための主キーとみなされます。したがって、このプロパティが実際に現実世界の一意のプロパティをモデル化していることを確認するように注意する必要があります。
    • たとえば、hive_table の name 属性を考えてみましょう。別のケースでは、同じ名前のテーブルが複数のデータベースに存在する可能性があるため、name は hive_table の唯一の属性ではありません。Atlas がハイブ テーブルのメタデータを複数のクラスターに保存する場合、(データベース名、テーブル名) のペアであっても一意ではありません。物理世界では、クラスターの場所、データベース名、およびテーブル名のみが一意であると見なされます。
  • multiplicity: 属性が必須、オプション、または複数値であるかどうかを示します。エンティティのプロパティ値の定義が型定義の多重度宣言と一致しない場合、制約に違反し、エンティティの追加は失敗します。したがって、このフィールドはメタデータ情報に対するいくつかの制約を定義するために使用できます。

  • constraints: Restriction type, この属性の制限タイプ この値を使用することで MySQL の外部キーと同様の機能を実現できると推測されます デフォルト値は以下の通りです:

上記の内容に基づいて、以下のハイブ テーブルの属性の属性定義を拡張してみましょう。ハイブ テーブルが属するデータベースを示す「db」というプロパティを見てみましょう。

インストール

(1) アトラス公式サイトアドレス:https ://atlas.apache.org/

(2) 資料閲覧アドレス:https://atlas.apache.org/2.1.0/index.html

(3) ダウンロードアドレス:https://www.apache.org/dyn/closer.cgi/atlas/2.1.0/apache-atlas-2.1.0-sources.tar.gz

設置環境の準備

Atlas のインストールは、組み込み HBase + Solr の統合と、外部 HBase + Solr の統合に分かれています。通常、エンタープライズ開発では外部の HBase + Solr を統合することが選択されます。これは、プロジェクト全体の統合操作に便利です。

以下は、Atlas が依存する環境とクラスター計画です。この記事には、Solr と Atlas のインストール ガイドのみが含まれています。他の依存サービスのインストールについては、前の章を参照してください。

サービス名 サブサービス サーバーhadoop102 サーバーhadoop103 サーバーhadoop104
JDK
動物園の飼育員 クォーラムピアメイン
カフカ カフカ
HBase Hマスター
Hリージョンサーバー
ソルル
ハイブ ハイブ
アトラス アトラス
サービスの総数 13 7 7

Solr-7.7.3 をインストールする

(1) 各ノードにシステムユーザーsolrを作成します。

[root@hadoop102 ~]# useradd solr
[root@hadoop102 ~]# echo solr | passwd --stdin solr

[root@hadoop103 ~]# useradd solr
[root@hadoop103 ~]# echo solr | passwd --stdin solr

[root@hadoop104 ~]# useradd solr
[root@hadoop104 ~]# echo solr | passwd --stdin solr

(2) solr-7.7.3.tgz を /opt/module ディレクトリに解凍し、名前を solr に変更します

[root@hadoop102 ~]# tar -zxvf solr-7.7.3.tgz -C /opt/module/
[root@hadoop102 ~]# mv solr-7.7.3/ solr

(3) solr ディレクトリの所有者を solr ユーザーに変更します。

[root@hadoop102 ~]# chown -R solr:solr /opt/module/solr

(4) solr設定ファイルを変更する

/opt/module/solr/bin/solr.in.sh ファイル内の次のプロパティを変更します。

ZK_HOST="hadoop102:2181,hadoop103:2181,hadoop104:2181"

(5) solrの配布

[root@hadoop102 ~]# xsync /opt/module/solr

(6)solrクラスタの起動

  • Zookeeper クラスターを開始する

    [root@hadoop102 ~]# zk.sh start
    
  • Solr クラスターを開始する

    セキュリティ上の理由から、root ユーザーを使用して solr を起動することは推奨されません。ここでは、solr ユーザーを使用してすべてのノードで次のコマンドを実行し、solr クラスターを起動します。

    [root@hadoop102 ~]# sudo -i -u solr /opt/module/solr/bin/solr start
    [root@hadoop103 ~]# sudo -i -u solr /opt/module/solr/bin/solr start
    [root@hadoop104 ~]# sudo -i -u solr /opt/module/solr/bin/solr start
    

    「Happy Searching! 」という文字が表示され、起動が成功したことを示します。

    説明: 上記の警告内容は、solr 推奨システムで許可される最大プロセス数と最大オープンファイル数がそれぞれ 65000 と 65000 であり、システムのデフォルト値が推奨値より低いです。変更が必要な場合は、次の手順を参照してください。変更後、有効にするには再起動する必要があります。ここでは変更できません。

    (1)修改打开文件数限制
    修改/etc/security/limits.conf文件,增加以下内容:
    * soft nofile 65000
    * hard nofile 65000
    
    (2)修改进程数限制
    修改/etc/security/limits.d/20-nproc.conf文件
    * soft nproc 65000
    
    (3)重启服务器
    

(7) ウェブページにアクセスする

デフォルトのポートは 8983 です。3 つのノード IP のいずれかを指定できます ( http://hadoop102:8983)。

ヒント: Solr のクラウド モードは、UI インターフェイスにクラウド メニュー バーが表示される場合にのみ正常にデプロイされます。

Atlas2.1.0をインストールする

(1) apache-atlas-2.1.0-server.tar.gzをhadoop102の/opt/softwareディレクトリにアップロードします

(2) apache-atlas-2.1.0-server.tar.gzを/opt/module/ディレクトリに解凍します。

[root@hadoop102 software]# tar -zxvf apache-atlas-2.1.0-server.tar.gz -C /opt/module/

(3) apache-atlas-2.1.0 の名前を atlas に変更します

[root@hadoop102 ~]# mv /opt/module/apache-atlas-2.1.0 /opt/module/atlas

アトラスの構成

Atlas は Hbase を統合します

(1) /opt/module/atlas/conf/atlas-application.properties 設定ファイル内の以下のパラメータを変更します。

atlas.graph.storage.hostname=hadoop102:2181,hadoop103:2181,hadoop104:2181

(2) /opt/module/atlas/conf/atlas-env.sh 設定ファイルを変更し、以下の内容を追加します

export HBASE_CONF_DIR=/opt/module/hbase/conf

Atlas は Solr を統合します

(1) /opt/module/atlas/conf/atlas-application.properties 設定ファイル内の以下のパラメータを変更します。

atlas.graph.index.search.backend=solr
atlas.graph.index.search.solr.mode=cloud
atlas.graph.index.search.solr.zookeeper-url=hadoop102:2181,hadoop103:2181,hadoop104:2181

(2) solrコレクションの作成

[root@hadoop102 ~]# sudo -i -u solr /opt/module/solr/bin/solr create  -c vertex_index -d /opt/module/atlas/conf/solr -shards 3 -replicationFactor 2
[root@hadoop102 ~]# sudo -i -u solr /opt/module/solr/bin/solr create -c edge_index -d /opt/module/atlas/conf/solr -shards 3 -replicationFactor 2
[root@hadoop102 ~]# sudo -i -u solr /opt/module/solr/bin/solr create -c fulltext_index -d /opt/module/atlas/conf/solr -shards 3 -replicationFactor 2

Atlas は Kafka を統合します

/opt/module/atlas/conf/atlas-application.properties 構成ファイル内の次のパラメータを変更します。

atlas.notification.embedded=false
atlas.kafka.data=/opt/module/kafka/data
atlas.kafka.zookeeper.connect= hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka
atlas.kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092

アトラスサーバーの構成

(1) /opt/module/atlas/conf/atlas-application.properties 設定ファイル内の以下のパラメータを変更します。

#########  Server Properties  #########
atlas.rest.address=http://hadoop102:21000
# If enabled and set to true, this will run setup steps when the server starts
atlas.server.run.setup.on.start=false

#########  Entity Audit Configs  #########
atlas.audit.hbase.zookeeper.quorum=hadoop102:2181,hadoop103:2181,hadoop104:2181

(2) パフォーマンス指標を記録し、/opt/module/atlas/conf/ パスを入力し、現在のディレクトリの atlas-log4j.xml を変更します。

[root@hadoop101 conf]# vim atlas-log4j.xml

#去掉如下代码的注释
<appender name="perf_appender" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="${atlas.log.dir}/atlas_perf.log" />
    <param name="datePattern" value="'.'yyyy-MM-dd" />
    <param name="append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d|%t|%m%n" />
    </layout>
</appender>

<logger name="org.apache.atlas.perf" additivity="false">
    <level value="debug" />
    <appender-ref ref="perf_appender" />
</logger>

Kerberos関連の設定

Hadoop クラスターで Kerberos 認証が有効になっている場合、Atlas が Hadoop クラスターと対話する前に Kerberos 認証を実行する必要があります。Hadoop クラスターで Kerberos 認証が有効になっていない場合は、このセクションをスキップしてください。

(1) Atlas の Kerberos プリンシパルを作成し、keytab ファイルを生成します

[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey atlas/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/atlas.service.keytab atlas/hadoop102"

(2) /opt/module/atlas/conf/atlas-application.properties 設定ファイルを変更し、次のパラメータを追加します

atlas.authentication.method=kerberos
atlas.authentication.principal=atlas/[email protected]
atlas.authentication.keytab=/etc/security/keytab/atlas.service.keytab

Atlas は Hive と統合します

(1) ハイブフックのインストール

  • ハイブフックを解凍します

    [root@hadoop102 ~]# tar -zxvf apache-atlas-2.1.0-hive-hook.tar.gz
    
  • Hive Hook の依存関係を Atlas インストール パスにコピーします。

    [root@hadoop102 ~]# cp -r apache-atlas-hive-hook-2.1.0/* /opt/module/atlas/
    
  • /opt/module/hive/conf/hive-env.sh 構成ファイルを変更します。

    注: 最初にファイル名を変更する必要があります

    [root@hadoop102 ~]# mv hive-env.sh.template hive-env.sh
    

    次のパラメータを追加します

    export HIVE_AUX_JARS_PATH=/opt/module/atlas/hook/hive
    

(2) Hive 構成ファイルを変更し、/opt/module/hive/conf/hive-site.xml ファイルに次のパラメーターを追加して、Hive フックを構成します。

<property>
    <name>hive.exec.post.hooks</name>
    <value>org.apache.atlas.hive.hook.HiveHook</value>
</property>

(3) /opt/module/atlas/conf/atlas-application.properties 設定ファイル内の以下のパラメータを変更します。

######### Hive Hook Configs #######
atlas.hook.hive.synchronous=false
atlas.hook.hive.numRetries=3
atlas.hook.hive.queueSize=10000
atlas.cluster.name=primary

(4) Atlas 設定ファイル /opt/module/atlas/conf/atlas-application.properties

[root@hadoop102 ~]# cp /opt/module/atlas/conf/atlas-application.properties  /opt/module/hive/conf/

アトラスの発売

(1) Hadoopクラスタの起動

NameNode ノードで次のコマンドを実行して HDFS を開始します。

[root@hadoop102 ~]# start-dfs.sh

ResourceManager ノードで次のコマンドを実行して Yarn を開始します。

[root@hadoop103 ~]# start-yarn.sh

(2) Zookeeper クラスターを開始します。

[root@hadoop102 ~]# zk.sh start

(3) Kafka クラスターを開始します。

[root@hadoop102 ~]# kf.sh start

(4) Hbase クラスターを起動します。

HMaster ノードで次のコマンドを実行して、HBase ユーザーとして HBase を起動します。

[root@hadoop102 ~]# sudo -i -u hbase start-hbase.sh

(5) Solr クラスターを起動します。

すべてのノードで次のコマンドを実行して、Solr ユーザーとして Solr を起動します。

[root@hadoop102 ~]# sudo -i -u solr /opt/module/solr/bin/solr start
[root@hadoop103 ~]# sudo -i -u solr /opt/module/solr/bin/solr start
[root@hadoop104 ~]# sudo -i -u solr /opt/module/solr/bin/solr start

(6) /opt/module/atlas パスを入力し、Atlas サービスを開始します

[root@hadoop102 atlas]# bin/atlas_start.py

ヒント:

  • エラー メッセージの表示パス: /opt/module/atlas/logs/*.out および application.log
  • Atlas サービスを停止するコマンドは atlas_stop.py です。

(7) AtlasのWebUIにアクセス

アクセスアドレス:http://hadoop102:21000

注: 数分間待ちます。

アカウント: 管理者

パスワード: 管理者

アトラス使用

Atlas の使用は比較的単純です。その主な仕事は、各サービス (主に Hive) のメタデータを同期し、メタデータ エンティティ間の関連関係を構築し、保存されたメタデータにインデックスを付け、最後にユーザーにデータ リネージの表示とメタデータの取得を提供することです。 。

Atlas のインストールの開始時に、メタデータの完全なインポートを手動で実行する必要があります。その後、Atlas は Hive フックを使用して Hive メタデータを段階的に同期します。

Hive メタデータを初めてインポートする

Atlas には、Hive メタデータをインポートするためのスクリプトが用意されています。スクリプトを直接実行して、Hive メタデータの最初の完全なインポートを完了します。

(1) Hiveメタデータのインポート

次のコマンドを実行します。

[root@hadoop102 ~]# /opt/module/atlas/hook-bin/import-hive.sh

プロンプトに従ってユーザー名を入力します: admin; パスワードを入力します: admin

Enter username for atlas :- admin
Enter password for atlas :- 

しばらく待つと、インポートが成功したことを示す次のログが表示されます。

Hive Meta Data import was successful!!!

(2) Hive メタデータの表示

  • hive_table タイプのメタデータを検索すると、Atlas がすでに Hive メタデータを取得していることがわかります。

  • 血液依存性を表示する表を選択してください

    Atlasはテーブルとフィールド間の依存関係やフィールド間の依存関係をHiveが実行するSQL文に基づいて取得しているため、この時点では期待した血縁関係が現れていないことが分かります。例えば、Atlasではテーブルaへのinsert into table_a select * from table_bステートメントを実行します。 table_a と table_b の間の依存関係を取得できます。この時点では SQL ステートメントは実行されないため、血液依存関係は現れません。

Hive メタデータの増分同期

Hive メタデータの増分同期には人間の介入は必要ありません。Hive 内のメタデータが変更される (DDL ステートメントを実行する) 限り、Hive フックはメタデータの変更を Atlas に通知します。さらに、Atlas は DML ステートメントに従ってデータ間の血縁関係も取得します。

全プロセスのスケジューリング

血縁関係の影響を確認するために、ここではアズカバンを使用してデータ ウェアハウスの全プロセスを一度スケジュールします。

(1) 新規データの準備

  • ユーザーの行動ログ

    a. Zookeeper、Kafka、Flume などのログ収集チャネルを開始します。

    b. 次のように、hadoop102 ノードと hadoop103 ノードの /opt/module/applog/application.yml ファイルを変更し、シミュレーション日付を 2020-06-17 に変更します。

    #业务日期
    mock.date: "2020-06-17"
    

    c. ログを生成するスクリプトを実行します。

    # lg.sh
    

    d. しばらく待って、2020-06-17 のログ ファイルが HDFS に表示されるかどうかを観察します。

  • ビジネスデータ

    a. 次のように /opt/module/db_log/application.properties を変更し、シミュレーションの日付を 2020-06-17 に変更します。

    #业务日期
    mock.date=2020-06-17
    

    b. /opt/module/db_log パスを入力し、次のようにコマンドを実行してビジネス データをシミュレートおよび生成します。

    # java -jar gmall2020-mock-db-2021-01-22.jar
    

    c. 2020-06-17 のデータが mysql の gmall データに表示されるかどうかを観察します。

(2)アズカバンスタート

アズカバンを開始するには、アズカバン ユーザーを使用する必要があることに注意してください。

  • エグゼキュータサーバーの起動

    各ノードで次のコマンドを実行して Executor を起動します。

    [root@hadoop102 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-exec;bin/start-exec.sh"
    [root@hadoop103 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-exec;bin/start-exec.sh"
    [root@hadoop104 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-exec;bin/start-exec.sh"
    
  • Executor Server をアクティブ化するには、ノードを選択し、次のアクティブ化コマンドを実行します。

    [root@hadoop102 ~]# curl http://hadoop102:12321/executor?action=activate
    [root@hadoop102 ~]# curl http://hadoop103:12321/executor?action=activate
    [root@hadoop102 ~]# curl http://hadoop104:12321/executor?action=activate
    
  • Web サーバーを起動します。

    [root@hadoop102 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-web;bin/start-web.sh"
    

(3) 全プロセスのスケジューリング

  • ワークフローパラメータ

  • 演算結果

血族関係を表示する

現時点では、Atlas を通じて Hive メタデータを表示すると、血液の依存関係を見つけることができます。

拡張コンテンツ

アトラスソースコードのコンパイル

Maven をインストールする

(1) Mavenダウンロード:https://maven.apache.org/download.cgi

(2) apache-maven-3.6.1-bin.tar.gzをLinuxの/opt/softwareディレクトリにアップロードする

(3) apache-maven-3.6.1-bin.tar.gzを/opt/module/ディレクトリに解凍します。

[root@hadoop102 software]# tar -zxvf apache-maven-3.6.1-bin.tar.gz -C /opt/module/

(4) apache-maven-3.6.1の名前をmavenに変更します

[root@hadoop102 module]# mv apache-maven-3.6.1/ maven

(5) /etc/profileに環境変数を追加

[root@hadoop102 module]#vim /etc/profile
#MAVEN_HOME
export MAVEN_HOME=/opt/module/maven
export PATH=$PATH:$MAVEN_HOME/bin

(6) テスト導入結果

[root@hadoop102 module]# source /etc/profile
[root@hadoop102 module]# mvn -v

(7) Alibaba Cloud として指定して、setting.xml を変更します。

[root@hadoop101 module]# cd /opt/module/maven/conf/
[root@hadoop102 maven]# vim settings.xml

<!-- 添加阿里云镜像-->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
    <id>UK</id>
    <name>UK Central</name>
    <url>http://uk.maven.org/maven2</url>
    <mirrorOf>central</mirrorOf>
</mirror>
<mirror>
    <id>repo1</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
    <id>repo2</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://repo2.maven.org/maven2/</url>
</mirror>

Atlas ソース コードをコンパイルする

(1) apache-atlas-2.1.0-sources.tar.gz を hadoop102 の /opt/software ディレクトリにアップロードします

(2) apache-atlas-2.1.0-sources.tar.gzを/opt/module/ディレクトリに解凍します。

[root@hadoop101 software]# tar -zxvf apache-atlas-2.1.0-sources.tar.gz -C /opt/module/

(3) Atlas の依存関係をダウンロードする

[root@hadoop101 software]# export MAVEN_OPTS="-Xms2g -Xmx2g"

[root@hadoop101 software]# cd /opt/module/apache-atlas-sources-2.1.0/
[root@hadoop101 apache-atlas-sources-2.1.0]# mvn clean -DskipTests install
[root@hadoop101 apache-atlas-sources-2.1.0]# mvn clean -DskipTests package -Pdis
#一定要在${atlas_home}执行
[root@hadoop101 apache-atlas-sources-2.1.0]# cd distro/target/
[root@hadoop101 target]# mv apache-atlas-2.1.0-server.tar.gz /opt/software/
[root@hadoop101 target]# mv apache-atlas-2.1.0-hive-hook.tar.gz /opt/software/

ヒント: 実行プロセスは比較的長く、多くの依存関係がダウンロードされるため、約 30 分かかります。この期間中にエラーが報告された場合は、タイムアウトによるネットワークの中断が原因である可能性があります。もう一度お試しください。

アトラスのメモリ構成

数万のメタデータ オブジェクトを保存する予定がある場合は、最高の JVM GC パフォーマンスが得られるようにパラメータ値を調整することをお勧めします。一般的なサーバー側オプションは次のとおりです。

構成ファイル /opt/module/atlas/conf/atlas-env.sh を変更します。

#设置Atlas内存
export ATLAS_SERVER_OPTS="-server -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+PrintTenuringDistribution -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dumps/atlas_server.hprof -Xloggc:logs/gc-worker.log -verbose:gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1m -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCTimeStamps"

#建议JDK1.7使用以下配置
export ATLAS_SERVER_HEAP="-Xms15360m -Xmx15360m -XX:MaxNewSize=3072m -XX:PermSize=100M -XX:MaxPermSize=512m"

#建议JDK1.8使用以下配置
export ATLAS_SERVER_HEAP="-Xms15360m -Xmx15360m -XX:MaxNewSize=5120m -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=512m"

#如果是Mac OS用户需要配置
export ATLAS_SERVER_OPTS="-Djava.awt.headless=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="

パラメータの説明: -XX:SoftRefLRUPolicyMSPerMB このパラメータは、多くの同時ユーザーによるクエリ負荷の高いワークロードの GC パフォーマンスを管理する場合に特に役立ちます。

ユーザー名とパスワードを設定する

Atlas は、ファイル、Kerberos プロトコル、LDAP プロトコルの認証方法をサポートしています。

構成ファイル atlas-application.properties を変更して、3 つの検証方法を有効または無効にします。

atlas.authentication.method.kerberos=true|false
atlas.authentication.method.ldap=true|false
atlas.authentication.method.file=true|false

2 つ以上の ID 認証方法が true に設定されている場合、前の方法が失敗した場合、認証は後の方法にフォールバックされます。たとえば、Kerberos 認証が true に設定され、LDAP 認証も true に設定されている場合、LDAP 認証は、Kerberos プリンシパルとキータブのないリクエストのフォールバックとして使用されます。

この記事では主に、ファイルを使用してユーザー名とパスワードの設定を変更する方法について説明します。その他の方法については公式サイトの設定をご参照ください。

(1) /opt/module/atlas/conf/users-credentials.properties ファイルを開きます

[atguigu@hadoop102 conf]$ vim users-credentials.properties

#username=group::sha256-password
admin=ADMIN::8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
rangertagsync=RANGER_TAG_SYNC::e3f67240f5117d1753c940dae9eea772d36ed5fe9bd9c94a300e40413f1afb9d

admin はユーザー名です

8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 は sha256 で暗号化されたパスワードで、デフォルトのパスワードは admin です。

(2) 例: ユーザー名を atguigu、パスワードを atguigu に変更します。

  • sha256 で暗号化された atguigu パスワードを取得します。

    [atguigu@hadoop102 conf]$ echo -n "atguigu"|sha256sum
    2628be627712c3555d65e0e5f9101dbdd403626e6646b72fdf728a20c5261dc2
    
  • ユーザー名とパスワードを変更します。

    [atguigu@hadoop102 conf]$ vim users-credentials.properties
    
    #username=group::sha256-password
    atguigu=ADMIN::2628be627712c3555d65e0e5f9101dbdd403626e6646b72fdf728a20c5261dc2
    rangertagsync=RANGER_TAG_SYNC::e3f67240f5117d1753c940dae9eea772d36ed5fe9bd9c94a300e40413f1afb9d
    

おすすめ

転載: blog.csdn.net/qq_44766883/article/details/131228442