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.
Si aún no lo ha hecho, configure Apache Livy para Amazon EMR en EKS.
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.rproxy.goskope.com-
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).
-
Cree un espacio de nombres para ejecutar sus cargas de trabajo de Spark.
kubectl create ns
<spark-ns>
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
yssl.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-namespaceDeberí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
yemr-containers-sa-spark-livy
. Para usar nombres personalizados, use los parámetrosserviceAccounts.name
ysparkServiceAccount.name
.--set serviceAccounts.name=my-service-account-for-livy --set sparkServiceAccount.name=my-service-account-for-spark
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
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-
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_ARNAquí 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. 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"-
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
-
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. 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.