복붙노트

[HADOOP] Tomcat 서버를 종료 할 때 org.apache.hadoop.util.ShutdownHookManager를로드 할 수 없습니다.

HADOOP

Tomcat 서버를 종료 할 때 org.apache.hadoop.util.ShutdownHookManager를로드 할 수 없습니다.

바람둥이에서 실행되는 간단한 웹 응용 프로그램이 있습니다. 이 웹 응용 프로그램은 HDFS에 파일을 읽고 씁니다.

내가 겪고있는 문제는 ./bin/shutdown.sh를 사용하여 서버를 중지 할 때마다 발생합니다. hadoop shutdownHookManager 예외를로드 할 수 없습니다.

hadoop-common (ShutDownManager 포함)이 바람둥이 클래스 경로에 있다고 확신합니다.

누구든지 나를 도울 수 있습니까?

내가 얻은 예외 :

Oct 14, 2013 5:57:54 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [com.ebay.kernel.calwrapper.CalTransactionHelper$1] (value [com.ebay.kernel.calwrapper.CalTransactionHelper$1@3d5a1c5f]) and a value of type [com.ebay.kernel.calwrapper.CalTransactionHelper.Stack] (value [[]]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Oct 14, 2013 5:57:54 PM org.apache.coyote.AbstractProtocol stop 
INFO: Stopping ProtocolHandler ["http-bio-8080"]
Oct 14, 2013 5:57:54 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["ajp-bio-8009"]
Oct 14, 2013 5:57:54 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8080"]
Oct 14, 2013 5:57:54 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]
Oct 14, 2013 5:57:54 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load org.apache.hadoop.util.ShutdownHookManager$2.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
  at org.apache.hadoop.util.ShutdownHookManager.getShutdownHooksInOrder(ShutdownHookManager.java:124)
  at org.apache.hadoop.util.ShutdownHookManager$1.run(ShutdownHookManager.java:52)
Exception in thread "Thread-9" java.lang.NoClassDefFoundError: org/apache/hadoop/util/ShutdownHookManager$2
  at org.apache.hadoop.util.ShutdownHookManager.getShutdownHooksInOrder(ShutdownHookManager.java:124)
  at org.apache.hadoop.util.ShutdownHookManager$1.run(ShutdownHookManager.java:52)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.util.ShutdownHookManager$2
  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
  ... 2 more

해결법

  1. ==============================

    1.나는 같은 건물에있는 모조 모조에 문제가있다. 웹 응용 프로그램에서 hadoop 클래스를로드하는 컨텍스트 클래스 로더로 인해 문제가 발생했다고 생각합니다. 이러한 정의는 WebAppClassLoader 클래스 로더에서 볼 수 없습니다. JVM 종료가 발생하면 종료 후크가 실행되고 ShutdownHookManager를 호출하지만 이제는 파괴 된 컨텍스트 클래스 로더에로드되었으며 문제가 있습니다.

    나는 같은 건물에있는 모조 모조에 문제가있다. 웹 응용 프로그램에서 hadoop 클래스를로드하는 컨텍스트 클래스 로더로 인해 문제가 발생했다고 생각합니다. 이러한 정의는 WebAppClassLoader 클래스 로더에서 볼 수 없습니다. JVM 종료가 발생하면 종료 후크가 실행되고 ShutdownHookManager를 호출하지만 이제는 파괴 된 컨텍스트 클래스 로더에로드되었으며 문제가 있습니다.

    바람둥이 항아리를 바람둥이의 lib 디렉토리에 넣으면 아마 도움이 될 것입니다. 또는 바람둥이를 시작할 때 * _CLASSPATH java 옵션을 설정하십시오. 그렇게하면 WebAppClassLoader에 클래스 정의가 있습니다.

    그렇지 않으면 컨텍스트를 삭제하고 위의 예외를 무시하기 전에 hadoop의 종료 후크를 수동으로 실행할 수 있습니다.

  2. from https://stackoverflow.com/questions/19388201/could-not-load-org-apache-hadoop-util-shutdownhookmanager-when-shutdown-tomcat-s by cc-by-sa and MIT license