オヌプン゜ヌス DataHub: LinkedIn のメタデヌタ怜玢および怜出プラットフォヌム

オヌプン゜ヌス DataHub: LinkedIn のメタデヌタ怜玢および怜出プラットフォヌム

倧量のデヌタを利甚しおデヌタに基づく意思決定を行う䌁業にずっお、必芁なデヌタを迅速に芋぀けるこずは䞍可欠です。これは、デヌタ ナヌザヌ (アナリスト、機械孊習開発者、デヌタ サむ゚ンティスト、デヌタ ゚ンゞニアを含む) の生産性に圱響を䞎えるだけでなく、高品質の機械孊習 (ML) パむプラむンに䟝存する最終補品にも盎接圱響を䞎えたす。さらに、機械孊習プラットフォヌムの実装たたは構築の傟向により、圓然、「機胜、モデル、メトリック、デヌタセットなどを内郚で発芋する方法は䜕ですか」ずいう疑問が生じたす。

この蚘事では、オヌプン ラむセンスの䞋でデヌタ ゜ヌスを公開する方法に぀いお説明したす。 デヌタハブ プロゞェクトの最初の日から、メタデヌタ怜玢および発芋プラットフォヌムで どこでどうやっお。 LinkedIn は、オヌプン゜ヌス バヌゞョンずは別に、独自のバヌゞョンの DataHub を維持しおいたす。たず、なぜ2぀の別々の開発環境が必芁なのかを説明し、次にオヌプン゜ヌスのWhereHowsを䜿甚する初期のアプロヌチに぀いお説明し、DataHubの内郚本番バヌゞョンず GitHub。たた、オヌプン゜ヌスのアップデヌトをプッシュおよびプルしお䞡方のリポゞトリの同期を保぀ための新しい自動化゜リュヌションの詳现も共有したす。最埌に、オヌプン゜ヌスの DataHub の䜿甚を開始する方法に぀いお説明し、そのアヌキテクチャに぀いお簡単に説明したす。

オヌプン゜ヌス DataHub: LinkedIn のメタデヌタ怜玢および怜出プラットフォヌム

WhereHows は DataHub になりたした!

LinkedInのメタデヌタチヌムは以前、 デヌタハブ LinkedIn のメタデヌタ怜玢および発芋プラットフォヌムである WhereHows の埌継に぀いお説明し、それを公開する蚈画を共有したした。この発衚の盎埌に、DataHub のアルファ版をリリヌスし、コミュニティず共有したした。それ以来、私たちはリポゞトリに継続的に貢献し、関心のあるナヌザヌず協力しお、最もリク゚ストの倚い機胜を远加し、問題を解決しおきたした。正匏リリヌスを発衚できるこずを嬉しく思いたす GitHub 䞊の DataHub.

オヌプン゜ヌスのアプロヌチ

LinkedIn のデヌタずその出所を怜玢するためのオリゞナルのポヌタルである WhereHows は、瀟内プロゞェクトずしお始たりたした。メタデヌタチヌムがそれを公開したした 2016幎の゜ヌスコヌド。それ以来、チヌムは垞に 2 ぀の異なるコヌドベヌスを維持しおきたした。1 ぀はオヌプン゜ヌス甚、もう 1 ぀は LinkedIn の瀟内䜿甚甚です。これは、LinkedIn のナヌスケヌス向けに開発されたすべおの補品機胜が、より広いナヌザヌ局に䞀般的に適甚できるわけではないためです。さらに、WhereHows にはオヌプン゜ヌスではない内郚䟝存関係 (フレヌムワヌク、ラむブラリなど) がいく぀かありたす。その埌数幎間、WhereHows は倚くの反埩ず開発サむクルを経お、2 ぀のコヌドベヌスの同期を維持するこずが倧きな課題ずなりたした。メタデヌタ チヌムは、瀟内開発ずオヌプン ゜ヌス開発を同期させるために、長幎にわたっおさたざたなアプロヌチを詊みおきたした。

最初の詊み「オヌプン゜ヌスを第䞀に」

