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.
Se ainda não tiver feito isso, configure o Apache Livy para o Amazon EMR no EKS.
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 \ --username AWS \ --password-stdin<ECR-registry-account>
.dkr.ecr.<region-id>
.amazonaws.com.rproxy.goskope.com-
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).
-
Crie um namespace para executar as workloads do Spark.
kubectl create ns
<spark-ns>
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
essl.enabled=false
, estará expondo um endpoint inseguro fora da sua VPC. Para configurar um endpoint seguro do Livy, consulte Configuring a secure Apache Livy endpoint with TLS/SSL.helm install livy-demo \ oci://895885662937.dkr.ecr.region-id.amazonaws.com/livy \ --version 7.7.0 \ --namespace livy-ns \ --set image=ECR-registry-account.dkr.ecr.region-id.amazonaws.com/livy/emr-7.7.0:latest \ --set sparkNamespace=
<spark-ns>
\ --create-namespaceVocê 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
eemr-containers-sa-spark-livy
. Para usar nomes personalizados, utilize os parâmetrosserviceAccounts.name
esparkServiceAccount.name
.--set serviceAccounts.name=my-service-account-for-livy --set sparkServiceAccount.name=my-service-account-for-spark
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.7.0 name: livy-demo namespace: livy-ns revision: "1" status: deployed updated: 2024-02-08 22:39:53.539243 -0800 PST
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-
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_ARNEste é 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 destinohealthy
, você poderá continuar. Pode demorar alguns minutos. 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"-
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
-
Se você configurar
internalALB=true
para habilitar o acesso de fora da sua VPC, crie uma EC2 instância da Amazon e certifique-se de que o Network Load Balancer permita tráfego de rede proveniente da instância. 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 o endpoint fora da VPC, consulte Setting up with a secure Apache Livy endpoint with TLS/SSL. 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.