2012-06-30 5 views
29

생성 된 즉시 데이터를 hadoop에 저장하는 셸 스크립트를 작성하고 있습니다. 내 마스터 노드로 ssh 할 수 있고, 그곳의 폴더에 파일을 복사 한 다음 그 파일을 hadoop에 넣을 수있다. 마스터 노드의 로컬 디스크에 파일을 복사하지 않으려는 쉘 명령을 찾고 있습니다. 더 나은 내가 필요한 것을 설명하기 위해, 여기 아래 내가 지금까지 무엇을 찾을 수 있습니다로컬 파일에 복사하지 않고 원격 파일을 hadoop에 넣기

1) 마스터 노드의 로컬 디스크에 파일을 복사 : 이미 설정 SSH 연결 키를 사용하여 한

scp test.txt [email protected]:/folderName/ 

. 따라서 비밀번호를 입력하지 않아도됩니다.

ssh [email protected] "hadoop dfs -put /folderName/test.txt hadoopFolderName/" 

은 내가 무엇을 찾고 있어요 것은 파이프/하나에이 두 단계를 결합에있는 파일의 로컬 복사본을 생략하는 방법입니다 :

2) 원격으로 하둡을 실행하기 위해 ssh를 사용할 수있는 명령을 넣어 masterNode의 로컬 디스크

cat test.txt | ssh [email protected] "hadoop dfs -put - hadoopFoldername/" 

내가 복사 비슷한 트릭을 사용했습니다 :

덕분 즉

, 나는 내가

+0

배관 문제가 해결되었습니다. 그러나 파이프의 성능은 먼저 파일을 마스터 노드의 로컬 디스크에 복사 한 다음 Hadoop에 복사하는 것보다 훨씬 느립니다. 어떤 생각? – reza

답변

35

이 (테스트되지 않은)을 시도 할 수있는 방법으로 파이프를 여러 명령에 원하는 디렉토리 주변 :

tar cf - . | ssh remote "(cd /destination && tar xvf -)" 

이렇게하면 local- tar 리모콘의 입력에 - tar.

+0

아니요, 이것이 작동하지 않습니다. 2 가지 이유 : 1) hadoop dfs -put/dev/stdin이 존재하지 않습니다. 2) 내 파일은 바이너리 형식입니다. 사실 test.txt가 아니라 test.bin입니다 – reza

+2

바이너리는 중요하지 않습니다 -'ssh'는 8 비트 내용을 조작하지 않습니다. '/ dev/stdin' 대신'-'을 시도해보십시오. – sarnold

+0

이 경우, 유일한 문제는 hadoop dfs -put/dev/stdin이 작동하지 않는다는 것입니다.사실, 방금 시도했지만 실패합니다. ( – reza

2

하둡은 몇 가지 REST 인터페이스를 제공합니다. HoopWebHDFS을 확인하십시오. 비 Hadoop 환경에서 파일을 사용하여 파일을 마스터에 복사하지 않고 파일을 복사 할 수 있어야합니다.

+0

WebHDFS 링크가 작동하지 않습니다. – serup

+0

이것은 작동합니다 : https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#File+and+Directory+Operations – Babu

8

데이터를 생성 한 노드는 각 클러스터 노드 (이름 노드와 모든 데이터 노드)에 도달 할 수 있습니다. 당신이 다음 방금 데이터가 생성되는 시스템에서 명령을 이것 저것 집어 넣어 하둡 FS를 실행할 수있는 데이터 연결이있는 경우

(가정 당신은 하둡 바이너리가 너무가 설치되어있는) :

#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/ 
+0

불행하게도, 데이터를 생성 한 노드는 후프 클러스터에 직접 액세스 할 수 없습니다. – reza

+0

최소 하프 설치가 필요한지 아십니까? –

0

(검증되지 않은)

데이터를 작성한 노드가 인터넷에 액세스 할 수 있기 때문에 hadoop 클라이언트 노드 소프트웨어를 설치 한 다음 클러스터에 추가 할 수 있습니다. 일반적인 hadoop fs -put을 수행 한 후 임시 노드를 연결 해제하고 제거하십시오. 그러면 hadoop 시스템은 자동으로 여러분의 파일 블록을 여러분의 hadoop cl 블록으로 복제해야합니다 uster