2011-03-03 1 views
1

'myprog file1 file2'와 같이 파일 이름을 인수로 취하는 이진 실행 파일이 있다고 가정하면 file1에서 읽고 file2에 씁니다. 이진 실행 파일은 stdin을 사용하지 않고 stdout을 방출하지 않습니다. 이 바이너리 실행 파일을 hadoop 스트리밍의 매퍼 또는 감속기로 어떻게 사용할 수 있습니까? 감사!hadoop 스트리밍에서 파일 이름을 인수로 취하는 이진 실행 파일을 사용하는 방법은 무엇입니까?

답변

1

프로그램을 사용하려면 먼저 로컬 디스크에 임시 파일로 데이터를 저장해야합니다. 그런 다음 파일에서 결과를 읽을 수 있습니다.

그러나 이것은 Hadoop을 사용하여 데이터를 처리한다는 목적을 뛰어 넘습니다. 데이터를 로컬 디스크에 복사하고 결과를 Hadoop-land로 다시 읽는 오버 헤드로 인해 성능이 저하됩니다.

stdin 및 stdout을 통해 I/O를 허용하도록 바이너리 실행 파일을 변경하는 것이 좋습니다.

+0

이것은 제가 지금 사용하고있는 방법이며 귀하의 답변에 언급 된 바와 같이 단점이 분명합니다. 더 우아한 방법이 있습니까? 디스크에 임시 파일을 사용하는 대신 stdin과 stdout을 파일처럼 감쌀 수 있습니까?/dev/stdin 및/dev/stdout을 사용하여 시도했지만 작동하지 않습니다. 바이너리 파일은 나에 의해 만들어지지 않으며 변경할 수 없습니다. – opmn