[HADOOP] hadoop 분산 캐시에서 파일 액세스하기
HADOOPhadoop 분산 캐시에서 파일 액세스하기
내 맵퍼가 데이터에 액세스 할 수 있도록 분산 캐시를 사용하고 싶습니다. 주에서는, 나는 명령을 사용하고있다.
DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf);
여기서 / user / peter / cacheFile / testCache1은 hdfs에있는 파일입니다.
그런 다음, 내 설정 기능은 다음과 같습니다.
public void setup(Context context) throws IOException, InterruptedException{
Configuration conf = context.getConfiguration();
Path[] localFiles = DistributedCache.getLocalCacheFiles(conf);
//etc
}
그러나이 localFiles 배열은 항상 null입니다.
처음에는 테스트를 위해 단일 호스트 클러스터에서 실행 중이었지만 분산 캐시가 작동하지 않도록 읽었습니다. 나는 pseudo-distributed로 시도했지만 그 중 하나는 작동하지 않았다.
나 hadoop 1.0.3을 사용하고있다.
감사 베드로
해결법
-
==============================
1.문제는 내가 다음을하고 있다는 것이었다.
문제는 내가 다음을하고 있다는 것이었다.
Configuration conf = new Configuration(); Job job = new Job(conf, "wordcount"); DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf);
Job 생성자가 conf 인스턴스의 내부 복사본을 만들기 때문에 나중에 캐시 파일을 추가해도 사안에 영향을 미치지 않습니다. 대신, 나는 이것을해야한다.
Configuration conf = new Configuration(); DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf); Job job = new Job(conf, "wordcount");
그리고 이제 작동합니다. Harsh의 도움말에 대한 hadoop 사용자 목록에 감사드립니다.
-
==============================
2.
Configuration conf = new Configuration(); Job job = new Job(conf, "wordcount"); DistributedCache.addCacheFile(new URI("/userpetercacheFiletestCache1"),job.getConfiguration());
이 방법으로도 할 수 있습니다.
-
==============================
3.작업이 구성 객체로 할당되면, 즉, 구성 conf = new Configuration ();
작업이 구성 객체로 할당되면, 즉, 구성 conf = new Configuration ();
Job job = new Job(conf, "wordcount");
다음과 같이 conf의 속성을 처리하면
conf.set("demiliter","|");
또는
DistributedCache.addCacheFile(new URI("/user/peter/cacheFile/testCache1"), conf);
이러한 변경 사항은 의사 클러스터 또는 클러스터에서 로컬 환경과 함께 작동하는 방식에 반영되지 않습니다.
-
==============================
4.이 코드는 (위의 구문과 약간 다릅니다) 항상 저에게 도움이되었습니다.
이 코드는 (위의 구문과 약간 다릅니다) 항상 저에게 도움이되었습니다.
//in main(String [] args) Job job = new Job(conf,"Word Count"); ... DistributedCache.addCacheFile(new URI(/user/peter/cacheFile/testCache1), job.getConfiguration());
나는 Mapper 코드에서 완전한 setup () 함수를 보지 않았다.
public void setup(Context context) throws IOException, InterruptedException { Configuration conf = context.getConfiguration(); FileSystem fs = FileSystem.getLocal(conf); Path[] dataFile = DistributedCache.getLocalCacheFiles(conf); // [0] because we added just one file. BufferedReader cacheReader = new BufferedReader(new InputStreamReader(fs.open(dataFile[0]))); // now one can use BufferedReader's readLine() to read data }
from https://stackoverflow.com/questions/13746561/accessing-files-in-hadoop-distributed-cache by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hive에서 밀리 초 단위로 문자열을 타임 스탬프로 변환하는 방법 (0) | 2019.07.10 |
---|---|
[HADOOP] Hadoop / MapReduce를 사용하여 연결된 구성 요소 찾기 (0) | 2019.07.10 |
[HADOOP] JAVA_HOME이 (가) hadoop으로 잘못 설정되었습니다. (0) | 2019.07.09 |
[HADOOP] HBase는 HDFS에 대한 무작위 액세스를 어떻게 가능하게합니까? (0) | 2019.07.09 |
[HADOOP] 실험용 무료 Hadoop 클러스터 (0) | 2019.07.09 |