Introducción a Apache Livy en Amazon EMR en EKS - Amazon EMR

Introducción a Apache Livy en Amazon EMR en EKS

Siga los pasos que se describen a continuación para instalar Apache Livy. Incluyen la configuración del administrador de paquetes, la creación de un espacio de nombres para ejecutar las cargas de trabajo de Spark, la instalación de Livy, la configuración del equilibrio de carga y los pasos de verificación. Tiene que completar estos pasos para ejecutar un trabajo por lotes con Spark.

  1. Si aún no lo ha hecho, configure Apache Livy para Amazon EMR en EKS.

  2. Autentique su cliente de Helm en el registro de Amazon ECR. Puede encontrar el valor ECR-registry-account correspondiente a su Región de AWS a partir de sus cuentas de registro de Amazon ECR por región.

    aws ecr get-login-password \--region <AWS_REGION> | helm registry login \ --username AWS \ --password-stdin <ECR-registry-account>.dkr.ecr.<region-id>.amazonaws.com
  3. Al configurar Livy, se crea una cuenta de servicio para el servidor de Livy y otra cuenta para la aplicación Spark. Para configurar IRSA para las cuentas de servicio, consulte Configuración de los permisos de acceso con roles de IAM para las cuentas de servicio (IRSA).

  4. Cree un espacio de nombres para ejecutar sus cargas de trabajo de Spark.

    kubectl create ns <spark-ns>
  5. Utilice el siguiente comando para instalar Livy.

    Este punto de conexión de Livy solo está disponible internamente para la VPC del clúster de EKS. Para habilitar el acceso más allá de la VPC, establezca —-set loadbalancer.internal=false en su comando de instalación de Helm.

    nota

    De forma predeterminada, el SSL no está habilitado en este punto de conexión de Livy y el punto de conexión solo está visible dentro de la VPC del clúster de EKS. Si configura loadbalancer.internal=false y ssl.enabled=false, expone un punto de conexión inseguro al exterior de su VPC. Para configurar un punto de conexión Livy seguro, consulte Configuración de un punto de conexión seguro de Apache Livy con TLS/SSL.

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

    Debería ver la siguiente salida.

    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

    Los nombres de las cuentas de servicio predeterminados para el servidor de Livy y la sesión de Spark son emr-containers-sa-livy y emr-containers-sa-spark-livy. Para usar nombres personalizados, use los parámetros serviceAccounts.name y sparkServiceAccount.name.

    --set serviceAccounts.name=my-service-account-for-livy --set sparkServiceAccount.name=my-service-account-for-spark
  6. Compruebe que haya instalado el gráfico de Helm.

    helm list -n livy-ns -o yaml

    El comando helm list debería devolver la información sobre el nuevo gráfico de Helm:

    app_version: 0.7.1-incubating chart: livy-emr-7.3.0 name: livy-demo namespace: livy-ns revision: "1" status: deployed updated: 2024-02-08 22:39:53.539243 -0800 PST
  7. Compruebe que el Equilibrador de carga de red esté activo.

    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
  8. Ahora compruebe que el grupo objetivo del Equilibrador de carga de red esté en buen estado.

    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

    Aquí se incluye un resultado de ejemplo que muestra el estado del grupo objetivo:

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

    Una vez que el estado de su NLB pase a estar active y su grupo objetivo esté healthy, podrá continuar. Puede que tarde unos minutos.

  9. Recupere el punto de conexión de Livy de la instalación de Helm. El hecho de que su punto de conexión de Livy sea seguro o no depende de si ha habilitado el 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"
  10. Recupere la cuenta de servicio de Spark de la instalación de Helm

    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"

    Debería ver algo similar al siguiente resultado:

    emr-containers-sa-spark-livy
  11. Si ha establecido internalALB=true para habilitar el acceso desde fuera de la VPC, cree una instancia de Amazon EC2 y asegúrese de que el Equilibrador de carga de red permita el tráfico de red procedente de la instancia EC2. Debe hacerlo para que la instancia pueda acceder a su punto de conexión de Livy. Para obtener más información sobre cómo exponer su punto de conexión de forma segura fuera de su VPC, consulte Configuración con un punto de conexión de Apache Livy segurocon TLS/SSL.

  12. Al instalar Livy, se crea la cuenta de servicio emr-containers-sa-spark para ejecutar las aplicaciones de Spark. Si su aplicación de Spark cualquier recurso de AWS como S3 o llama a operaciones de la API o la CLI de AWS, debe vincular un rol de IAM con los permisos necesarios a su cuenta de servicio de Spark. Para obtener más información, consulte Configuración de los permisos de acceso con roles de IAM para las cuentas de servicio (IRSA).

Apache Livy admite configuraciones adicionales que puede usar al instalar Livy. Para obtener más información, consulte Propiedades de instalación de Apache Livy en Amazon EMR en EKS.