복붙노트

[HADOOP] Hadoop Directory with Spaces

HADOOP

Hadoop Directory with Spaces

공백이 포함 된 디렉토리를 Hadoop에 제공하면서 문제가 발생했습니다.

전자

inputDir = /abc/xyz/folder name/abc.txt

Hadoop은 어떻게 든 단어들 사이에 공백이있는 폴더 이름 인 "폴더 이름"을 알지 못합니다.

그 일을하는 동안 아래의 오류가 발생합니다.

java.io.FileNotFoundException: File does not exist: /abc/xyz/folder

또한 인코딩 된 URL을 제공하려고했습니다.

java.io.FileNotFoundException: File does not exist: /abc/xyz/folder%20name/abc.txt

하지만 여전히 나에게 같은 오류가 발생합니다.

아무도 이것에 대한 해결 방법을 알고 있습니까?

어떤 도움을 주셔서 감사합니다.

해결법

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

    1.Hadoop 쉘은 % 20으로 공간을 대체합니다. 에서와 같이

    Hadoop 쉘은 % 20으로 공간을 대체합니다. 에서와 같이

    sed 's/ /\%20/g'
    

    그리고 실제 put 명령에서

    hadoop fs -put "$inputDir" $putDest
    

    % 20이 없으면 URI 예외가 발생합니다. (이것은 % 20을 이스케이프 문자 위에 사용하는 나의 단서를 제공했습니다.)

    자바를 통해 당신이하고 있다는 것을 알고 있습니다. 당신이 java.io.FileNotFoundException을 얻는다는 사실은 코드가 hadoop put 또는 put과 동일한 명령에 대한 인수가 아닌 inputDir을 사용하여 다른 작업을 수행하는지 궁금하게 만듭니다. Hadoop 명령을 벗어나는 inputDir에 대한 검사를 수행하면 실패합니다. 자바는 그것을 경로로 본다. Hadoop은 그것을 URI로 본다.

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

    2.Hadoop은 입력 디렉토리 경로에서 빈 공간을 지원하지 않습니다.

    Hadoop은 입력 디렉토리 경로에서 빈 공간을 지원하지 않습니다.

    디렉터리 경로에서 공백을 _ 또는 원하는 구분 문자로 바꿉니다.

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

    3.set ( "path", "/ abc / xyz / folder \\ name / abc.txt"); 더블 백 슬래시에 유의하십시오.

    set ( "path", "/ abc / xyz / folder \\ name / abc.txt"); 더블 백 슬래시에 유의하십시오.

  4. from https://stackoverflow.com/questions/20374419/hadoop-directory-with-spaces by cc-by-sa and MIT license