문제

2016-06-14 5 views
0

나는 내가 사용 원사 클러스터문제

./bin/run-job.sh --config-에 실행하려고 오전 samza 작업이 공장 = org.apache.samza.config.factories.PropertiesConfigFactory --config-경로 = 파일 : ///home/anshu/samzaJob.properties

작업이 트리거이 구성을 잘 실행됩니다.

이제 작업이 시작된 후 아파치 공유 구성 라이브러리를 사용하여로드하려고하는 일부 응용 프로그램 특정 구성 (별도의 특성 파일 양식)이 있습니다. 이를 위해, 나는 appconfig가 폴더를 생성하고

CONFIGURATION_FILE_PATH = System.getProperty를 ("으로 user.dir") + "/ 설정/appconfig가"해당 폴더의 모든 파일을 읽으려고했습니다;

이 내 로컬 상자에 잘 작동하지만이 원사 클러스터에서 실행될 때,이

로 확인

은/var/lib 디렉토리/하둡 - 실/데이터/samza - 실/usercache/anshu/앱 캐시/application_1462311090906_0973/container_e19_1462311090906_0973_01_000003/구성/appconfig가 정확하지

.

파일을로드하는 올바른 경로는 어떻게 찾습니까? 아니면이 일을 할 수있는 다른 방법이 있습니까?

답변

0

글쎄,이 일을하려는 방식이 정확하지 않은 것 같습니다.

주어진 속성 파일의 경로가 정확하고 파일이 실제로 거기에 상주하므로 로컬 상자에서 작업하고있었습니다. 그러나 원사 클러스터에서 실행하려고 할 때 System.getProperty ("user.dir")는 항상 samza 컨테이너에 대한 경로를 제공하고 속성 파일이 그 위치에 있지 않으면 속성에 대한 절대 경로를 제공하는이 접근 방식이 작동하지 않습니다. 위치에 도달하면 실패합니다.

이상적인 방법을 사용하면 클래스를로드하려고 할 때 그들은 항상있을 것입니다 있는지 확인하고

클래스 로더를 사용하여로드 할 수 있도록 클래스 경로에로드 된 어떤 위치에 파일을 넣어하는 것입니다 loader = Thread.currentThread(). getContextClassLoader(); InputStream resourceStream = loader.getResourceAsStream (propertiesFilePath)); FileConfiguration 구성 = 새 PropertiesConfiguration(); configuration.load (resourceStream);