이번 포스팅에서는 GNU Parallel이 무엇인지, 그리고 이를 어떻게 사용하는지에 대해 알아보겠습니다. 특히, 병렬 처리가 필요한 작업에서 매우 유용하게 쓰일 수 있는 이 도구의 기능과 예시를 중심으로 설명하겠습니다.
GNU Parallel이란?
GNU Parallel은 많은 작업을 동시에 실행하거나, 여러 파일, 명령어, 데이터를 병렬로 처리할 수 있게 해주는 명령어 기반의 도구입니다. 대규모 데이터 처리, 반복적인 명령어 실행 등에서 CPU와 시스템 자원을 최대한 활용하여 작업을 더 빠르게 처리할 수 있게 도와줍니다.
주요 기능
- 병렬 처리: 여러 개의 작업을 동시에 실행할 수 있습니다.
- 동적 자원 관리: 시스템 자원(CPU, 메모리 등)에 따라 병렬 작업의 수를 조정할 수 있습니다.
- 다양한 입력 방식: 파일, 표준 입력, 명령어 출력 등 다양한 방식으로 입력을 받을 수 있습니다.
- 복구 기능: 작업이 중단된 경우, 마지막에 실행된 위치부터 작업을 재개할 수 있습니다.
GNU Parallel 설치 방법
GNU Parallel은 대부분의 배포판에서 기본적으로 설치되어 있지 않으므로, 다음 명령어를 통해 설치해야 합니다.
Ubuntu
sudo apt-get install parallel
macOS (Homebrew 사용 시)
brew install parallel
설치 후 parallel 명령어를 터미널에서 사용할 수 있습니다.
기본 사용법
GNU Parallel의 기본 구문은 아래와 같습니다:
parallel [옵션] 명령어 ::: 입력값1 입력값2 입력값3 ...
- 명령어: 병렬로 실행할 명령어입니다.
- :::: 뒤에 오는 값들은 각각의 작업에 대한 입력값입니다. 이 값들을 기준으로 병렬로 작업이 수행됩니다.
간단한 예시
parallel echo ::: Hello World GNU Parallel
이 명령어는 echo 명령어를 각각 "Hello", "World", "GNU", "Parallel"에 대해 병렬로 실행하게 됩니다.
출력 결과:
Hello
World
GNU
Parallel
실용적인 예시
1. 여러 파일에 대해 병렬로 명령어 실행하기
다음은 여러 파일에 대해 병렬로 작업을 수행하는 예시입니다. 예를 들어, 각각의 텍스트 파일에 대해 wc -l 명령어로 파일의 줄 수를 계산하고 싶을 때 사용할 수 있습니다.
parallel wc -l ::: file1.txt file2.txt file3.txt
이 명령어는 file1.txt, file2.txt, file3.txt에 대해 각각의 파일의 줄 수를 계산하는 작업을 병렬로 처리합니다.
2. 여러 디렉토리에 대해 스크립트 실행하기
디렉토리 내에 여러 하위 디렉토리가 있을 때, 각 디렉토리에 대해 특정 스크립트를 병렬로 실행할 수 있습니다.
ls -d */ | parallel -j 4 /bin/bash run.sh {}
- -j 4: 동시에 4개의 작업을 병렬로 실행합니다.
- ls -d */: 현재 디렉토리 내 하위 디렉토리를 나열합니다.
- run.sh {}: 각 디렉토리(여기서 {}는 병렬 작업에 대한 인수로, parallel이 알아서 각각의 디렉토리 이름으로 대체합니다)에 대해 run.sh 스크립트를 실행합니다.
3. 원격 서버에서 병렬 작업 실행
GNU Parallel은 원격 서버에서도 병렬 작업을 실행할 수 있습니다. 여러 서버에서 명령어를 동시에 실행하고 싶을 때 유용합니다.
parallel -S server1,server2,server3 echo Hello ::: World
- -S server1,server2,server3: 명령을 실행할 서버 목록을 지정합니다.
- 각 서버에서 동시에 echo Hello 명령을 실행하고, 그 결과로 "World"를 출력합니다.
4. 대용량 파일 다운로드
여러 개의 파일을 병렬로 다운로드할 수 있습니다. 예를 들어, 아래는 세 개의 파일을 동시에 다운로드하는 예시입니다.
parallel wget ::: http://example.com/file1 http://example.com/file2 http://example.com/file3
- wget 명령을 세 개의 파일에 대해 동시에 실행하여 병렬로 다운로드합니다.
고급 사용법
1. CPU 코어 수에 맞춰 작업 자동 병렬 처리
GNU Parallel은 시스템의 CPU 코어 수에 맞춰 자동으로 작업의 수를 조정할 수 있습니다. 이를 통해 시스템 리소스를 최적으로 활용할 수 있습니다.
parallel -j+0 echo ::: task1 task2 task3 task4
- -j+0: CPU 코어 수에 맞춰 병렬 작업의 개수를 조정합니다. 예를 들어, 4코어 CPU에서는 4개의 작업을 동시에 처리합니다.
2. 작업 출력 관리
각 작업의 출력 결과를 별도의 파일로 저장할 수 있습니다. 아래는 각각의 작업 결과를 output1.log, output2.log 형식으로 저장하는 예시입니다.
parallel --results output echo ::: task1 task2 task3
- --results output: 작업 결과를 output 디렉토리 하위에 로그로 저장합니다.
3. 중단된 작업 복구
대규모 작업을 수행하다가 중단되었을 경우, --resume 옵션을 사용하여 작업을 이어서 실행할 수 있습니다.
parallel --resume echo ::: task1 task2 task3 task4
- 중단된 위치부터 작업을 재개합니다.
결론
GNU Parallel은 대규모 데이터 처리, 반복 작업, 시스템 자원의 효율적 사용이 필요한 환경에서 매우 유용한 도구입니다. 간단한 사용법으로도 병렬 작업을 쉽게 처리할 수 있으며, 복잡한 작업이나 고급 기능이 필요한 경우에도 매우 강력한 옵션을 제공합니다. 특히, 시스템 리소스를 최적화하고, 작업의 복구와 관리 기능을 지원하기 때문에 장기 작업에서도 신뢰할 수 있습니다.
필요에 따라 병렬 작업을 효율적으로 처리하고 싶다면, GNU Parallel을 적극적으로 활용해 보시기 바랍니다!
'Computer Science > linux' 카테고리의 다른 글
작업량 기반 노드 배정과 다양한 스케러 도구 비교: 컨테이너와 HPC를 모두 아우르는 통합 관리 전략 (2) | 2024.10.14 |
---|---|
작업량 기반 노드 배정 설명: 공용 노드와 작업량에 기반한 개인 또는 프로젝트별 노드 배정 전략 (0) | 2024.10.14 |
AWS에서 EKS를 사용한 파이프라인 구축 (2) | 2024.10.01 |
프롬프트 스트링 (1) | 2024.09.24 |
Argo workflow 설치와 예제 (0) | 2024.09.22 |