圓初、私たちは「オヌプン゜ヌスファヌスト」の開発モデルを採甚しおいたした。このモデルでは、䞻な開発はオヌプン゜ヌスリポゞトリで行われ、倉曎は内郚展開甚に行われたす。このアプロヌチの問題点は、コヌドが内郚で完党にレビュヌされる前に、必ず最初に GitHub にプッシュされるこずです。オヌプン゜ヌス リポゞトリから倉曎が取埗され、新しい内郚展開が完了するたで、実皌働䞊の問題は発生したせん。䞍適切なデプロむメントの堎合、倉曎が䞀括しお導入されたため、原因を特定するこずも非垞に困難でした。

さらに、このモデルでは、すべおの倉曎を最初にオヌプン゜ヌス リポゞトリにプッシュしおから、内郚リポゞトリにプッシュする必芁があったため、迅速な反埩を必芁ずする新機胜の開発時にチヌムの生産性が䜎䞋したした。凊理時間を短瞮するために、たず内郚リポゞトリで必芁な修正や倉曎を行うこずもできたすが、2 ぀のリポゞトリが同期されおいないため、それらの倉曎をオヌプン ゜ヌス リポゞトリにマヌゞする際に倧きな問題が生じたす。

このモデルは、フル機胜のカスタム Web アプリケヌションよりも、䞀般的なプラットフォヌム、ラむブラリ、たたはむンフラストラクチャ プロゞェクトに実装する方がはるかに簡単です。さらに、このモデルは初日からオヌプン゜ヌスで始めるプロゞェクトには理想的ですが、Wh​​ereHows は完党に瀟内向けの Web アプリケヌションずしお構築されたした。すべおの内郚䟝存関係を完党に抜象化するのは非垞に困難だったため、内郚フォヌクを維持する必芁がありたしたが、内郚フォヌクを維持し、倧郚分をオヌプン゜ヌスで開発するこずはうたくいきたせんでした。

2回目の詊み「たずは内郚から」

** 2 床目の詊みずしお、私たちは「瀟内優先」開発モデルに移行したした。このモデルでは、䞻な開発は瀟内で行われ、オヌプン゜ヌス コヌドに定期的に倉曎が加えられたす。このモデルは私たちのナヌスケヌスに最適ですが、独自の問題もありたす。すべおの盞違点をオヌプン゜ヌス リポゞトリに盎接プッシュし、埌でマヌゞの競合を解決しようずするこずも遞択肢の 1 ぀ですが、時間がかかりたす。ほずんどの堎合、開発者はコヌドをチェックするたびにこれを行わないようにしたす。その結果、これはバッチで実行される頻床が倧幅に枛り、その埌のマヌゞ競合の解決がより困難になりたす。

3回目ですべおうたくいきたした

䞊蚘の 2 回の倱敗した詊みの結果、WhereHows GitHub リポゞトリは長い間叀いたたになっおしたいたした。チヌムは補品の機胜ずアヌキテクチャの改良を続け、WhereHows for LinkedIn の瀟内バヌゞョンはオヌプン゜ヌス バヌゞョンよりも進化したした。新しい名前も DataHub になりたした。チヌムは、これたでの倱敗した詊みに基づいお、スケヌラブルで長期的な゜リュヌションを開発するこずを決定したした。

LinkedIn のオヌプン゜ヌス チヌムは、新しいオヌプン゜ヌス プロゞェクトに察しお、プロゞェクトのモゞュヌルが完党にオヌプン゜ヌスで開発される開発モデルに぀いおアドバむスずサポヌトを提䟛したす。バヌゞョン管理された成果物はパブリックリポゞトリにデプロむされ、その埌LinkedInの内郚成果物にプッシュバックされたす。 倖郚ラむブラリリク゚ストELR。この開発モデルに埓うこずは、オヌプン゜ヌスを䜿甚する人にずっお有益であるだけでなく、よりモゞュヌル化され、拡匵可胜で、プラグ可胜なアヌキテクチャをもたらしたす。

ただし、DataHub のような成熟した内郚アプリケヌションがこの状態に到達するには、かなりの時間がかかりたす。これにより、すべおの内郚䟝存関係が完党に抜象化される前に、完党に機胜する実装をオヌプン゜ヌス化する可胜性も排陀されたす。そこで私たちは、オヌプン゜ヌスぞの貢献をより迅速か぀容易に行えるツヌルを開発したした。この゜リュヌションは、メタデヌタ チヌム (DataHub の開発者) ずオヌプン ゜ヌス コミュニティの䞡方にメリットをもたらしたす。次のセクションでは、この新しいアプロヌチに぀いお説明したす。

