Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-15585

Fix spaces in HADOOP_OPTS arguments

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 3.0.3
    • None
    • scripts

    Description

      Prefix exec by eval in Hadoop bin scripts
      Prior to this change, if HADOOP_OPTS contains any arguments that include a
      space, the command is not parsed correctly. For example, if
      HADOOP_OPTS="... -XX:OnOutOfMemoryError=\"kill -9 %p\" ...", the bin/hadoop
      script will fail with the error "Unrecognized option: -9". No amount of clever
      escaping of the quotes or spaces in the "kill -9 %p" command will fix this.

      The only alternative appears to be to use 'eval'. Switching to use 'eval'
      instead of 'exec' also works, but it results in an intermediate bash process
      being left alive throughout the entire lifetime of the Java proces being
      started. Using 'exec' prefixed by 'eval' as has been done in this commit gets
      the best of both worlds, in that options with spaces are parsed correctly, and
      you don't end up with an intermediate bash process as the parent of the Java
      process.

      This is the exact approach that has been taken with Tomcat as well. See:
      http://tomcat.10.x6.nabble.com/Using-eval-vs-exec-in-shell-scripts-td2193116.html
      https://github.com/apache/tomcat/commit/3445dc3dba7b15f2fff27faef77003215f62e49a
      https://github.com/apache/tomcat/commit/83c0aea60f331eb632dcea8e9919d234903e06d1

      Attachments

        Activity

          People

            Unassigned Unassigned
            bdscheller Brandon Scheller
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated: