[CDGC] Apache Hive のスキャン

今年は Advent Calendar に参加します！という事で、この記事は インフォマティカ [Advent Calendar 2023](
https://qiita.com/advent-calendar/2023/informatica
) Day 12 の記事として書いています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/240bacc3-372e-ff35-58fa-0edf7a9362d4.png)


# はじめに
この記事は[インフォマティカ](https://www.informatica.com/jp/)が提供する [CDGC](https://www.informatica.com/jp/products/data-governance/cloud-data-governance-and-catalog.html)(データガバナンス＆カタログ) を使って Hive をスキャンする為のガイドとなります。プライベートアカウントで EMR を作っているので、プロファイルしてないじゃないか、というご指摘はご容赦頂いて、メタデータのみのスキャンでご勘弁頂けると嬉しいです。
※2023/12月時点の情報を元にしています。


<!-- 各チャプター -->
# 事前準備
CDGC がセットアップ済みであり、メタデータコマンドセンターのメニューにアクセスできるライセンス、およびユーザロール、ユーザである事を確認して下さい。詳細は [こちらのナレッジベース](https://knowledge.informatica.com/s/article/FAQ-CDGC-apps-licenses-roles?language=ja) を確認頂ければと思います。

また、CDGC でリソースをスキャンする際には一般的に事前に接続を作成する必要があります。Hive も同様なのですが、Hive の場合は接続先の Hadoop のディストリビューションベンダー毎に必要なライブラリが異なる為、事前に SA 上でそれらのライブラリを準備する作業が必要になります。詳細は [Informatica® Cloud Data Integration Hive Connector](
https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/hive-connector/introduction-to-hive-connector/configure-hive-connector-to-download-the-distribution-specific-h/step-1--run-the-script-on-a-linux-system.html) にありますが、こちらに従って、まずはライブラリをインストールするところから始めていきましょう。

:::note warn
ディストリビューションには Azure HDInsight を利用しようと思っていたのですが、スクリプトがアクセスするリポジトリ側に変更があったようで、ちょっと対処([KB000214195](https://knowledge.informatica.com/s/article/How-to-configure-a-Hive-connection-on-Azure-HDInsight?language=en_US))が必要になってしまっています。2024年2月頃に修正される予定(現時点での見込み)ではあるのですが、今回は事前準備が結構、長いのでこれ以上長くならない様、Amazon EMR クラスターを用意してスキャンを実施してみたいと思います。
:::

## 1. 接続先ディストリビューションに応じたスクリプトを実行する
ここはマニュアルの [Step 1. Run the script on a Linux system](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/hive-connector/introduction-to-hive-connector/configure-hive-connector-to-download-the-distribution-specific-h/step-1--run-the-script-on-a-linux-system.html) に該当する作業です。まず、上記ドキュメントにあるように Secure Agent をインストールしたホストにログインし、script フォルダへ移動します。

```
cd <Secure Agent installation directory>/downloads/package-hiveadapter.<version>/package/hive/thirdparty/informatica.hiveadapter/scripts
```

script フォルダ内の downloadHiveLibs.sh を実行すると、CDI と CDI Advanced Mode と選択肢が表示されます。ここでは 1) CDI を選択してください。

~~~
$ sh downloadHiveLibs.sh
============================================================

        Informatica Hive TPLs Script

============================================================

Please select a product for which you would like to execute this script.

1) CDI
2) CDI Advanced Mode
Enter the option you wish to select: 1
~~~

アクセス先の Hadoop Distribution に応じた項目を選んでください。今回は EMR を使用するので 3) EMR_5.20 を選択します。

~~~
User selected product is : CDI


============================================================


Please select a distro corresponding to your hadoop cluster.

1) CDH_6.1
2) HDP_3.1
3) EMR_5.20
4) HDInsight_4.0
Enter the option you wish to select: 3

User selected distro is : EMR_5.20

Distro related properties file being consumed is : EMR_5.20_CDI.txt

============================================================

Are you executing this script on machine where Informatica Cloud Secure Agent is installed ? [y/N]y

============================================================

Please enter Informatica Cloud Secure Agent root directory:
~~~

ディストリビューションの選択が終わると、Secure Agent がインストール済みかと聞かれるので、Y を入力します。するとさらにインストールしたルートフォルダを入力してくださいと言われるので、そちらを指定します。この環境では /home/infauser/infaagent を入力しましたが、以下の様にライブラリを wget で取得しに行っている事が確認できます。

~~~
Please enter Informatica Cloud Secure Agent root directory: /home/infauser/infaagent

User provided IICS_ROOT_DIR is: /home/infauser/infaagent


DEPLOY_TO_MAIN_DIR value is: /home/infauser/infaagent/apps/Data_Integration_Server/ext/deploy_to_main/distros/Parsers/EMR_5.20/lib


Created directory /home/infauser/infaagent/apps/Data_Integration_Server/ext/deploy_to_main/distros/Parsers/EMR_5.20/lib successfully !!


============================================================

Distro related properties file being consumed is : EMR_5.20_CDI.txt
--2023-12-06 11:15:01--  https://repo1.maven.org/maven2/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
repo1.maven.org (repo1.maven.org) をDNSに問いあわせています... 199.232.192.209, 199.232.196.209, 2a04:4e42:4d::209, ...
repo1.maven.org (repo1.maven.org)|199.232.192.209|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 284220 (278K) [application/java-archive]
`infa_tmp/commons-lang-2.6.jar' に保存中

commons-lang-2.6.jar                  100%[==========================================================================================================>] 277.56K   430KB/s 時間 0.6s

: 中略

aws-java-sdk-dynamodb-1.11.665.jar    100%[==========================================================================================================>]   1.60M  1.45MB/s 時間 1.1s

2023-12-06 11:16:04 (1.45 MB/s) - `infa_tmp/aws-java-sdk-dynamodb-1.11.665.jar' へ保存完了 [1683239/1683239]

Copied CDI TPL's to /home/infauser/infaagent/apps/Data_Integration_Server/ext/deploy_to_main/distros/Parsers/EMR_5.20/lib sucessfully !

============================================================
Completed script execution successfully !!
Please set the INFA_HADOOP_DISTRO_NAME DTM Property:
For CDH_6.1/CDP_7.1/CDW_7.2 set the value as CDH_6.1
For EMR_5.20/EMR_6.1/EMR_6.2/EMR_6.3 set the value as EMR_5.20
For HDInsight_4.0 set the value as HDInsight_4.0
For HDP_3.1 (CDI only) set the value as HDP_3.1
For more details please refer to the Informatica Hive Connector Guide.
============================================================
~~~
## 2. Secure Agent 側にカスタムプロパティを設定する
ここはマニュアルの [Step 2. Set the custom property for the Data Integration Service](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/hive-connector/introduction-to-hive-connector/configure-hive-connector-to-download-the-distribution-specific-h/step-2--set-the-custom-property-for-the-data-integration-service.html) の個所に該当する作業です。IDMC の "管理者" UI から、今回の設定を行った Secure Agent を選択し、右の "…" アイコンをクリックし、"Secure Agent の編集" をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/5691c331-26ff-60e7-6312-73b241e93e01.png)

次の画面でカスタムプロパティを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/bd767ae8-c22d-917b-ae73-26833234565d.png)

|項目|設定する値|
|:-:|:--|
|サービス|Data Integration Service|
|タイプ|DTM|
|名前|INFA_HADOOP_DISTRO_NAME|
|値|EMR_5.20|

今回は EMR_5.20 タイプの構成をしているので INFA_HADOOP_DISTRO_NAME に EMR_5.20 を指定しましたが、他のディストリビューションをご利用になっている場合にはそちらを入力してください。設定を保存したら、Secure Agent を一度、再起動しつつ、次の作業に移ります。

```
cd <インストールディレクトリ>/infaagent/apps/agentcore
sh infaagent.sh shutdown
sh infaagent.sh startup
```


## 3. CDGC が使用する IP を AWS VPC 側で除外設定する
AWS や Azure、GCP の様なクラウドプラットフォームでは IP のインバウンド、アウトバウンドルールを設定する事は一般的になっていると思います。もし、Hadoop のディストリビューションが今回の様にクラウドベンダーのものの場合、各ベンダーのネットワークセキュリティのガイダンスに従い、Core Services と CDGC に関係する IP については除外設定をを実施する必要があります。

:::note warn
除外すべき IP は POD 毎に異なります。詳細は [POD Availability and Networking](https://docs.informatica.com/cloud-common-services/pod-availability-and-networking/current-version.html) に記載がありますので、指定の IP を AWS の VPC 側に除外 IP として設定して下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/1ef0f3a0-59ac-8cac-1d76-7ba515f47039.png)
:::

## 4. Hive 接続の作成
上記まで完了すれば、準備は後もう少しです。一度、IDMC の "管理者" UI まで戻り、Hive Connector(Informatica) の接続タイプを選んでください。概ね、設定項目に疑問はないのではないかと思うのですが、"Configuration Files Path" という見慣れない箇所があるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/8b5bf9e5-13ef-f38d-6ad8-7e75ad92bcf1.png)