オヌプン゜ヌス公開の自動化

メタデヌタ グルヌプのオヌプン ゜ヌス DataHub に察する最新のアプロヌチは、内郚コヌドベヌスずオヌプン ゜ヌス リポゞトリを自動的に同期するツヌルを開発するこずです。このツヌルキットの䞻な機胜は次のずおりです。

  1. LinkedInのコヌドをオヌプン゜ヌスず同期する、類䌌の rsync.
  2. 次のようなラむセンスヘッダヌを生成したす アパッチラット.
  3. 内郚コミット ログからオヌプン ゜ヌス コミット ログを自動的に生成したす。
  4. 内郚の倉曎がオヌプン゜ヌスビルドを壊すのを防ぐには 䟝存性テスト.

以䞋のサブセクションでは、興味深い問題を抱える䞊蚘の関数に぀いお詳しく説明したす。

゜ヌスコヌド同期

単䞀のGitHubリポゞトリであるDataHubのオヌプン゜ヌス版ずは異なり、DataHubのLinkedIn版は耇数のリポゞトリ内郚的には 耇数の補品。 DataHub むンタヌフェヌス、メタデヌタ モデル ラむブラリ、メタデヌタ ストア バック゚ンド サヌビス、ストリヌミング ゞョブは、LinkedIn 䞊の異なるリポゞトリにありたす。ただし、オヌプン゜ヌス ナヌザヌの利䟿性を考えお、DataHub のオヌプン゜ヌス バヌゞョン甚のリポゞトリを 1 ぀甚意しおいたす。

オヌプン゜ヌス DataHub: LinkedIn のメタデヌタ怜玢および怜出プラットフォヌム

図1: リポゞトリ間の同期 LinkedIn デヌタハブ 単䞀のリポゞトリ デヌタハブ オヌプン゜ヌス

自動化されたビルド、プッシュ、プル ワヌクフロヌをサポヌトするために、新しいツヌルは各゜ヌス ファむルに察応するファむル レベルのマッピングを自動的に䜜成したす。ただし、ツヌルキットには初期蚭定が必芁であり、ナヌザヌは以䞋に瀺すようにモゞュヌルの高レベルのマッピングを提䟛する必芁がありたす。

{
  "datahub-dao": [
    "${datahub-frontend}/datahub-dao"
  ],
  "gms/impl": [
    "${dataset-gms}/impl",
    "${user-gms}/impl"
  ],
  "metadata-dao": [
    "${metadata-models}/metadata-dao"
  ],
  "metadata-builders": [
    "${metadata-models}/metadata-builders"
  ]
}

モゞュヌル レベルのマッピングは、キヌがオヌプン ゜ヌス リポゞトリ内のタヌゲット モゞュヌルであり、倀が LinkedIn のリポゞトリ内の゜ヌス モゞュヌルのリストである単玔な JSON です。オヌプン゜ヌス リポゞトリ内の任意のタヌゲット モゞュヌルは、任意の数の゜ヌス モゞュヌルにフィヌドできたす。゜ヌスモゞュヌル内の内郚リポゞトリ名を瀺すには、 文字列補間 Bash スタむルで。ツヌルは、モゞュヌル レベルのマッピング ファむルを䜿甚しお、関連付けられたディレクトリ内のすべおのファむルをスキャンし、ファむル レベルのマッピング ファむルを䜜成したす。

{
  "${metadata-models}/metadata-builders/src/main/java/com/linkedin/Foo.java":
"metadata-builders/src/main/java/com/linkedin/Foo.java",
  "${metadata-models}/metadata-builders/src/main/java/com/linkedin/Bar.java":
"metadata-builders/src/main/java/com/linkedin/Bar.java",
  "${metadata-models}/metadata-builders/build.gradle": null,
}

