오늘 Ambari 1.6을 이용해서 HDP 2.1을 설치하는데, Application Timeline Serve가 올라오지 않아 서버에 들어가 로그 파일에 기록된 에러 메시지를 봤더니, 다음 클래스를 찾지 못한다는 에러 메시지가 출력되고 있었다.
2014-07-16 19:01:55,808 INFO applicationhistoryservice.ApplicationHistoryServer (SignalLogger.java:register(91)) - registered UNIX signal handlers for [TERM, HUP, INT]
2014-07-16 19:01:55,960 INFO service.AbstractService (AbstractService.java:noteFailure(272)) - Service org.apache.hadoop.yarn.server.applicationhistoryservice.ApplicationHistoryServer failed in state INITED; cause: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.yarn.server.applicationhistoryservice.timeline.LeveldbTimelineStore not found
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.yarn.server.applicationhistoryservice.timeline.LeveldbTimelineStore not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1927)
at org.apache.hadoop.yarn.server.applicationhistoryservice.ApplicationHistoryServer.createTimelineStore(ApplicationHistoryServer.java:165)
at org.apache.hadoop.yarn.server.applicationhistoryservice.ApplicationHistoryServer.serviceInit(ApplicationHistoryServer.java:80)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
약간의 구글링을 통해서 위 클래스 이름을 다음과 같이 변경해주어야 한다는 것을 알았다. Ambari 1.6-46, Hadoop 2.4.0.2.1 기준으로 YARN -> Config 에서 "yarn.timeline-service.store-class" 속성의 값을 변경해주면 된다.
org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore
예전에 받아 놓은 HDP 2.1 Sandbox 버전의 경우, 위 속성 값이 org.apache.hadoop.yarn.server.applicationhistoryservice.timeline.LeveldbTimelineStore로 설정되어 있는데, 하둡 버전은 2.4.0.2.1로 동일하다. (같은 하둡 버전인데, 클래스 이름이 다르다는 건 좀...)