All,
After further investigation, I found that the issue does not occur if I run
against Apache Zookeeper rather than Confluent Zookeeper.
I am not sure why it won't work with Confluent Zookeeper. I searched on the
Internet (both on the Confluent web site and elsewhere) for differences between
Confluent Zookeeper and Apache Zookeeper (which might explain the difference in
Storm behavior) - but have so far come up empty. So if anyone knows of reasons
for the issue with Confluent's Zookeeper and/or how to resolve it, I would much
appreciate it if you can share.
Here is my Docker-compose YAML file entry for Apache Zookeeper (I only had 1
instance):
zookeeper:
image: zookeeper
container_name: apache-zookeeper
restart: always
hostname: zookeeper
ports:
- 2181:2181
environment:
# ZOO_MY_ID: 1
# ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181
server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
NOTE: I still had to override worker.childopts (to remove GC logging options)
in the commands for starting nimbus and supervisor still required. Overriding
them via storm.yaml or via env variables in the docker-compose file did not
work even after the change in Zookeeper.
Thanks,
Shashi
From: Prabhakar, Shashi <[email protected]>
Sent: Monday, May 3, 2021 1:45 PM
To: [email protected]
Subject: RE: [Apache Storm 2.2.0] No spout activity from ExclamationTopology
topology on remote Apache Storm 2.2.0 cluster (running in Docker) due to worker
JVM creation failure (Unrecognized VM creation option 'PrintGCDateStamps')
All,
I am still looking for a solution for the issue below.
I have tried the following since I sent the original email below:
1. Loaded a different topology (word-count) - results were the same. So the
issue is not specific to the Exclamation Topology.
2. Searched all files in both nimbus and supervisor for instances of the
unrecognized VM option - I did not find any.
3. I cloned the Storm repo from Github and searched the code base - only
occurrences were in default.yaml and integration-test/config/storm.yaml.
* I believe presence in default.yaml is expected - and is supposed to be
overridden by settings in storm.yaml and the command line (I am using the
latter).
I am now looking through the code to see if I can tell what might be happening.
If anyone knows of another location where the code may be getting the GC
logging settings or any other possible reasons and/or workarounds/fixes for the
issue, I would greatly appreciate it if you could share.
Thanks,
Shashi
From: Prabhakar, Shashi
<[email protected]<mailto:[email protected]>>
Sent: Friday, April 30, 2021 12:39 PM
To: [email protected]<mailto:[email protected]>
Subject: [Apache Storm 2.2.0] No spout activity from ExclamationTopology
topology on remote Apache Storm 2.2.0 cluster (running in Docker) due to worker
JVM creation failure (Unrecognized VM creation option 'PrintGCDateStamps')
*External Message* - Use caution before opening links or attachments
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<https://urldefense.com/v3/__https:/stackoverflow.com/questions/56902645/topology-just-idles-on-storm-in-remote-mode__;!!In4Qlw!5ekC-DrDKASw4Z6oGRpw6qP5oqnB1ScA4dUySyomHN531RneaqYYWc_bTLBe9LdJww$>
* Mismatch in JDK versions used to build Storm and the topology jars:
https://stackoverflow.com/questions/58405388/storm-topology-not-executing-in-cluster<https://urldefense.com/v3/__https:/stackoverflow.com/questions/58405388/storm-topology-not-executing-in-cluster__;!!In4Qlw!5ekC-DrDKASw4Z6oGRpw6qP5oqnB1ScA4dUySyomHN531RneaqYYWc_bTLDvgEXDbQ$>
* 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<https://urldefense.com/v3/__https:/hub.docker.com/_/storm__;!!In4Qlw!5ekC-DrDKASw4Z6oGRpw6qP5oqnB1ScA4dUySyomHN531RneaqYYWc_bTLCnIDOqgA$>
* 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<https://urldefense.com/v3/__https:/mvnrepository.com/artifact/org.apache.storm/storm-starter/2.2.0__;!!In4Qlw!5ekC-DrDKASw4Z6oGRpw6qP5oqnB1ScA4dUySyomHN531RneaqYYWc_bTLAnTjblvQ$>
* 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"