ファむル レベルのマッピングはツヌルによっお自動的に䜜成されたす。ただし、ナヌザヌが手動で曎新するこずもできたす。これは、元の LinkedIn ファむルずオヌプン ゜ヌス リポゞトリ内のファむルの 1:1 マッピングです。この自動ファむル マッピング䜜成には、いく぀かのルヌルが関連しおいたす。

  • オヌプン゜ヌスのタヌゲットモゞュヌルに耇数の゜ヌスモゞュヌルがある堎合、䟋えば同じ FQCN耇数の゜ヌス モゞュヌルに存圚したす。私たちのツヌルは、競合解決戊略ずしお、デフォルトで「最埌の 1 ぀を優先する」オプションを䜿甚したす。
  • 「null」は、゜ヌス ファむルがオヌプン ゜ヌス リポゞトリの䞀郚ではないこずを意味したす。
  • オヌプン゜ヌスぞのプッシュやオヌプン゜ヌスからのプルが行われるたびに、このマッピングは自動的に曎新され、スナップショットが䜜成されたす。これは、最埌のアクション以降の゜ヌス コヌドの远加ず削陀を刀断するために必芁です。

コミットログの䜜成

オヌプン゜ヌス コミットのコミット ログも、内郚リポゞトリからのコミット ログをマヌゞするこずによっお自動的に生成されたす。以䞋は、圓瀟のツヌルによっお生成されたコミット ログの構造を瀺すサンプル コミット ログです。コミットでは、そのコミットにパッケヌゞ化されおいる゜ヌス リポゞトリのバヌゞョンが明確に瀺され、コミット ログ情報の抂芁が提䟛されたす。これをチェックしおください 専念 私たちのツヌルキットによっお䜜成されたコミット ログの実際の䟋を䜿甚したす。

metadata-models 29.0.0 -> 30.0.0
    Added aspect model foo
    Fixed issue bar

dataset-gms 2.3.0 -> 2.3.4
    Added rest.li API to serve foo aspect

MP_VERSION=dataset-gms:2.3.4
MP_VERSION=metadata-models:30.0.0

䟝存性テスト

LinkedInは 䟝存性テストむンフラストラクチャこれにより、内郚のマルチプロダクトぞの倉曎によっお、䟝存するマルチプロダクトのビルドが壊れるこずがなくなりたす。オヌプン゜ヌスの DataHub リポゞトリはマルチプロダクトではないため、どのマルチプロダクトにも盎接䟝存するこずはできたせんが、オヌプン゜ヌスの DataHub ゜ヌスコヌドを取埗するマルチプロダクト ラッパヌを䜿甚するこずで、この䟝存関係テスト システムを匕き続き䜿甚できたす。したがっお、オヌプン゜ヌスの DataHub リポゞトリにフィヌドするマルチプロダクトのいずれかの倉曎 (埌でオヌプン゜ヌス化される可胜性がありたす) は、ラッパヌ マルチプロダクトでビルド むベントをトリガヌしたす。したがっお、シェルのマルチプロダクトの構築を蚱可しない倉曎は、元のマルチプロダクトがコミットされお元に戻される前にテストに倱敗したす。

これは、オヌプン゜ヌス ビルドを壊す内郚コミットを防ぎ、コミット時にそれを怜出するのに圹立぀䟿利なメカニズムです。これがないず、内郚倉曎のバッチをオヌプン゜ヌスの DataHub リポゞトリにプッシュするため、どの内郚コミットがオヌプン゜ヌス リポゞトリのビルドの倱敗の原因ずなったかを特定するのが非垞に難しくなりたす。

オヌプン゜ヌスのDataHubず補品版の違い

ここたで、2 ぀のバヌゞョンの DataHub リポゞトリを同期させるための゜リュヌションに぀いお説明しおきたしたが、そもそも 2 ぀の異なる開発ストリヌムが必芁な理由に぀いおはただ説明しおいたせん。このセクションでは、DataHub のパブリック バヌゞョンず LinkedIn のサヌバヌ䞊の補品バヌゞョンの違いをリストし、それらの違いの理由に぀いお説明したす。

矛盟の原因の 1 ぀は、補品版が LinkedIn の Offspring (LinkedIn の内郚䟝存性泚入フレヌムワヌク) など、ただオヌプン ゜ヌスではないコヌドに䟝存しおいるずいう事実です。 Offspring は動的構成を管理するための掚奚方法であるため、内郚コヌドベヌスで広く䜿甚されおいたす。しかし、これはオヌプン゜ヌスではありたせん。そのため、オヌプン゜ヌスの DataHub に代わるオヌプン゜ヌスの代替品を芋぀ける必芁がありたした。

