클러스터에서 Unix 셸 명령 (예 : awk 1 라이너)을 병렬로 실행하고 (1 단계) 결과를 중앙 노드로 다시 수집합니다 (2 단계).셸 명령을 사용하여 MapReduce를 구현하려면 어떻게해야합니까?
업데이트 : 방금 발견했습니다 http://blog.last.fm/2009/04/06/mapreduce-bash-script 정확하게 필요한 것 같습니다.
클러스터에서 Unix 셸 명령 (예 : awk 1 라이너)을 병렬로 실행하고 (1 단계) 결과를 중앙 노드로 다시 수집합니다 (2 단계).셸 명령을 사용하여 MapReduce를 구현하려면 어떻게해야합니까?
업데이트 : 방금 발견했습니다 http://blog.last.fm/2009/04/06/mapreduce-bash-script 정확하게 필요한 것 같습니다.
당신이하려는 일은 많은 원격 명령을 끄는 것 뿐이라면 perl을 사용할 수 있습니다. ssh 명령을 "열어"결과를 다시 perl로 파이프 할 수 있습니다. (암호없이 액세스 할 수 있도록 키를 설정해야합니다.)
open (REMOTE, "ssh [email protected] \"myScript\"|");
while (<REMOTE>)
{
print $_;
}
기계 이름을 사용하여 루프를 만들고 싶지 않을 것입니다. 그 후에 파일 핸들을 논 블로킹 (non-blocking) 읽기 만하면 데이터를 사용할 수있게 되 돌린다.
parallel은 중앙 노드에 설치할 수 있으며 여러 컴퓨터에서 명령을 실행하는 데 사용할 수 있습니다.
아래 예제에서는 원격 호스트에서 명령을 실행하기 위해 여러 개의 ssh 연결이 사용됩니다. (-j는 중앙 노드에서 동시에 실행할 작업 수입니다). 그런 다음 결과를 "축소"단계를 수행하는 명령으로 파이프 할 수 있습니다. (이 예제에서는 uniq와 정렬).
병렬 -j 50 SSH {} "LS":::이 host1 host2의 hostn | 정렬 |
이 예는 "열쇠 SSH 로그인을"가정 -c UNIQ는 중앙 노드 클러스터에있는 모든 기계 사이에 설정되었습니다.
원격으로 "ls"인 복잡한 명령을 실행할 때 문자를 올바르게 이스케이프 처리하는 것이 힘들 수 있습니다. 가끔 이스케이프 문자를 이스케이프 처리해야합니다. bashreduce이라고 말하면 간단해질 수 있습니다.