복붙노트

[HADOOP] HIVE의 분산 캐시에 여러 파일 추가

HADOOP

HIVE의 분산 캐시에 여러 파일 추가

현재 Hives의 신뢰할 수없는 캐시에 폴더 내용을 추가하는 데 문제가 있습니다. 성공적으로 하이브의 분산 캐시에 여러 파일을 추가 할 수 있습니다.

ADD FILE /folder/file1.ext;
ADD FILE /folder/file2.ext;
ADD FILE /folder/file3.ext;
etc.

.

또한 내 마음 속에는 다음과 같은 디렉토리를 지정할 수있는 ADD FILES (복수형) 옵션이 있음을 알 수 있습니다 : ADD FILES / folder /; 폴더의 모든 항목이 포함됩니다 (Hadoop Streaming -files 옵션과 함께 작동). 그러나 이것은 하이브와 함께 작동하지 않습니다. 지금은 각 파일을 명시 적으로 추가해야합니다.

내가 잘못 했니? 전체 폴더 내용을 분산 캐시에 저장하는 방법이 있습니까?

추신 와일드 카드 ADD FILE / 폴더 / *와 ADD FILES / folder / *를 시도했지만 실패했습니다.

편집하다:

하이브 0.11부터는 다음과 같이 지원됩니다.

ADD FILE /folder

이제 작동합니다.

내가 사용하고있는 것은 하이브 스크립트에 폴더 위치를 매개 변수로 전달하는 것이다.

$ hive -f my-query.hql -hiveconf folder=/folder

그리고 my-query.hql 파일에서 :

ADD FILE ${hiveconf:folder}

지금 니스와 깔끔한!

해결법

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

    1.추가 기능은 디렉토리를 지원하지 않지만 해결 방법으로 파일을 압축 할 수 있습니다. 그런 다음이를 아카이브 (ADD ARCHIVE my.zip)로서 분산 캐시에 추가하십시오. 작업이 실행 중일 때 아카이브의 내용이 로컬 작업 디렉토리에 압축이 풀립니다. 슬레이브 노드 (mapred.job.classpath.archives 속성 참조)

    추가 기능은 디렉토리를 지원하지 않지만 해결 방법으로 파일을 압축 할 수 있습니다. 그런 다음이를 아카이브 (ADD ARCHIVE my.zip)로서 분산 캐시에 추가하십시오. 작업이 실행 중일 때 아카이브의 내용이 로컬 작업 디렉토리에 압축이 풀립니다. 슬레이브 노드 (mapred.job.classpath.archives 속성 참조)

    전달할 파일의 수가 상대적으로 적고 아카이브를 다루지 않으려면 주어진 디렉토리에있는 모든 파일에 대해 파일 추가 명령을 준비하는 작은 스크립트를 작성할 수 있습니다. 예 :

    #!/bin/bash
    #list.sh
    
    if [ ! "$1" ]
    then
      echo "Directory is missing!"
      exit 1
    fi
    
    ls -d $1/* | while read f; do echo ADD FILE $f\;; done
    

    그런 다음 Hive 셸에서 호출하고 생성 된 출력을 실행합니다.

    !/home/user/list.sh /path/to/files
    
  2. ==============================

    2.음, 필자의 경우, 하위 폴더와 파일이있는 폴더를 옮겨야했습니다.

    음, 필자의 경우, 하위 폴더와 파일이있는 폴더를 옮겨야했습니다.

    나는 파일을 추가하고 있던 ADD ARCHIVE xxx.gz 파일을 사용했지만, 슬레이브 머신에서는 폭발하지 않았다.

    대신 ADD FILE 은 실제로 전체 폴더를 반복적으로 슬레이브에 복사합니다.

    호의 : 의견은 디버깅을 도왔습니다.

    희망이 도움이!

  3. from https://stackoverflow.com/questions/15429040/add-multiple-files-to-distributed-cache-in-hive by cc-by-sa and MIT license