복붙노트

[HADOOP] 클러스터에서 Mapper 입력으로 로컬 파일 시스템 디렉토리 실행

HADOOP

클러스터에서 Mapper 입력으로 로컬 파일 시스템 디렉토리 실행

로컬 파일 시스템에서 매퍼에 대한 입력을주었습니다. 이클립스에서 성공적으로 실행 중이지만 로컬 입력 경로를 찾을 수 없으므로 클러스터에서 실행되지 않습니다. 입력 경로가 존재하지 않습니다. 누구든지 도와 줄 수있는 방법을 알려주십시오. mapper에 로컬 파일 경로를 제공하여 클러스터에서 실행될 수 있도록하고 hdfs에서 출력을 얻을 수 있습니다.

해결법

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

    1.이것은 아주 오래된 질문입니다. 최근에 같은 문제에 직면했습니다. 나는이 솔루션이 내게 얼마나 효과가 있었는지 알지 못한다. 이것에 결점이있을 경우 알려 주시기 바랍니다. 제가 한 일입니다.

    이것은 아주 오래된 질문입니다. 최근에 같은 문제에 직면했습니다. 나는이 솔루션이 내게 얼마나 효과가 있었는지 알지 못한다. 이것에 결점이있을 경우 알려 주시기 바랍니다. 제가 한 일입니다.

    메일 아카이브에서 해결책을 읽으면 fs.default.name을 hdfs : // localhost : 8020 /에서 file : ///로 수정하면 로컬 파일 시스템에 액세스 할 수 있다는 것을 깨달았습니다. 그러나, 나는 모든 나의 mapreduce 일을 위해 이것을 원하지 않았다. 그래서 로컬 시스템 폴더에 core-site.xml의 복사본을 만들었습니다. (내 MR 병을 hadoop 항아리에 제출할 위치와 동일합니다).

    그리고 MR에 대한 나의 Driver 클래스에서,

    Configuration conf = new Configuration();
    conf.addResource(new Path("/my/local/system/path/to/core-site.xml"));
    conf.addResource(new Path("/usr/lib/hadoop-0.20-mapreduce/conf/hdfs-site.xml"));
    

    MR은 로컬 시스템의 입력을 받아서 hdfs에 출력을 씁니다.

  2. ==============================

    2.클러스터에서 실행하려면 데이터를 분산 저장소 (HDFS)에로드해야합니다. hadoop fs -copyFromLocal을 사용하여 먼저 HDFS로 데이터를 복사 한 다음 HDFS에서 데이터의 경로를 제공하여 다시 작업을 수행하십시오.

    클러스터에서 실행하려면 데이터를 분산 저장소 (HDFS)에로드해야합니다. hadoop fs -copyFromLocal을 사용하여 먼저 HDFS로 데이터를 복사 한 다음 HDFS에서 데이터의 경로를 제공하여 다시 작업을 수행하십시오.

  3. ==============================

    3.질문은 재미있는 질문입니다. S3에서 데이터를 가지고 작업을 실행하기 전에 HDFS에 명시 적으로 복사하지 않고이 데이터에 액세스 할 수 있습니다. wordcount 예제에서는 다음과 같이 지정합니다.

    질문은 재미있는 질문입니다. S3에서 데이터를 가지고 작업을 실행하기 전에 HDFS에 명시 적으로 복사하지 않고이 데이터에 액세스 할 수 있습니다. wordcount 예제에서는 다음과 같이 지정합니다.

    hadoop jar example.jar wordcount s3n : // 버킷 / 입력 s3n : // 버켓 / 출력

    이것에서 발생하는 것은 mappers가 S3에서 직접 레코드를 읽는다는 것입니다.

    이것이 S3로 할 수 있다면, 왜 s3n 대신에이 구문을 사용하는 것과 비슷하게 hadoop을 사용하지 않을까요?

    file:///input file:///output
    

    ?

    그러나 경험적으로 이것은 흥미로운 방식으로 실패한 것 같습니다. Hadoop은 실제로 입력 디렉토리에있는 파일에 대해 예외를 찾을 수없는 파일을 제공합니다. 즉, 내 로컬 디스크의 put 디렉토리에있는 파일을 나열 할 수있는 것 같지만 레코드를 읽으려면 파일을 열어야 할 때 파일을 찾을 수 없거나 액세스 할 수 없습니다.

  4. ==============================

    4.모든 MapReduce 작업이 데이터를 처리하려면 데이터가 HDFS에 있어야합니다. 따라서 로컬 파일 시스템이나 네트워크 경로 또는 웹 기반 저장소 (예 : Azure Blob Storage 또는 Amazon Block stoage)와 같은 원본이있는 경우에도 먼저 HDFS에서 데이터를 복사 한 다음 작업을 실행해야합니다. 결론적으로 데이터를 HDFS로 푸시해야하고 데이터 소스에 따라 여러 가지 방법이 필요하므로 소스에서 HDFS로 데이터 전송을 수행 할 것입니다 (예 : 로컬 파일 시스템에서 다음 명령 사용).

    모든 MapReduce 작업이 데이터를 처리하려면 데이터가 HDFS에 있어야합니다. 따라서 로컬 파일 시스템이나 네트워크 경로 또는 웹 기반 저장소 (예 : Azure Blob Storage 또는 Amazon Block stoage)와 같은 원본이있는 경우에도 먼저 HDFS에서 데이터를 복사 한 다음 작업을 실행해야합니다. 결론적으로 데이터를 HDFS로 푸시해야하고 데이터 소스에 따라 여러 가지 방법이 필요하므로 소스에서 HDFS로 데이터 전송을 수행 할 것입니다 (예 : 로컬 파일 시스템에서 다음 명령 사용).

    $ hadoop -f CopyFromLocal SourceFileOrStoragePath _HDFS__Or_directPathatHDFS_

  5. ==============================

    5.다음과 같이 입력 경로를 설정해보십시오.

    다음과 같이 입력 경로를 설정해보십시오.

    FileInputFormat.addInputPath (conf, newPath (file : /// 로컬 파일 시스템상의 디렉토리));

    파일 확장자를 지정하면 지역 시스템의 파일에 액세스 할 수 있습니다.

  6. ==============================

    6.다음 코드를 시도하고 솔루션을 가지고 ... 그것을 시도하고 알려주세요 ..

    다음 코드를 시도하고 솔루션을 가지고 ... 그것을 시도하고 알려주세요 ..

    당신은 로컬 파일 시스템을위한 FileSystem 객체를 얻고 경로를 반환하기 위해 makequalified 메소드를 사용할 필요가 있습니다. 로컬 파일 시스템의 경로를 전달해야하므로 (다른 방법으로는 inputformat에 전달할 필요가 없습니다) make qualified를 사용했습니다. 로컬 파일 시스템 경로 만 ..

    코드는 아래와 같습니다.

    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.getLocal(conf);
    Path inputPath = fs.makeQualified(new Path("/usr/local/srini/"));  // local path
    
    FileInputFormat.setInputPaths(job, inputPath);
    

    나는 이것이 매우 늦게 게시되었지만 이것이 당신의 요구 사항에 잘되기를 바란다 .. 그것은 나에게 잘 돌아갔다 .. 그것은 내가 생각하는 어떤 구성 변화도 필요로하지 않는다.

  7. ==============================

    7.U는 다음과 같이 구성을 설정하여이를 시도 할 수 있습니다.

    U는 다음과 같이 구성을 설정하여이를 시도 할 수 있습니다.

    Configuration conf=new Configuration();
    conf.set("job.mapreduce.tracker","local");
    conf.set("fs.default.name","file:///");
    

    이 후 u 로컬 경로 및 u r 가고 좋은 fileinputformat 설정할 수 있습니다.

  8. from https://stackoverflow.com/questions/10107665/run-a-local-file-system-directory-as-input-of-a-mapper-in-cluster by cc-by-sa and MIT license