1

나는 분산 캐시에 파일을 배치하는 것을 시도하고있다. MYFILE이 포함 된 URI/경로의DistributedCache 하둡 - FileNotFound

hadoop jar job.jar my.driver.class -files MYFILE input output 

getCacheFiles()getLocalCacheFiles() 반환 배열 :이 작업을 수행하기 위해 나는 -files 옵션을 사용하여 내 드라이버 클래스, 같은를 호출합니다. (예 : HDFS : //localhost/tmp/hadoopuser/mapred/staging/knappy/.staging/job_201208262359_0005/files/histfile#histfile)지도 작업에 MYFILE를 검색 할 때

불행하게도, 그것은을 던졌습니다 FileNotFoundException.

나는 독립 (로컬) 모드에서뿐만 아니라 의사 분산 모드에서 이것을 시도했다.

당신이 원인 일 수 있습니다 뭔지 알아?

UPDATE :

다음 세 가지 라인 :

System.out.println("cache files:"+ctx.getConfiguration().get("mapred.cache.files")); 
uris = DistributedCache.getLocalCacheFiles(ctx.getConfiguration()); 
for(Path uri: uris){ 

     System.out.println(uri.toString()); 
     System.out.println(uri.getName()); 
     if(uri.getName().contains(Constants.PATH_TO_HISTFILE)){ 
     histfileName = uri.getName(); 
     } 
} 

인쇄 출력이 :

cache files:file:/home/knappy/histfile#histfile 

/tmp/hadoop-knappy/mapred/local/archive/-7231_-1351_105/file/home/knappy/histfile 

histfile 

따라서, 파일이 job.xml mapred.cache.files 속성에 나열 될 것으로 보인다 로컬 파일이있는 것 같습니다. 여전히 FileNotFoundException이 발생합니다. 작업의 XML에

답변

1

먼저 확인 mapred.cache.files 파일이 캐시에 있는지 여부를 확인합니다. 당신은 당신의 매퍼에서이를 검색 할 수 있습니다

... 
Path[] files = DistributedCache.getLocalCacheFiles(context.getConfiguration()); 
File myFile = new File(files[0].getName()); 
//read your file content 
... 
+0

당신은 업데이트에서 봐 주시기 바랍니다 수 있습니까? 그것은 아직도 당신의 URI/경로에서 파일을 가져 어떻게 파일 – Razvan

+0

을 찾을 수 있습니까? –

+0

예, 나는이 문제를 해결했다. 그 URI를 사용하여 인스턴스화 된 FS 인스턴스를 사용하여 URI에서 가져 오려고했습니다. 나는 로컬에 도착하려고 노력해야했다. 나는 결국했다. 그리고 그것은 지금 작동한다. 감사! – Razvan