

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR on EKS での Apache Livy の使用開始
<a name="job-runs-apache-livy-install"></a>

Apache Livy をインストールするには、次の手順を実行します。これには、パッケージマネージャーの設定、Spark ワークロード実行用の名前空間の作成、Livy のインストール、負荷分散の設定、検証ステップが含まれます。Spark でバッチジョブを実行するには、これらの手順を実行する必要があります。

1. まだ設定していない場合は、[Amazon EMR on EKS 用の Apache Livy](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-setup.html) を設定します。

1. Amazon ECR レジストリに対し、Helm クライアントを認証します。の対応する`ECR-registry-account`値は、Amazon ECR レジストリアカウント AWS リージョン からリージョン別に確認できます。 [https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-tag.html#docker-custom-images-ECR](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-tag.html#docker-custom-images-ECR)

   ```
   aws ecr get-login-password \--region <AWS_REGION> | helm registry login \
   --username AWS \
   --password-stdin <ECR-registry-account>.dkr.ecr.<region-id>.amazonaws.com
   ```

1. Livy を設定すると、Livy サーバーのサービスアカウントと Spark アプリケーション用にもう一つのアカウントが作成されます。サービスアカウントの IRSA を設定するには、「[サービスアカウント用 IAM ロール (IRSA、IAM roles for service accounts) でアクセス権限を設定する](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-irsa.html)」を参照してください。

1. Spark ワークロードを実行する名前空間を作成します。

   ```
   kubectl create ns <spark-ns>
   ```

1. 次のコマンドを使用して Livy をインストールします。

   この Livy エンドポイントは、EKS クラスターの VPC でのみ内部的に使用できます。VPC 以外のアクセスを有効にするには、Helm インストールコマンドで `—-set loadbalancer.internal=false` を設定します。
**注記**  
デフォルトでは、SSL はこの Livy エンドポイント内で有効ではなく、エンドポイントは EKS クラスターの VPC 内でのみ表示されます。`loadbalancer.internal=false` と `ssl.enabled=false` を設定すると、安全でないエンドポイントが VPC の外部に公開されます。安全な Livy エンドポイントを設定するには、「[TLS/SSL を使用した安全な Apache Livy エンドポイントの設定](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-secure-endpoint.html)」を参照してください。

   ```
   helm install livy-demo \
     oci://895885662937.dkr.ecr.region-id.amazonaws.com/livy \
     --version 7.12.0 \
     --namespace livy-ns \
     --set image=ECR-registry-account.dkr.ecr.region-id.amazonaws.com/livy/emr-7.12.0:latest \
     --set sparkNamespace=<spark-ns> \
     --create-namespace
   ```

   次のような出力が表示されます。

   ```
   NAME: livy-demo
   LAST DEPLOYED: Mon Mar 18 09:23:23 2024
   NAMESPACE: livy-ns
   STATUS: deployed
   REVISION: 1
   TEST SUITE: None
   NOTES:
   The Livy server has been installed.
   Check installation status:
   1. Check Livy Server pod is running
     kubectl --namespace livy-ns get pods -l "app.kubernetes.io/instance=livy-demo"
   2. Verify created NLB is in Active state and it's target groups are healthy (if loadbalancer.enabled is true)
   
   Access LIVY APIs:
       # Ensure your NLB is active and healthy
       # Get the Livy endpoint using command:
       LIVY_ENDPOINT=$(kubectl get svc -n livy-ns -l app.kubernetes.io/instance=livy-demo,emr-containers.amazonaws.com/type=loadbalancer -o jsonpath='{.items[0].status.loadBalancer.ingress[0].hostname}' |  awk '{printf "%s:8998\n", $0}')
       # Access Livy APIs using http://$LIVY_ENDPOINT or https://$LIVY_ENDPOINT (if SSL is enabled)
       # Note: While uninstalling Livy, makes sure the ingress and NLB are deleted after running the helm command to avoid dangling resources
   ```

   Livy サーバーと Spark セッションのデフォルトのサービスアカウント名は `emr-containers-sa-livy`と `emr-containers-sa-spark-livy` です。カスタム名を使用するには、`serviceAccounts.name` パラメータと `sparkServiceAccount.name` パラメータを使用します。

   ```
   --set serviceAccounts.name=my-service-account-for-livy
   --set sparkServiceAccount.name=my-service-account-for-spark
   ```

1. Helm チャートをインストールしたことを確認します。

   ```
   helm list -n livy-ns -o yaml
   ```

   `helm list` コマンドは、新しい Helm チャートに関する情報を返します。

   ```
   app_version: 0.7.1-incubating
   chart: livy-emr-7.12.0
   name: livy-demo
   namespace: livy-ns
   revision: "1"
   status: deployed
   updated: 2024-02-08 22:39:53.539243 -0800 PST
   ```

1. Network Load Balancer がアクティブであることを確認します。

   ```
   LIVY_NAMESPACE=<livy-ns>
   LIVY_APP_NAME=<livy-app-name>
   AWS_REGION=<AWS_REGION>
   
   # Get the NLB Endpoint URL
   NLB_ENDPOINT=$(kubectl --namespace $LIVY_NAMESPACE get svc -l "app.kubernetes.io/instance=$LIVY_APP_NAME,emr-containers.amazonaws.com/type=loadbalancer" -o jsonpath='{.items[0].status.loadBalancer.ingress[0].hostname}') 
   
   # Get all the load balancers in the account's region
   ELB_LIST=$(aws elbv2 describe-load-balancers --region $AWS_REGION)
   
   # Get the status of the NLB that matching the endpoint from the Kubernetes service
   NLB_STATUS=$(echo $ELB_LIST | grep -A 8 "\"DNSName\": \"$NLB_ENDPOINT\"" | awk '/Code/{print $2}/}/' | tr -d '"},\n')
   echo $NLB_STATUS
   ```

1. 次に、Network Load Balancer のターゲットグループが正常であることを確認します。

   ```
   LIVY_NAMESPACE=<livy-ns>
   LIVY_APP_NAME=<livy-app-name>
   AWS_REGION=<AWS_REGION>
   
   # Get the NLB endpoint
   NLB_ENDPOINT=$(kubectl --namespace $LIVY_NAMESPACE get svc -l "app.kubernetes.io/instance=$LIVY_APP_NAME,emr-containers.amazonaws.com/type=loadbalancer" -o jsonpath='{.items[0].status.loadBalancer.ingress[0].hostname}') 
   
   # Get all the load balancers in the account's region
   ELB_LIST=$(aws elbv2 describe-load-balancers --region $AWS_REGION)
   
   # Get the NLB ARN from the NLB endpoint
   NLB_ARN=$(echo $ELB_LIST | grep -B 1 "\"DNSName\": \"$NLB_ENDPOINT\"" | awk '/"LoadBalancerArn":/,/"/'| awk '/:/{print $2}' | tr -d \",)
   
   # Get the target group from the NLB. Livy setup only deploys 1 target group
   TARGET_GROUP_ARN=$(aws elbv2 describe-target-groups --load-balancer-arn $NLB_ARN --region $AWS_REGION | awk '/"TargetGroupArn":/,/"/'| awk '/:/{print $2}' | tr -d \",)
   
   # Get health of target group
   aws elbv2 describe-target-health --target-group-arn $TARGET_GROUP_ARN
   ```

   以下は、ターゲットグループのステータスを示す出力のサンプルです。

   ```
   {
       "TargetHealthDescriptions": [
           {
               "Target": {
                   "Id": "<target IP>",
                   "Port": 8998,
                   "AvailabilityZone": "us-west-2d"
               },
               "HealthCheckPort": "8998",
               "TargetHealth": {
                   "State": "healthy"
               }
           }
       ]
   }
   ```

   NLB のステータスが `active` になり、ターゲットグループが `healthy` になったら、続行できます。これには数分かかることがあります。

1. Helm インストールから Livy エンドポイントを取得します。Livy エンドポイントが安全かどうかは、SSL を有効にしたかどうかで決まります。

   ```
   LIVY_NAMESPACE=<livy-ns>
    LIVY_APP_NAME=livy-app-name
    LIVY_ENDPOINT=$(kubectl get svc -n livy-ns -l app.kubernetes.io/instance=livy-app-name,emr-containers.amazonaws.com/type=loadbalancer -o jsonpath='{.items[0].status.loadBalancer.ingress[0].hostname}' |  awk '{printf "%s:8998\n", $0}')
    echo "$LIVY_ENDPOINT"
   ```

1. Helm インストールから Spark サービスアカウントを取得する

   ```
   SPARK_NAMESPACE=spark-ns
   LIVY_APP_NAME=<livy-app-name>
   SPARK_SERVICE_ACCOUNT=$(kubectl --namespace $SPARK_NAMESPACE get sa -l "app.kubernetes.io/instance=$LIVY_APP_NAME" -o jsonpath='{.items[0].metadata.name}')
   echo "$SPARK_SERVICE_ACCOUNT"
   ```

   次のような出力が表示されます。

   ```
   emr-containers-sa-spark-livy
   ```

1. VPC の外部からのアクセスを可能にするように `internalALB=true` を設定した場合は、Amazon EC2 インスタンスを作成し、Network Load Balancer が EC2 インスタンスからのネットワークトラフィックを許可していることを確認します。インスタンスが Livy エンドポイントにアクセスするには、これが必要となります。VPC の外部にエンドポイントを安全に公開する方法の詳細については、「[TLS/SSL を使用した安全な Apache Livy エンドポイントの設定](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-secure-endpoint.html)」を参照してください。

1. Livy をインストールすると、Spark アプリケーションを実行するサービスアカウント `emr-containers-sa-spark` が作成されます。Spark アプリケーションが S3 などの AWS リソースを使用している場合、または AWS API または CLI オペレーションを呼び出す場合は、必要なアクセス許可を持つ IAM ロールを spark サービスアカウントにリンクする必要があります。詳細については、「[サービスアカウント用 IAM ロール (IRSA、IAM roles for service accounts) でアクセス権限を設定する](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-irsa.html)」を参照してください。

Apache Livy は、Livy のインストール時に使用できる追加の設定をサポートしています。詳細については、「Amazon EMR on EKS リリースでの Apache Livy のインストールプロパティ」を参照してください。