나는 꽤 큰 텍스트 파일(19Gb, 10억 줄)과 이를 정렬하기 위해 Ubuntu 12.04를 실행하는 상당히 큰 서버(16코어, 64Gb RAM)를 가지고 있습니다.
명령줄 sort
유틸리티(GNU Core Utilities의)를 사용하여 이 파일을 빠르게 정렬하는 가장 좋은 방법은 무엇입니까?
--parallel 15
나는 (코어 하나를 남겨두고) 사용할 수 있다고 믿습니다 .RAM 디스크에 임시 파일을 저장하는 것과 같은 기능을 사용할 수 있습니다 1 , 사용 가능한 메모리를 활용하는 데 사용할 수 -T /run/shm/sortTmp
(그래서 빠릅니다).-S 50G
있으며 임시 파일 사용량을 줄이기 위해 조정할 수 있습니다 --batch-size=15
(여기서 좋은 값이 무엇인지 잘 모르겠습니다...).
고려해야 할 다른 옵션이 있습니까? 좋은 옵션은 무엇입니까 --batch-size
? 고려해야 할 다른 사항이 있나요?
정렬할 때 컴퓨터에서 다른 작업을 실행할 필요가 없으므로 모든 리소스를 사용할 수 있습니다.
1. -S
임시 파일용 램 디스크와 함께 사용하는 것은 좋지 않습니다! sort
RAM 디스크에 쓰고 메모리가 거의 가득 차면 커널이 종료될 수 있습니다.이 댓글)
답변1
아무도 대답하지 않아서 저는 이렇게 했습니다.
sort -T /mnt/tmp --parallel=14 -S 50G myBigFile.txt
어떤 것이 좋은 가치인지, 어쩌면 스마트할지 --batch-size
확신이 서지 않아서 사용하지 않았습니다 .sort
/mnt
대용량 임시 디스크에 설치됩니다(머신은 클라우드의 가상 머신입니다). /tmp
공간이 충분한 디스크라면 생략 가능합니다 -T
. 공간이 충분하고 속도가 매우 빠른 디스크라면 사용하세요.
내 기억이 맞다면 정렬되는 파일의 크기와 동일한 공간이 다시 필요합니다. 기본적으로 파일을 두 개 이상의 청크로 분할합니다. 각 청크는 메모리에서 정렬하여 임시 디스크에 저장한 다음 다음을 수행합니다. 병합 정렬을 통해 최종 출력을 생성합니다.