대용량 CSV 파일(90GB)을 정렬하는 중, 디스크 할당량이 초과되었습니다.

대용량 CSV 파일(90GB)을 정렬하는 중, 디스크 할당량이 초과되었습니다.

이것이 내가 지금 하는 일이다.

sort -T /some_dir/ --parallel=4 -uo file_sort.csv -k 1,3 file_unsort.csv

파일 크기가 90GB인데 이 오류 메시지가 나타납니다.

sort: close failed: /some_dir/sortmdWWn4: Disk quota exceeded

이전에는 -T 옵션을 사용하지 않았는데, 분명히 tmp 디렉토리가 이를 처리할 만큼 크지 않았습니다. 현재 디렉토리에는 약 200GB의 여유 공간이 있습니다. 임시 파일을 정렬하는 것만으로는 충분하지 않습니까?

병렬 옵션이 상황에 영향을 미치는지 모르겠습니다.

답변1

문제는 디스크 할당량을 설정한 것 같은데 사용자가 너무 많은 공간을 차지할 권한이 없다는 것입니다 /some_dir. 아니요, 이 --parallel옵션은 이에 영향을 미치지 않습니다.

해결 방법으로 파일을 더 작은 파일로 분할하고 각 파일을 별도로 정렬한 다음 다시 단일 파일로 병합할 수 있습니다.

## split the file into 100M pieces named fileChunkNNNN
split -b100M file fileChunk
## Sort each of the pieces and delete the unsorted one
for f in fileChunk*; do sort "$f" > "$f".sorted && rm "$f"; done
## merge the sorted files    
sort -T /some_dir/ --parallel=4 -muo file_sort.csv -k 1,3 fileChunk*.sorted

마법은 -mGNU 정렬(from ) 옵션 입니다 info sort.

‘-m’
‘--merge’
    Merge the given files by sorting them as a group.  Each input file
    must always be individually sorted.  It always works to sort
    instead of merge; merging is provided because it is faster, in the
    case where it works.

이를 위해서는 모든 부품을 저장하기 위해 90G 파일에 대해 약 180G의 여유 공간을 제공해야 합니다. 그러나 실제 정렬은 1억 개의 청크로만 정렬하므로 많은 공간을 차지하지 않습니다.

관련 정보