Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

368
Vistas
Registro de AWS EMR Spark Python

Estoy ejecutando un trabajo de Spark muy simple en AWS EMR y parece que no puedo obtener ningún resultado de registro de mi secuencia de comandos.

He intentado con la impresión de stderr:

 from pyspark import SparkContext import sys if __name__ == '__main__': sc = SparkContext(appName="HelloWorld") print('Hello, world!', file=sys.stderr) sc.stop()

Y usando el registrador de chispas como se muestra aquí :

 from pyspark import SparkContext if __name__ == '__main__': sc = SparkContext(appName="HelloWorld") log4jLogger = sc._jvm.org.apache.log4j logger = log4jLogger.LogManager.getLogger(__name__) logger.error('Hello, world!') sc.stop()

EMR me da dos archivos de registro después de que se ejecuta el trabajo: controller y stderr . Ninguno de los registros contiene el "Hello, world!" cuerda. Tengo entendido que la stdout se redirige a stderr en chispa. El registro de stderr muestra que el trabajo se aceptó, se ejecutó y se completó correctamente.

Entonces mi pregunta es, ¿dónde puedo ver el resultado del registro de mi secuencia de comandos? ¿O qué debo cambiar en mi secuencia de comandos para iniciar sesión correctamente?

Editar: utilicé este comando para enviar el paso:

 aws emr add-steps --region us-west-2 --cluster-id x-XXXXXXXXXXXXX --steps Type=spark,Name=HelloWorld,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,s3a://path/to/simplejob.py],ActionOnFailure=CONTINUE
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Descubrí que el registro de EMR para pasos particulares casi nunca termina en el controlador o en los registros de stderr que se extraen junto con el paso en la consola de AWS.

Por lo general, encuentro lo que quiero en los registros del contenedor del trabajo (y generalmente está en la salida estándar).

Por lo general, se encuentran en una ruta como s3://mybucket/logs/emr/spark/j-XXXXXX/containers/application‌​_XXXXXXXXX/container‌​_XXXXXXX/... . Es posible que deba hurgar en los diversos directorios application_... y container_... dentro de los containers .

Ese último directorio contenedor debe tener stdout.log y stderr.log .

over 4 years ago · Santiago Trujillo Denunciar

0

Estoy usando emr-5.30.1 ejecutándose en el modo de cliente YARN y lo hice funcionar usando la biblioteca de logging de Python.

No me gustaron las soluciones que usaban los métodos privados de JVM en Spark. Además de ser un método privado, esto hizo que los registros de mi aplicación aparecieran en los registros de Spark (que ya son bastante detallados) y, además, me obligaron a usar el formato de registro de Spark.

Ejemplo de código usando el logging :

 import logging logging.basicConfig( format="""%(asctime)s,%(msecs)d %(levelname)-8s[%(filename)s:%(funcName)s:%(lineno)d] %(message)s""", datefmt="%Y-%m-%d %H:%M:%S", level=logging.INFO, ) if __name__ == '__main__': logging.info('test') ...

Cuando se crea el clúster, especifico LogUri='s3://mybucket/emr/' a través de la consola/CLI/boto.

La salida del registro aparece en stdout.gz del paso correspondiente, que se puede encontrar usando cualquiera de las siguientes opciones.

  1. En la Consola EMR, elija su Clúster. En la pestaña "Resumen", haga clic en el icono de la carpeta pequeña junto a "URI de registro". Dentro de la ventana emergente, navegue hasta los pasos, elija su ID de paso y abra stdout.gz

  2. En S3 navegue a los registros directamente. Están ubicados en emr/j-<cluster-id>/steps/s-<step-id>/stdout.gz en mybucket .

over 4 years ago · Santiago Trujillo Denunciar

0

Por lo que vale. Sea j-XXX el ID del clúster de EMR y suponga que está configurado para usar logs_bucket para registros persistentes en S3. Si desea encontrar los registros emitidos por su código, haga lo siguiente:

  1. En la consola de AWS, busque el paso que desea revisar
  2. Vaya a is stderr y busque application_ . Tome nota del nombre completo que encuentre, debería ser algo como application_15489xx175355_0yy5 .
  3. Vaya a s3://logs_bucket/j-XXX/containers y busque la carpeta application_15489xx175355_0yy5 .
  4. En esta carpeta, encontrará al menos una carpeta llamada application_15489xx175355_0yy5_ww_vvvv . En estas carpetas encontrará archivos llamados stderr.gz que contienen los registros emitidos por su código.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda