【AWS】Amazon EMR ~ Flink / Glue Data Catalog ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/07/16/000000

の続き。

今回は、Amazon EMRのFlinkにおいて、
AWS Glue Data Catalog を使用する際の技術事項をメモっておく

目次

【0】注意点
 1)AWS EMR の Flink 部分の公式ドキュメントの日本語訳
 2)公式のシェルスクリプトだとエラーになる
【1】ロールの付与
【2】AWS Glue Data Catalog を使うための手順
 Step0:シェルスクリプトを用意する
 Step1:EMRクラスタを作成
 Step2:Stepの追加

【0】注意点

(少なくとも) AWS EMR の Flink 部分の公式ドキュメントの日本語訳は
機械翻訳がダメ過ぎて、めちゃくちゃ分かりづらいので、
英語をそのまま読んだ方がいいかも。

2)公式のシェルスクリプトだとエラーになる

https://docs.aws.amazon.com/emr/latest/ReleaseGuide/flink-configure.html

のシェルスクリプトをそのままだと、エラーになる。
 =>「【2】AWS Glue Data Catalog を使うための手順」の
  「Step0:シェルスクリプトを用意する」 に今回使用した例がある

エラーの原因

* flink-connector-hive_2.12-1.15.2.jar のバージョンが異なる

ついでに、エラーの原因じゃないかもしれないが。。。
* 空白行が入っている

【1】ロールの付与

以下の公式ドキュメントの「Using the AWS Glue Data Catalog」を参考に
Service role に追加する

https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:UpdateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:CreateTable",
                "glue:UpdateTable",
                "glue:DeleteTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:GetTableVersions",
                "glue:CreatePartition",
                "glue:BatchCreatePartition",
                "glue:UpdatePartition",
                "glue:DeletePartition",
                "glue:BatchDeletePartition",
                "glue:GetPartition",
                "glue:GetPartitions",
                "glue:BatchGetPartition",
                "glue:CreateUserDefinedFunction",
                "glue:UpdateUserDefinedFunction",
                "glue:DeleteUserDefinedFunction",
                "glue:GetUserDefinedFunction",
                "glue:GetUserDefinedFunctions"
            ],
            "Resource": "*",
        }
    ]
}

【2】AWS Glue Data Catalog を使うための手順

Step0:シェルスクリプトを用意する

https://docs.aws.amazon.com/emr/latest/ReleaseGuide/flink-configure.html

を参考に、
AWS Glue Data Catalog を使用する際に必要なライブラリの設定するための
シェルスクリプトを作成し、S3バケットに置く
(今回の場合、「s3://your-s3-bucket/emr-filnk/glue-catalog-setup.sh」)

glue-catalog-setup.sh

sudo cp /usr/lib/hive/auxlib/aws-glue-datacatalog-hive3-client.jar /usr/lib/flink/lib
sudo cp /usr/lib/hive/lib/antlr-runtime-3.5.2.jar /usr/lib/flink/lib
sudo cp /usr/lib/hive/lib/hive-exec-3.1.3*.jar /lib/flink/lib
sudo cp /usr/lib/hive/lib/libfb303-0.9.3.jar /lib/flink/lib
# Modify
#sudo cp /usr/lib/flink/opt/flink-connector-hive_2.12-1.15.2.jar /lib/flink/lib
sudo cp /usr/lib/flink/opt/flink-connector-hive_2.12-1.*.*.jar /lib/flink/lib

sudo chmod 755 /usr/lib/flink/lib/aws-glue-datacatalog-hive3-client.jar
sudo chmod 755 /usr/lib/flink/lib/antlr-runtime-3.5.2.jar
sudo chmod 755 /usr/lib/flink/lib/hive-exec-3.1.3*.jar
sudo chmod 755 /usr/lib/flink/lib/libfb303-0.9.3.jar
# Modify
#sudo chmod 755 /usr/lib/flink/lib/flink-connector-hive_2.12-1.15.2.jar
sudo chmod 755 /usr/lib/flink/lib/flink-connector-hive_2.12-1.*.*.jar

Step1:EMRクラスタを作成

* EMR version: v6.9.0 or higher(今回の場合は、「emr-6.12.0」)
* Hive / Flink は必須(今回の場合は、「Flink」を選択すると「Flink/Hadoop/Hive/Zeppelin」が入る)
* 「Use for Hive table metadata」にチェックを付ける

Step2:Stepの追加

[1] 「Steps - Optional」欄の「Add」ボタン押下
[2] 以下を選択し、「Save step」ボタン押下
Parameters Explanations
Type 「Custom JAR」を選択
Name 任意の文字列(今回の場合、「demo-for-data-catalog」)
Jar location s3://.elasticmapreduce/libs/script-runner/script-runner.jar(今回の場合、「s3://us-west-2.elasticmapreduce/libs/script-runner/script-runner.jar」)
Arguments 「Step0」のS3パス(今回の場合、「s3://your-s3-bucket/emr-filnk/glue-catalog-setup.sh」)
Action if step fails 「Continue」を選択

関連記事

Amazon EMR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/20/230519
Amazon EMR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/27/175610
Amazon EMR ~ Flink / 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/07/16/000000
Amazon EMR ~ Flink / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/08/19/025641