Amazon Managed Service para Apache Flink Amazon (Amazon MSF) se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.
Solución de problemas de cuadernos de Studio en Managed Service para Apache Flink
Esta sección contiene información sobre la solución de problemas de los cuadernos de Studio.
Detención de una aplicación atascada
Para detener una aplicación que está atascada en un estado transitorio, llame a la acción StopApplication con el parámetro Force establecido en true. Para obtener más información, consulte Running Applicationsn en la Guía para desarrolladores de Managed Service para Apache Flink.
Implementación como una aplicación con un estado duradero en una VPC sin acceso a Internet
La función de implementación como aplicación de Managed Service para Apache Flink Studio no admite aplicaciones de VPC sin acceso a Internet. Se recomienda que cree la aplicación en Studio y, a continuación, utilice Managed Service para Apache Flink para crear manualmente una aplicación de Flink y seleccionar el archivo zip que creó en su cuaderno.
Los pasos siguientes describen este abordaje:
Compile y exporte su aplicación de Studio a Amazon S3. Debe ser un archivo zip.
Cree una aplicación de Managed Service para Apache Flink manualmente con una ruta de código que haga referencia a la ubicación del archivo zip en Amazon S3. Además, necesitará configurar la aplicación con las siguientes variables
env(2groupID, 3varen total):kinesis.analytics.flink.run.options
python: source/note.py
archivo jar: lib/PythonApplicationDependencies.jar
managed.deploy_as_app.options
DatabaseARN:
<glue database ARN (Amazon Resource Name)>
Es posible que necesite conceder permisos a las funciones de IAM de Managed Service para Apache Flink Studio y de Managed Service para Apache Flink para los servicios que su aplicación utilice. Se puede usar el mismo rol de IAM para ambas aplicaciones.
Reducción del tiempo de creación y del tamaño de implementación como aplicación
Las aplicaciones de implementación como aplicación para Python de Studio empaquetan todo lo que hay disponible en el entorno Python porque no podemos determinar qué bibliotecas necesita. Esto puede provocar un tamaño de implementación como aplicación más grande del necesario. El siguiente procedimiento demuestra cómo reducir el tamaño de la aplicación de Python de implementación como aplicación a través de la desinstalación de las dependencias.
Si está creando una aplicación de Python con la función de implementación como aplicación de Studio, podría eliminar los paquetes de Python preinstalados del sistema si sus aplicaciones no dependen de ellos. Esto no solo ayudará a reducir el tamaño final del artefacto para evitar superar el límite de servicio para el tamaño de las aplicaciones, sino que también mejorará el tiempo de compilación de las aplicaciones con la característica de implementación como aplicación.
Se puede ejecutar el siguiente comando para enumerar todos los paquetes de Python instalados con sus respectivos tamaños de instalación y eliminar selectivamente los que tienen un tamaño significativo.
%flink.pyflink !pip list --format freeze | awk -F = {'print $1'} | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{gsub("-","_",$1); print $2 "/" tolower($1)}' | xargs du -sh 2> /dev/null | sort -hr
nota
apache-beam es necesario para que Flink Python funcione. Nunca debe eliminar este paquete ni sus dependencias.
A continuación se encuentra la lista de paquetes de Python preinstalados en Studio V2 que se pueden eliminar:
scipy statsmodels plotnine seaborn llvmlite bokeh pandas matplotlib botocore boto3 numba
Para eliminar un paquete de Python del cuaderno de Zeppelin:
Compruebe si su aplicación depende del paquete, o de alguno de los paquetes que lo utilice, antes de eliminarla. Se puede identificar los dependientes de un paquete mediante pipdeptree
. Ejecución del siguiente comando para eliminar un paquete:
%flink.pyflink !pip uninstall -y <package-to-remove>Si necesita recuperar un paquete que se eliminó por error, ejecute el siguiente comando:
%flink.pyflink !pip install <package-to-install>
ejemplo Ejemplo: Elimine el paquete scipy antes de implementar su aplicación de Python con la característica de aplicación como implementación.
Use
pipdeptreepara descubrir todos los consumidores descipyy comprobar si puede eliminarscipyde forma segura.Instale la herramienta a través del cuaderno:
%flink.pyflink !pip install pipdeptreeObtenga un árbol de dependencias invertido de
scipyal ejecutar:%flink.pyflink !pip -r -p scipyDebería ver una salida similar a la siguiente (está condensada para mayor rapidez):
... ------------------------------------------------------------------------ scipy==1.8.0 ├── plotnine==0.5.1 [requires: scipy>=1.0.0] ├── seaborn==0.9.0 [requires: scipy>=0.14.0] └── statsmodels==0.12.2 [requires: scipy>=1.1] └── plotnine==0.5.1 [requires: statsmodels>=0.8.0]
Inspeccione cuidadosamente el uso de
seaborn,statsmodelsyplotnineen sus aplicaciones. Si sus aplicaciones no dependen de ninguno de los paquetesscipy,seaborn,statemodelsoplotnine, puede eliminarlos todos o solo los que sus aplicaciones no necesiten.Elimine el paquete al ejecutar:
!pip uninstall -y scipy plotnine seaborn statemodels
Cancelación de trabajos
En esta sección, se muestra cómo cancelar los trabajos de Apache Flink a los que no puede acceder desde Apache Zeppelin. Si desea cancelar un trabajo de este tipo, vaya al panel de control de Apache Flink, copie el identificador del trabajo y utilícelo en uno de los siguientes ejemplos.
Cómo cancelar un solo trabajo:
%flink.pyflink import requests requests.patch("https://zeppelin-flink:8082/jobs/[job_id]", verify=False)
Cómo cancelar todos los trabajos en ejecución:
%flink.pyflink import requests r = requests.get("https://zeppelin-flink:8082/jobs", verify=False) jobs = r.json()['jobs'] for job in jobs: if (job["status"] == "RUNNING"): print(requests.patch("https://zeppelin-flink:8082/jobs/{}".format(job["id"]), verify=False))
Cómo cancelar todos los trabajos:
%flink.pyflink import requests r = requests.get("https://zeppelin-flink:8082/jobs", verify=False) jobs = r.json()['jobs'] for job in jobs: requests.patch("https://zeppelin-flink:8082/jobs/{}".format(job["id"]), verify=False)
Reinicio del intérprete Apache Flink
Cómo reiniciar el intérprete Apache Flink en su cuaderno de Studio
Elija Configuración cerca de la esquina superior derecha de la pantalla.
Elija Intérprete.
-
Seleccione reiniciar y, a continuación, Aceptar.