Поток данных GCP: Log4J StackOverflowError aka Java манипулирование с классами - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь развернуть простой конвейер в облачном потоке данных Google (чтобы скопировать некоторые данные из PubSub в Bigtable), но постоянно получаю следующую ошибку:

Exception in thread "main"  
java.lang.StackOverflowError
        at java.util.HashMap.hash(HashMap.java:338)
        at java.util.HashMap.get(HashMap.java:556)
        at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:67)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
[ multiple times ... ]
        at org.apache.log4j.Category.<init>(Category.java:57)
        at org.apache.log4j.Logger.<init>(Logger.java:37)
        at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
        at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
        at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
java failed with exit status 1

Эта ошибка убивает работника.Это происходит, хотя у меня нет операторов логирования или импорта в моем коде , и действительно ни один моего кода не указан в трассировке стека.Я знаком с этим вопросом и вижу (в GCP Stackdriver), что моя команда Java действительно действительно содержит log4j_to_slf4j.jar:

java -Xmx5834483752 -XX:-OmitStackTraceInFastThrow -Xloggc:/var/log/dataflow/jvm-gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=2 -XX:GCLogFileSize=512K -cp /opt/google/dataflow/streaming/libWindmillServer.jar:/opt/google/dataflow/streaming/dataflow-worker.jar:/opt/google/dataflow/slf4j/jcl_over_slf4j.jar:/opt/google/dataflow/slf4j/log4j_over_slf4j.jar:/opt/google/dataflow/slf4j/log4j_to_slf4j.jar: ...

Проблема в том, что эта команда Java создана Google.log4j_to_slf4j.jar - не среди моих собственных зависимостей.Как мне отредактировать эту команду и удалить ее из Classpath?Или есть лучшее решение?

Спасибо!

1 Ответ

0 голосов
/ 16 мая 2019

Хорошо, так что понижение этих зависимостей:

<dependency>
   <groupId>org.apache.beam</groupId>
   <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
   <version>2.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.beam</groupId>
   <artifactId>beam-sdks-java-extensions-json-jackson</artifactId>
   <version>2.12.0</version>
</dependency>

от 2.12.0 до 2.9.0 решило проблему. Сбой снова с 2.10.0. Я моделировал свою реализацию на официальных (?) примерах , которые, однако, используют 2.4.0.

...