他にも理由はありたす。 LinkedIn のニヌズに合わせおメタデヌタ モデルの拡匵機胜を䜜成するず、これらの拡匵機胜は通垞 LinkedIn に特有のものずなり、他の環境に盎接適甚されない可胜性がありたす。たずえば、参加者 ID やその他の皮類のコンプラむアンス メタデヌタには非垞に具䜓的なラベルがありたす。そのため、これらの拡匵機胜はオヌプン゜ヌスの DataHub メタデヌタ モデルから陀倖されたした。私たちはコミュニティず関わり、そのニヌズを理解しながら、必芁に応じおこれらの拡匵機胜の䞀般的なオヌプン゜ヌス バヌゞョンに取り組んでいきたす。

䜿いやすさずオヌプン゜ヌス コミュニティによる採甚のしやすさも、DataHub の 2 ぀のバヌゞョン間の違いの䞀郚に぀ながっおいたす。ストリヌム凊理むンフラストラクチャの違いが良い䟋です。瀟内バヌゞョンではマネヌゞド ストリヌム凊理フレヌムワヌクを䜿甚しおいたすが、別のむンフラストラクチャ䟝存関係の䜜成を回避するため、オヌプン ゜ヌス バヌゞョンでは組み蟌み (スタンドアロン) ストリヌム凊理を䜿甚するこずにしたした。

違いのもう 1 ぀の䟋ずしお、オヌプン ゜ヌス実装には耇数の GMS (䞀般化メタデヌタ ストア) ではなく 1 ぀の GMS が存圚するこずが挙げられたす。 GMA (Generalized Metadata Architecture) は DataHub の内郚アヌキテクチャの名前であり、GMS は GMA のコンテキスト内のメタデヌタ ストアです。 GMA は非垞に柔軟なアヌキテクチャであり、デヌタ構造ず GMS のマッピングを含むレゞストリが曎新されおいる限り、各デヌタ構造 (デヌタセット、ナヌザヌなど) を独自のメタデヌタ ストアに分散したり、耇数のデヌタ構造を単䞀のメタデヌタ ストアに保存したりするこずができたす。䜿いやすさを考慮しお、オヌプン゜ヌスの DataHub 内のさたざたなデヌタ構造をすべお保存する単䞀の GMS むンスタンスを遞択したした。

2 ぀の実装間の違いの完党なリストを以䞋の衚に瀺したす。

補品の特城
LinkedIn デヌタハブ
オヌプン゜ヌスデヌタハブ

サポヌトされおいるデヌタ構造
1) デヌタセット 2) ナヌザヌ 3) 指暙 4) ML 機胜 5) チャヌト 6) ダッシュボヌド
1) デヌタセット 2) ナヌザヌ

デヌタセットでサポヌトされおいるメタデヌタ゜ヌス
1) アンブリヌ 2) カりチベヌス 3) ダリッド 4) ゚スプレッ゜ 5) HDFS 6) Hive 7) Kafka 8) MongoDB 9) MySQL 10) Oracle 11) ピノ 12) プレスト 12) æµ· 13) テラデヌタ 13) ベクタヌ 14) ノェネツィア
Hive Kafka RDBMS

パブリッシュ/サブスク
LinkedIn カフカ
合流型カフカ

ストリヌム凊理
管理
組み蟌みスタンドアロン

䟝存性泚入ず動的構成
LinkedInの子孫
春

ビルドツヌル
Ligradle (LinkedIn の内郚 Gradle ラッパヌ)
グラドルフ

CI / CD
CRTLinkedIn の瀟内 CI/CD
トラビスCI の䞉脚ず Dockerハブ

メタデヌタストア
分散型耇数の GMS: 1) デヌタセット GMS 2) ナヌザヌ GMS 3) メトリック GMS 4) 機胜 GMS 5) チャヌト/ダッシュボヌド GMS
1) デヌタセット 2) ナヌザヌ甚の単䞀 GMS

Dockerコンテナ内のマむクロサヌビス

デッカヌ アプリケヌションの導入ず配垃を簡玠化したす コンテナ化。 DataHubのサヌビスのすべおの郚分はオヌプン゜ヌスであり、Kafkaなどのむンフラストラクチャコンポヌネントも含たれおいたす。 Elasticsearch, Neo4j О MySQLには独自の Docker むメヌゞがありたす。 Dockerコンテナをオヌケストレヌションするために、 ドッカヌの䜜成.

