es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No es posible transmitir con Flink Streaming.

Soy nuevo en el marco de transmisión de Flink y estoy tratando de entender los componentes y el flujo. Estoy tratando de ejecutar el ejemplo básico de conteo de palabras utilizando DataStream. Estoy tratando de ejecutar el código en mi IDE. El código se ejecuta sin problemas cuando alimento los datos usando la colección como

DataStream<string> text = env.fromElements(
               "Ser, o no ser, esa es la cuestión:",
               "¿Qué es más noble para el alma? Sufrir",
               "Los golpes y desgracias del tiempo cruel,",
               "O luchar contra un mar de adversidades"
        );

Sin embargo, falla cada vez que intento leer datos desde el socket o desde un archivo de la siguiente manera:

DataStream<string> text = env.socketTextStream("localhost", 9999);
ó
DataStream<string> text = env.readTextFile("archivo_de_ejemplo.txt");

Para ambos el socket y el archivo de texto, obtengo el siguiente error:

Excepción en el hilo "main" java.lang.reflect.InaccessibleObjectException: No se puede hacer el campo privado final byte[] java.lang.String.value accesible: el módulo java.base no "abre java.lang" al módulo sin nombre

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error que estás obteniendo al intentar leer datos ya sea desde el socket o desde un archivo usando el marco de trabajo de Flink Streaming está relacionado con la accesibilidad del módulo. En Java 9 y versiones superiores, se introdujo un sistema de módulos donde la accesibilidad entre módulos debe especificarse explícitamente.

    El mensaje de error sugiere que el campo java.lang.String.value no es accesible. Esto se debe a que la clase o módulo que está tratando de acceder a este campo no tiene permiso explícito para hacerlo.

    Para solucionar este problema, puedes seguir los siguientes pasos:

    1. Agrega el siguiente argumento de línea de comandos a tu JVM: --add-opens java.base/java.lang=ALL-UNNAMED
      Este argumento de línea de comandos permitirá que todos los módulos sin nombre accedan al módulo java.lang.
    2. Si estás utilizando un IDE, puedes agregar el argumento de línea de comandos anterior en la configuración de ejecución. Si estás ejecutando tu código desde la línea de comandos, puedes agregar el argumento anterior antes de ejecutar tu código.

    Una vez que hayas agregado el argumento de línea de comandos anterior, tu código debería ejecutarse sin problemas al leer datos desde el socket o el archivo de texto.

Comments are closed.