Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

434
Visualizações
Cómo terminar AWS EMR Cluster automáticamente después de un tiempo

Actualmente tengo una tarea pendiente para terminar un clúster de EMR de ejecución prolongada después de un período de tiempo determinado (según alguna métrica). Google Dataproc tiene esta capacidad en algo llamado "Eliminación programada de clúster" que se enumera aquí: https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/scheduled-deletion

¿Es esto algo que es posible en EMR de forma nativa? ¿Quizás usando las métricas de Cloudwatch? ¿O puedo escribir un jar de ejecución prolongada que se ubicará en el nodo maestro de EMR y solo sondeará el hilo para obtener alguna métrica de tiempo de inactividad y luego apagar el clúster después de un período de tiempo establecido?

Editar: Para más aclaraciones. Me gustaría alguna funcionalidad en la que el clúster finalice en función de la inactividad durante una cantidad de tiempo x. Por ejemplo, si el clúster ha estado activo durante un tiempo, pero no se han ejecutado trabajos durante, digamos, 1 hora y el clúster simplemente está sentado allí sin hacer nada, entonces me gustaría poder terminar el clúster.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Teniendo en cuenta la aclaración que proporcionó en su pregunta , podría haber 3 formas posibles de hacerlo.

1) Usar la métrica de AWS CloudWatch isIdle de un clúster de EMR. Esta métrica rastrea si un clúster está activo, pero no está ejecutando tareas actualmente. Puede configurar una alarma para que se dispare cuando el clúster haya estado inactivo durante un período de tiempo determinado, como treinta minutos. Referencia: https://docs.aws.amazon.com/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html

2) Usar el evento/regla de AWS CloudWatch y la función de AWS Lambda para buscar clústeres de EMR inactivos. Puede lograr visibilidad en el nivel de la consola de AWS y puede habilitarlo y deshabilitarlo fácilmente. Recomendado

3) Alguna otra solución personalizada basada en un Shell que se ejecuta en un trabajo CRON en el nodo maestro de un clúster de EMR, pero perderá su visibilidad en el nivel de la consola de AWS y es posible que también necesite acceso SSH.

Solución utilizando el segundo enfoque: recomendado

Teniendo en cuenta la necesidad de esto, he desarrollado un pequeño marco para lograrlo utilizando la segunda solución mencionada anteriormente. Este marco es una solución basada en AWS que utiliza AWS CloudWatch y AWS Lambda mediante un script de Python que utiliza Boto3 para terminar los clústeres de AWS EMR que han estado inactivos durante un período de tiempo específico .

Usted especifica el umbral máximo de tiempo de inactividad y el evento/regla de AWS CloudWatch desencadena una función de AWS Lambda que consulta todos los clústeres de AWS EMR en estado de ESPERA y, para cada uno, compara el tiempo actual con el tiempo de preparación del clúster de AWS EMR en caso de que no se hayan agregado pasos de EMR hasta el momento. o compara la hora actual con la hora de finalización del último paso del clúster de AWS EMR. Si el umbral se ha visto comprometido, AWS EMR se cancelará después de eliminar la protección de terminación, si está habilitada. De lo contrario, omitirá ese clúster de AWS EMR.

El evento/la regla de AWS CloudWatch decidirá con qué frecuencia la función de AWS Lambda debe verificar si hay clústeres de AWS EMR inactivos .

Puede deshabilitar el evento/la regla de AWS CloudWatch en cualquier momento para deshabilitar este marco con un solo clic sin eliminar su pila de AWS CloudFormation.

La función de AWS Lambda utiliza Python 3.7 como entorno de ejecución.

Puede obtener el código y usarlo desde GitHub aquí: https://github.com/abdullahkhawer/auto-terminate-idle-emr

Cualquier contribución, mejora y sugerencia a esta solución será muy apreciada. :)

over 4 years ago · Santiago Trujillo Relatório

0

El método más sencillo sería utilizar Métricas y dimensiones de Amazon EMR para Amazon CloudWatch . Hay un valor booleano isIdle que "indica que un clúster ya no está funcionando".

Puede crear una alarma de CloudWatch que diga si es verdadera durante más de x minutos y luego activar la alarma. Esto enviaría un mensaje a Amazon SNS, que puede activar una función Lambda para cerrar el clúster.

Componentes:

  • Alarma de Amazon CloudWatch
  • Cola de Amazon SNS
  • Función AWS Lambda

Actualización: aparentemente esto no es adecuado (ver los comentarios a continuación).

Un método alternativo sería:

  • Use Amazon CloudWatch Events para programar una función Lambda cada x segundos
  • La función de Lambda busca cualquier clúster con una etiqueta particular que indique cuánto tiempo debe esperar hasta que se apague (por ejemplo, 40 minutos). Si la etiqueta no está presente, el clúster permanece intacto.
  • La función Lambda consulta el estado del clúster (de alguna manera, probablemente a través de una llamada a la API de Hadoop), luego:
    • Si el clúster está inactivo y no hay una etiqueta Inactivo desde , agregue una etiqueta Inactivo desde con la marca de tiempo actual
    • Si el clúster está inactivo y han pasado más de x minutos desde la marca de tiempo en la etiqueta Inactivo desde , termine el clúster.
    • Si el clúster no está inactivo, elimine la etiqueta Inactivo desde (si está presente)
over 4 years ago · Santiago Trujillo Relatório

0

Tuve que hacer una implementación similar y solo considerar el tiempo transcurrido del clúster no estaba resolviendo nuestro problema.

así que se nos ocurrió un enfoque para acceder a la API de Hadoop, puede encontrarlos aquí

 https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Scheduler_API

Esto es lo que hicimos,

  1. Pida al usuario que abra un clúster que agregue una etiqueta como "AutoShutDown":"True:BufferMinutes", aquí "AutoShutDown" es la clave y "True:BufferMinutes" es el valor de la etiqueta.

  2. Aquí BufferMinutes es el tiempo en minutos (30, 60, etc.)

  3. cree un Lambda para acceder a la api de hadoop de todos esos clústeres configurados con el paso 1 (si el usuario no agrega la etiqueta, entonces el clúster no se toca) y obtenga la hora de finalización del último trabajo que se completó (solo si todos los trabajos son completado/terminado), si todavía se está ejecutando algún trabajo, no haga nada y salga.

  4. ahora

    diferencia_fechahora = (hora_actual - última finalización) if(diferencia_fechahora > hora_solicitada) {terminar_clúster}

  5. Cree un disparador de vigilancia en la nube y agregue la lambda creada como objetivo, programe el disparador para que se ejecute según sea necesario.

Nota : Lambda está escrito en python, por lo que se usa boto3 y el cliente será "emr" igual que lo que abdullahkhawer mencionó en su solución anterior.

Esta implementación brinda flexibilidad al usuario para elegir y reduce una gran carga para los desarrolladores.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda