[HADOOP] HDFS에서 파일 전송
HADOOPHDFS에서 파일 전송
HDFS에서 파일을 hadoop 클러스터가 아닌 네트워크에있는 다른 서버의 로컬 파일 시스템으로 전송하려고합니다.
나는 할 수 있었다 :
hadoop fs -copyToLocal <src> <dest>
and then scp/ftp <toMyFileServer>.
데이터가 거대하고, hadoop 게이트웨이 머신의 로컬 파일 시스템상의 제한된 공간 때문에, 나는 이것을 피하고 나의 파일 서버에 직접 데이터를 보내고 싶었다.
이 문제를 해결하는 방법에 대한 몇 가지 지침을 알려주십시오.
해결법
-
==============================
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.가장 간단한 방법은 다음과 같습니다.
가장 간단한 방법은 다음과 같습니다.
ssh <YOUR_HADOOP_GATEWAY> "hdfs dfs -cat <src_in_HDFS> " > <local_dst>
바이너리 파일에서도 작동합니다.
-
==============================
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.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.나는 (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
를 추가하면 로컬 파일에 저장됩니다. 도움이되기를 바랍니다.
제이
from https://stackoverflow.com/questions/12173715/transfer-file-out-from-hdfs by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Apache Spark on YARN : 많은 수의 입력 데이터 파일 (스파크의 여러 입력 파일 결합) (0) | 2019.07.06 |
---|---|
[HADOOP] Hadoop을 실행할 때 OutOfMemoryException을 피하는 방법? (0) | 2019.07.06 |
[HADOOP] 직업 부름의 차이점 (0) | 2019.07.06 |
[HADOOP] 인수를 Hadoop 매퍼로 전달 (0) | 2019.07.06 |
[HADOOP] 현재 실행중인 hadoop 작업의 이름을 얻는 방법? (0) | 2019.07.06 |