[ https://issues.apache.org/jira/browse/KAFKA-1566?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14267394#comment-14267394 ]
Yongkun Wang commented on KAFKA-1566: ------------------------------------- This is going to be very convenient to remind user to set some important env variables such as JAVA_HOME. Setting JAVA_HOME is quite necessary in our case; our default shell is not bash and there is an old version of java installed in the default shell. I have to set JAVA_HOME in bin/kafka-run-class.sh, otherwise I got NoClassDefFoundError as below. Setting JAVA_HOME in bin/kafka-run-class.sh is not straightforward for other developers to maintain. So adding conf/kafka-env.sh would be very nice. {code} $ bin/kafka-topics.sh --zookeeper zookeeperhost --list Exception in thread "main" java.lang.NoClassDefFoundError: scala.collection.mutable.WrappedArray at java.lang.Class.initializeClass(libgcj.so.10) at java.lang.Class.initializeClass(libgcj.so.10) at scala.collection.mutable.WrappedArray$.<init>(WrappedArray.scala:91) at scala.collection.mutable.WrappedArray$.<clinit>(WrappedArray.scala) at java.lang.Class.initializeClass(libgcj.so.10) at scala.LowPriorityImplicits.genericWrapArray(LowPriorityImplicits.scala:65) at scala.collection.immutable.Set$Set4.$plus(Set.scala:127) at scala.collection.immutable.Set$Set4.$plus(Set.scala:121) at scala.collection.mutable.SetBuilder.$plus$eq(SetBuilder.scala:24) at scala.collection.mutable.SetBuilder.$plus$eq(SetBuilder.scala:22) at scala.collection.generic.Growable$$anonfun$$plus$plus$eq$1.apply(Growable.scala:48) at scala.collection.generic.Growable$$anonfun$$plus$plus$eq$1.apply(Growable.scala:48) at scala.collection.immutable.List.foreach(List.scala:318) at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48) at scala.collection.mutable.SetBuilder.$plus$plus$eq(SetBuilder.scala:22) at scala.collection.TraversableLike$class.to(TraversableLike.scala:629) at scala.collection.AbstractTraversable.to(Traversable.scala:105) at scala.collection.TraversableOnce$class.toSet(TraversableOnce.scala:267) at scala.collection.AbstractTraversable.toSet(Traversable.scala:105) at scala.runtime.ScalaRunTime$.<init>(ScalaRunTime.scala:50) at scala.runtime.ScalaRunTime$.<clinit>(ScalaRunTime.scala) at java.lang.Class.initializeClass(libgcj.so.10) at scala.collection.mutable.HashTable$HashUtils$class.elemHashCode(HashTable.scala:398) at scala.collection.mutable.HashMap.elemHashCode(HashMap.scala:39) at scala.collection.mutable.HashTable$class.findOrAddEntry(HashTable.scala:161) at scala.collection.mutable.HashMap.findOrAddEntry(HashMap.scala:39) at scala.collection.mutable.HashMap.put(HashMap.scala:75) at scala.collection.mutable.HashMap.update(HashMap.scala:80) at scala.sys.SystemProperties$.addHelp(SystemProperties.scala:64) at scala.sys.SystemProperties$.bool(SystemProperties.scala:68) at scala.sys.SystemProperties$.noTraceSupression$lzycompute(SystemProperties.scala:80) at scala.sys.SystemProperties$.noTraceSupression(SystemProperties.scala:80) at scala.util.control.NoStackTrace$.<init>(NoStackTrace.scala:31) at scala.util.control.NoStackTrace$.<clinit>(NoStackTrace.scala) at java.lang.Class.initializeClass(libgcj.so.10) at scala.util.control.NoStackTrace$class.fillInStackTrace(NoStackTrace.scala:22) at scala.util.control.BreakControl.fillInStackTrace(Breaks.scala:93) at java.lang.Throwable.<init>(libgcj.so.10) at java.lang.Throwable.<init>(libgcj.so.10) at scala.util.control.BreakControl.<init>(Breaks.scala:93) at scala.util.control.Breaks.<init>(Breaks.scala:28) at scala.collection.Traversable$.<init>(Traversable.scala:96) at scala.collection.Traversable$.<clinit>(Traversable.scala) at java.lang.Class.initializeClass(libgcj.so.10) at scala.package$.<init>(package.scala:46) at scala.package$.<clinit>(package.scala) at java.lang.Class.initializeClass(libgcj.so.10) at scala.Predef$.<init>(Predef.scala:90) at scala.Predef$.<clinit>(Predef.scala) at java.lang.Class.initializeClass(libgcj.so.10) at kafka.admin.TopicCommand$TopicCommandOptions.<init>(TopicCommand.scala:258) at kafka.admin.TopicCommand$.main(TopicCommand.scala:34) at kafka.admin.TopicCommand.main(TopicCommand.scala) Caused by: java.lang.ClassFormatError: scala.collection.parallel.mutable.ParArray (erroneous type descriptor) at java.lang.VMClassLoader.defineClass(libgcj.so.10) at java.lang.ClassLoader.defineClass(libgcj.so.10) at java.security.SecureClassLoader.defineClass(libgcj.so.10) at java.net.URLClassLoader.findClass(libgcj.so.10) at java.lang.ClassLoader.loadClass(libgcj.so.10) at java.lang.ClassLoader.loadClass(libgcj.so.10) at java.lang.Class.initializeClass(libgcj.so.10) ...52 more {code} > Kafka environment configuration (kafka-env.sh) > ---------------------------------------------- > > Key: KAFKA-1566 > URL: https://issues.apache.org/jira/browse/KAFKA-1566 > Project: Kafka > Issue Type: Improvement > Components: tools > Reporter: Cosmin Lehene > Assignee: Cosmin Lehene > Labels: newbie > Fix For: 0.8.3 > > > It would be useful (especially for automated deployments) to have an > environment configuration file that could be sourced from the launcher files > (e.g. kafka-run-server.sh). > This is how this could look like kafka-env.sh > {code} > export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseCompressedOops > -XX:+DisableExplicitGC -Djava.awt.headless=true \ -XX:+UseG1GC > -XX:PermSize=48m -XX:MaxPermSize=48m -XX:MaxGCPauseMillis=20 > -XX:InitiatingHeapOccupancyPercent=35' %>" > export KAFKA_HEAP_OPTS="'-Xmx1G -Xms1G' %>" > export KAFKA_LOG4J_OPTS="-Dkafka.logs.dir=/var/log/kafka" > {code} > kafka-server-start.sh > {code} > ... > source $base_dir/config/kafka-env.sh > ... > {code} > This approach is consistent with Hadoop and HBase. However the idea here is > to be able to set these values in a single place without having to edit > startup scripts. -- This message was sent by Atlassian JIRA (v6.3.4#6332)