View a markdown version of this page

Conceitos básicos do Apache Livy para Amazon EMR no EKS - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conceitos básicos do Apache Livy para Amazon EMR no EKS

Conclua as etapas a seguir para instalar o Apache Livy. Eles incluem a configuração do gerenciador de pacotes, a criação de um namespace para executar workloads do Spark, a instalação do Livy, a configuração do balanceamento de carga e as etapas de verificação. Você precisa concluir essas etapas para executar um trabalho em lotes com o Spark.

  1. Se ainda não tiver feito isso, configure o Apache Livy para o Amazon EMR no EKS.

  2. Autentique seu cliente Helm no registro do Amazon ECR. Você pode encontrar o ECR-registry-account valor correspondente para suas contas Região da AWS de registro do Amazon ECR por região.

    aws ecr get-login-password \--region <AWS_REGION> | helm registry login \ --usernameAWS\ --password-stdin <ECR-registry-account>.dkr.ecr.<region-id>.amazonaws.com
  3. A configuração do Livy cria uma conta de serviço para o servidor do Livy e outra conta para a aplicação do Spark. Para configurar o IRSA nas contas de serviço, consulte Setting up access permissions with IAM roles for service accounts (IRSA).

  4. Crie um namespace para executar as workloads do Spark.

    kubectl create ns <spark-ns>
  5. Use o comando a seguir para instalar o Livy.

    Esse endpoint do Livy só está disponível internamente para a VPC no cluster do EKS. Para habilitar o acesso além da VPC, defina —-set loadbalancer.internal=false no comando de instalação do Helm.

    nota

    Por padrão, o SSL não está habilitado nesse endpoint do Livy, e o endpoint só é visível dentro da VPC do cluster do EKS. Se você definir loadbalancer.internal=false e ssl.enabled=false, estará expondo um endpoint inseguro fora da sua VPC. Para configurar um endpoint seguro do Livy, consulte Configurando um endpoint seguro do Apache Livy com. TLS/SSL

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

    Você verá a saída a seguir.

    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

    Os nomes padrão da conta de serviço para o servidor do Livy e a sessão do Spark são emr-containers-sa-livy e emr-containers-sa-spark-livy. Para usar nomes personalizados, utilize os parâmetros serviceAccounts.name e sparkServiceAccount.name.

    --set serviceAccounts.name=my-service-account-for-livy --set sparkServiceAccount.name=my-service-account-for-spark
  6. Verifique se você instalou o chart do Helm.

    helm list -n livy-ns -o yaml

    O comando helm list deve retornar as informações sobre o novo chart do Helm.

    app_version: 0.7.1-incubating chart: livy-emr-7.13.0 name: livy-demo namespace: livy-ns revision: "1" status: deployed updated: 2024-02-08 22:39:53.539243 -0800 PST
  7. Verifique se o Network Load Balancer está ativo.

    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. Agora, verifique se o grupo de destino no Network Load Balancer está íntegro.

    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

    Este é um exemplo de saída que mostra o status do grupo de destino:

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

    Quando o status do NLB se tornar active e o grupo de destino healthy, você poderá continuar. Pode demorar alguns minutos.

  9. Recupere o endpoint do Livy da instalação do Helm. Se o endpoint do Livy é seguro ou não, depende de você ter habilitado o 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. Recuperação da conta de serviço do Spark na instalação do 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"

    Você deverá ver algo semelhante ao resultado a seguir:

    emr-containers-sa-spark-livy
  11. Se você configurar internalALB=true para habilitar o acesso de fora da VPC, crie uma instância do Amazon EC2 e certifique-se de que o Network Load Balancer permita tráfego de rede proveniente da instância do EC2. Você deve fazer isso para que a instância tenha acesso ao endpoint do Livy. Para obter mais informações sobre como expor com segurança seu endpoint fora da sua VPC, consulte Como configurar um endpoint Apache Livy seguro com. TLS/SSL

  12. A instalação do Livy cria a conta de serviço emr-containers-sa-spark para executar as aplicações do Spark. Se seu aplicativo Spark usa AWS recursos como o S3 ou chama operações de AWS API ou CLI, você deve vincular uma função do IAM com as permissões necessárias à sua conta de serviço do Spark. Para obter mais informações, consulte Setting up access permissions with IAM roles for service accounts (IRSA).

O Apache Livy oferece suporte a configurações adicionais que você pode usar ao instalar o Livy. Para obter mais informações, consulte Propriedades de instalação do Apache Livy no Amazon EMR nas versões do EKS.