복붙노트

[HADOOP] HDFS에서 파일 전송

HADOOP

HDFS에서 파일 전송

HDFS에서 파일을 hadoop 클러스터가 아닌 네트워크에있는 다른 서버의 로컬 파일 시스템으로 전송하려고합니다.

나는 할 수 있었다 :

hadoop fs -copyToLocal <src> <dest>
and then scp/ftp <toMyFileServer>.

데이터가 거대하고, hadoop 게이트웨이 머신의 로컬 파일 시스템상의 제한된 공간 때문에, 나는 이것을 피하고 나의 파일 서버에 직접 데이터를 보내고 싶었다.

이 문제를 해결하는 방법에 대한 몇 가지 지침을 알려주십시오.

해결법

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

    1.그래서 당신은 아마 당신의 hadoop 프로그램의 출력물로서 많은 파일들을 가지고있을 것입니다.

    그래서 당신은 아마 당신의 hadoop 프로그램의 출력물로서 많은 파일들을 가지고있을 것입니다.

    part-r-00000
    part-r-00001
    part-r-00002
    part-r-00003
    part-r-00004
    

    한 번에 한 부분 씩 할 수 있습니까?

    for i in `seq 0 4`;
    do
    hadoop fs -copyToLocal output/part-r-0000$i ./
    scp ./part-r-0000$i you@somewhere:/home/you/
    rm ./part-r-0000$i
    done
    

    scp에 대한 암호 변경자를 찾아야 할 수도 있습니다.

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

    2.가장 간단한 방법은 다음과 같습니다.

    가장 간단한 방법은 다음과 같습니다.

    ssh <YOUR_HADOOP_GATEWAY> "hdfs dfs -cat <src_in_HDFS> " > <local_dst>
    

    바이너리 파일에서도 작동합니다.

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

    3.로컬 파일 서버 디렉토리를 로컬에서 시뮬레이트하는 네트워크 마운트 또는 SSHFS가 가장 간단한 솔루션이라고 생각합니다. FTP를 로컬 디렉토리로 마운트 할 수도 있습니다. http://www.linuxnix.com/2011/03/mount-ftp-server-linux.html

    로컬 파일 서버 디렉토리를 로컬에서 시뮬레이트하는 네트워크 마운트 또는 SSHFS가 가장 간단한 솔루션이라고 생각합니다. FTP를 로컬 디렉토리로 마운트 할 수도 있습니다. http://www.linuxnix.com/2011/03/mount-ftp-server-linux.html

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

    4.webHDFS REST API를 사용하여이를 수행 할 수 있습니다. 파일을 다운로드하려는 컴퓨터에서 컬을하십시오.

    webHDFS REST API를 사용하여이를 수행 할 수 있습니다. 파일을 다운로드하려는 컴퓨터에서 컬을하십시오.

    curl -i -L "http://namenode:50075/webhdfs/v1/path_of_the_file?op=OPEN" -o ~/destination
    

    또 다른 접근법은 wget을 통해 DataNode API를 사용하여이를 수행하는 것입니다.

    wget http://$datanode:50075/streamFile/path_of_the_file
    

    하지만 가장 편리한 방법 인 IMHO는 NameNOde 웹 UI를 사용하는 것입니다. 이 기계는 네트워크의 일부이므로 웹 브라우저에서 NameNode_Machine : 50070을 가리키면됩니다. 그런 다음 HDFS를 탐색하고 다운로드 할 파일을 연 다음이 파일 다운로드를 클릭하십시오.

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

    5.나는 (Kerberos 보안을 사용하고 있었다) 이것을 시도했다. 작은 업데이트 후에도 도움이되었습니다. https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#OPEN

    나는 (Kerberos 보안을 사용하고 있었다) 이것을 시도했다. 작은 업데이트 후에도 도움이되었습니다. https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#OPEN

    직접 curl -L -i-negotiate "http : // : / webhdfs / v1 / ? op = OPEN"이 나에게 도움이되지 않았다.

    이 명령은 두 단계를 수행합니다.

    스위처 -L은 파일을 가져 와서 직접 톱질하는 것을 말합니다. curl 명령 -v에 추가하면 출력으로 기록됩니다. 그렇다면 명령 줄에 두 단계가 설명되어 있습니다. 하지만 이전 버전의 컬 때문에 (나는 엎드려서는 안됨) 작동하지 않을 것입니다.

    이 솔루션 (쉘) :

    LOCATION=`curl -i --negotiate -u : "${FILE_PATH_FOR_DOWNLOAD}?op=OPEN" | /usr/bin/perl -n -e '/^Location: (.*)$/ && print "$1\n"'`
    

    그러면 임시 링크가 생성되어 $ LOCATION 변수에 저장됩니다.

    RESULT=`curl -v -L --negotiate -u : "${LOCATION}" -o ${LOCAL_FILE_PATH_FOR_DOWNLOAD}`
    

    -o 를 추가하면 로컬 파일에 저장됩니다.

    도움이되기를 바랍니다.

    제이

  6. from https://stackoverflow.com/questions/12173715/transfer-file-out-from-hdfs by cc-by-sa and MIT license