オヌプン゜ヌス DataHub: LinkedIn のメタデヌタ怜玢および怜出プラットフォヌム

図2: アヌキテクチャ デヌタハブ *オヌプン゜ヌス**

䞊の図で、DataHub の高レベルアヌキテクチャを確認できたす。むンフラストラクチャ コンポヌネントに加えお、次の 4 ぀の異なる Docker コンテナがありたす。

datahub-gms: メタデヌタストレヌゞサヌビス

デヌタハブフロント゚ンド: アプリケヌション プレむDataHub むンタヌフェヌスを提䟛したす。

datahub-mce-consumer: アプリケヌション カフカストリヌムメタデヌタ倉曎むベント (MCE) ストリヌムを消費し、メタデヌタ ストアを曎新したす。

datahub-mae-consumer: アプリケヌション カフカストリヌムは、メタデヌタ監査むベント (MAE) ストリヌムを䜿甚しお、怜玢むンデックスずグラフ デヌタベヌスを䜜成したす。

オヌプン゜ヌスリポゞトリのドキュメントず DataHubブログのオリゞナル投皿 さたざたなサヌビスの機胜に関するより詳现な情報が含たれおいたす。

オヌプン゜ヌス DataHub の CI/CD

オヌプン゜ヌスのDataHubリポゞトリは トラビスCI 継続的むンテグレヌションず Dockerハブ 継続的なデプロむメント甚。どちらも GitHub ず適切に統合されおおり、セットアップも簡単です。コミュニティや民間䌁業によっお開発されるほずんどのオヌプン゜ヌス むンフラストラクチャ (䟋: ゞャンクショ​​ン)、Docker むメヌゞが䜜成され、コミュニティが簡単に䜿甚できるように Docker Hub にデプロむされたす。 Docker HubにあるDockerむメヌゞは簡単なコマンドで簡単に䜿甚できたす。 ドッカヌプル.

DataHub オヌプン゜ヌス リポゞトリにコミットするたびに、すべおの Docker むメヌゞが自動的にビルドされ、「最新」タグが付けられお Docker Hub にデプロむされたす。 Docker Hubにいく぀かの蚭定がされおいる堎合 正芏衚珟ブランチの呜名オヌプン゜ヌス リポゞトリ内のすべおのタグは、察応するタグ名ずずもに Docker Hub でもリリヌスされたす。

DataHubの䜿甚

DataHubの蚭定 非垞にシンプルで、次の 3 ぀の簡単なステップで構成されおいたす。

  1. オヌプン゜ヌス リポゞトリのクロヌンを䜜成し、提䟛されおいる docker-compose クむックスタヌト スクリプトを䜿甚しお、すべおの Docker コンテナヌを docker-compose で実行したす。
  2. 提䟛されおいるコマンドラむン ツヌルを䜿甚しお、リポゞトリで提䟛されおいるサンプル デヌタをダりンロヌドしたす。
  3. ブラりザで DataHub を衚瀺したす。

積極的に監芖 Gitterチャット 簡単な質問にも察応したす。ナヌザヌは GitHub リポゞトリ内で盎接問題を䜜成するこずもできたす。最も重芁なこずは、すべおのフィヌドバックず提案を歓迎し、感謝するこずです。

将来の蚈画

珟圚、オヌプン゜ヌスのDataHubの各むンフラストラクチャたたはマむクロサヌビスはDockerコンテナずしお構築されおおり、システム党䜓は ドッカヌの䜜成。人気ず幅広い䜿甚を考えるず Kubernetes近い将来には Kubernetes ベヌスの゜リュヌションも提䟛したいず考えおいたす。

たた、DataHubをパブリッククラりドサヌビスに導入するためのタヌンキヌ゜リュヌションも提䟛する予定です。 Azure, AWS たたは Googleクラりド。 LinkedIn が最近 Azure ぞの移行を発衚したこずを考えるず、これはメタデヌタ チヌムの内郚優先事項ず䞀臎するこずになりたす。

最埌になりたしたが、DataHub のアルファ バヌゞョンをレビュヌし、問題の特定ずドキュメントの改善にご協力いただいたオヌプン ゜ヌス コミュニティの DataHub 早期導入者の皆さんに感謝申し䞊げたす。

出所 habr.com