Hello all,
I am trying to submit and run the ExclamationTopology topology (from the Apache
Storm 2.2 Storm starter jar file) in remote mode on an Apache Storm 2.2.0
cluster running in Docker. The topology was successfully submitted (it shows
up in Storm UI) - but I am not seeing any activity from the spout. This issue
does NOT occur (Spout activity is observed) if I submit the topology in local
mode.
Investigation findings and resolutions attempted:
* The Worker logs (on the supervisor node) show the following:
2021-04-30 14:34:10.781 STDERR Thread-0 [INFO] Unrecognized VM option
'PrintGCDateStamps'
2021-04-30 14:34:10.781 STDERR Thread-1 [INFO] [0.001s][warning][gc] -Xloggc is
deprecated. Will use -Xlog:gc:artifacts/gc.log instead.
2021-04-30 14:34:10.800 STDERR Thread-0 [INFO] Error: Could not create the Java
Virtual Machine.
2021-04-30 14:34:10.802 STDERR Thread-0 [INFO] Error: A fatal exception has
occurred. Program will exit.
* I found 2 reports of this issue on the Internet where the root causes
matched what I was seeing on my environment:
* Outdated default JVM GC Logging options in worker.childopts:
https://stackoverflow.com/questions/56902645/topology-just-idles-on-storm-in-remote-mode
* Mismatch in JDK versions used to build Storm and the topology jars:
https://stackoverflow.com/questions/58405388/storm-topology-not-executing-in-cluster
* I deleted PrintGCDateStamps and all other GC print settings) from the
worker.childopts configuration option as recommended in the first post and
verified that this change took effect as follows:
* Nimbus and Topology configuration settings in Storm UI show that the
worker_childopts setting no longer has these settings.
* The nimbus and supervisor logs no longer show the GC logging options
for worker.childopts in the commands when each is started up.
* NOTE: I am sending the modified value of worker.childopts in the
startup commands for nimbus and supervisor (see Docker compose file below) -
had to do this as the recommended way of overriding the default value in
storm.yaml did not work for me. I will report this in a separate email.
* I also verified (using the javap utility) that the version of JDK used to
build ExclamationTopology.class is identical to that used to build the class
files in Apache Storm 2.2.0 server, client and core (I compared with a randomly
picked class file from each of the latter).
* However, the issue is continuing to occur: The worker logs continue to
report the unrecognized VM option.
* I have tried restarting zookeeper and the 3 Storm containers as well as
completely deleting and recreating them - but neither had any effect.
Does anyone know of/have any thoughts on other possible root cause(s) and/or
what else I can try to resolve it?
Please see below for additional information on my environment. Please let me
know if you need any other information/have any questions and/or if I should
log a JIRA ticket.
Any help would be greatly appreciated.
Thanks,
Shashi
Additional Information:
* Apache Storm 2.2.0 Docker image downloaded from Docker Hub:
https://hub.docker.com/_/storm
* Storm cluster configuration: 1 Nimbus instance, 1 Supervisor instance, 1
Nimbus UI instance
* ExclamationTopology topology being loaded is from the Storm Starter 2.2.0
jar downloaded from Maven Repository:
https://mvnrepository.com/artifact/org.apache.storm/storm-starter/2.2.0
* Commands to submit the topology (executed in the CLI window of the nimbus
container in Docker Desktop - current directory /apache-storm-2.2.0):
* Remote (issue occurs): storm jar examples/storm-starter-2.2.0.jar
org.apache.storm.starter.ExclamationTopology
* Local (issue does not occur): storm local
examples/storm-starter-2.2.0.jar org.apache.storm.starter.ExclamationTopology
* Running everything on Windows 10 laptop.
* Docker Compose file (showing only the services related to Apache Storm -
the file does have entries for other services needed for our application):
zookeeper:
image: confluentinc/cp-zookeeper:6.0.1
hostname: zookeeper
container_name: zookeeper
ports:
- "2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
nimbus:
image: storm
container_name: nimbus
command: storm nimbus -c worker.childopts="-Xmx%HEAP-MEM%m
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump"
depends_on:
- zookeeper
links:
- zookeeper
restart: always
ports:
- 6627:6627
volumes:
- ./storm/nimbus/conf:/apache-storm-2.2.0/conf
- ./storm/nimbus/examples:/apache-storm-2.2.0/examples
- ./storm/nimbus/logs:/logs
user: root
nimbus-ui:
image: storm
container_name: nimbus-ui
command: storm ui
depends_on:
- nimbus
links:
- nimbus
restart: always
ports:
- 8080:8080
volumes:
- ./storm/nimbus-ui/conf:/apache-storm-2.2.0/conf
- ./storm/nimbus-ui/logs:/logs
- ./storm/nimbus-ui/examples:/apache-storm-2.2.0/examples
supervisor:
image: storm
container_name: supervisor
command: storm supervisor -c worker.childopts="-Xmx%HEAP-MEM%m
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump"
depends_on:
- nimbus
- zookeeper
links:
- nimbus
- zookeeper
restart: always
volumes:
- ./storm/supervisor/conf:/apache-storm-2.2.0/conf
- ./storm/supervisor/logs:/logs
* Storm.yaml (Nimbus) - commented lines omitted
storm.zookeeper.servers:
- "localhost"
nimbus.seeds: "localhost"
### ui.* configs are for the master
ui.host: localhost
ui.port: 8080
ui.header.buffer.bytes: 4096
### worker.* configs are for task workers
#worker.childopts: "-Xmx%HEAP-MEM%m -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=artifacts/heapdump"
* Storm.yaml (Supervisor) - commented lines omitted.
storm.zookeeper.servers:
- "localhost"
nimbus.seeds: "localhost"
### worker.* configs are for task workers
#worker.childopts: "-Xmx%HEAP-MEM%m -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=artifacts/heapdump"