ここには EMR 環境から取得した core-site.xml, hdfs-site.xml, hive-site.xml を配置している SA 上のパスを指定する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/99f8a55f-183f-432f-7fba-e424a8ddedc2.png)


:::note info
各 xml ファイルは EMR であればマスターノード上の /etc/hive/conf 及び /etc/hadoop/conf に存在しています。権限がない場合、Hadoop 管理者様にこれらのファイルの提供を依頼してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/e2a04135-37d1-ba5c-fd8b-4f613503fabe.png)

詳細はドキュメントの[この部分](
https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/hive-connector/introduction-to-hive-connector/download-the-configuration-files-from-the-hadoop-cluster.html)を参照してください。
:::

# スキャン設定
今回は事前準備、結構ありましたね。。お待たせしました。それでは、早速、Hive のスキャンを設定してみましょう。

## 1.メニューから "メタデータコマンドセンター" を起動
メニューから "メタデータコマンドセンター" を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/6a86ebd0-df29-e8f1-7c8f-88cfe590d312.png)

## 2.メタデータコマンドセンターから "新規" を選択
新しくカタログソースを設定する為、"新規"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/68591ed1-5efc-cf90-76b5-5a6ca93dfe02.png)

## 3.カタログソースから "Apache Hive" を選択
カタログソースにリストされる一覧から "Apache Hive" を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/59323ced-1950-53d7-cc61-6ef5f10a99e4.png)


## 4.Apache Hive 接続を選択
Apache Hive への接続がリストされているはずですので、選択して "次へ" をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/e3611e75-e54b-b066-9993-6278321c929e.png)



## 5."メタデータの抽出" を設定
"メタデータの抽出" タブでランタイム環境から利用する Secure Agent を選択します。必要に応じてフィルタで絞り込みを実施し、"保存" をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/7dcd04cf-1798-2d2a-89c7-23f5f429b07d.png)


## 6."実行" でスキャンを開始
他にも設定項目はありますが、今回の記事のフォーカスポイントは設定し終わったので、"実行" をクリックし、スキャンを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/ddcb739b-5f66-f4c2-2010-940e9e6e405e.png)




## 7.実行スコープの設定
初回実行時、実行のスコープの画面で、"メタデータの抽出" はグレーアウトしています。2回目以降では下記の様に選択できる状態になっているかと思いますので、"削除" を指定しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/1885433a-b006-8c7c-df91-8136b7f4a03f.png)


:::note warn
このチェック項目がわかりにくい為、簡単に補足しておきます。この設定は既にカタログに取り込まれたアセットがソースシステム側で削除された場合にどう処理されるかを決定します。それぞれの設定に対して以下の様な動作となります。

| オプション |動作|
|:-:|:--|
|保持|カタログソースからオブジェクトが削除されたり、フィルタ条件の変更でオブジェクトがヒットしなくなった場合でも、既にカタログ内に存在する変更前のアセットはカタログに保持されます。|
|削除|カタログソースからオブジェクトが削除された場合及びフィルタ条件の変更でオブジェクトがヒットしない場合、メタデータがカタログから削除されます。|

つまり、過去に一度でもアセットとして存在していたら残したい、という場合には"保持"を設定する必要がありますが、現在の最新のデータベース側の最新状態、フィルタ条件に応じたアセットを抽出、検索したい場合、"削除"を設定します。
:::

## 8.ジョブ監視画面で結果を確認
ジョブ監視画面に自動で遷移するので、しばらく待ってステータスが完了した事を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/1d70ff95-37d6-df46-34ed-767d30450af9.png)


# 結果の確認
EMR Hive 側に作っていた Table の定義が無事に確認できましたね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/7a3ea16c-ebc1-f6ab-d781-5006497e6b26.png)

以上で本記事は終了です。少し(だいぶ)早いですが、メリークリスマス！🎄


# 参考文献
- [マニュアル : Apache Hive Sources (ログインが必要)](https://docs.informatica.com/data-governance-and-quality-cloud/metadata-command-center/current-version/apache-hive-sources/preface.html)

# おことわり（Disclaimer)
投稿する記事は私個人の見解であり所属する会社の公式な見解ではありません。
All articles I post onto Qiita are based on just my personal understanding or opinion. That means the articles are not expressed as an official opinion of the company I am belonging to or have belonged to.