Linux에서 거대한 목록(130Gb) 정렬

Linux에서 거대한 목록(130Gb) 정렬

sortLinux에서 거대한 목록(130GB)을 만들 려고 합니다 . 그 중 일부는 다음과 같습니다.

@K00188:14:H2LMFBBXX:6:1101:27440:1668 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:30262:1668 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:6501:1686 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:18133:1686 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:21827:1686 1:N:0:0_I_CGATGT

문제는 해당 기간 동안 RAM이 부족하다는 것입니다 sort.

이전 질문에는 몇 가지 해결책(예: sort --parallelPython 스크립트 등)이 있었지만 제 손에는 작동하지 않았습니다.

지속하고 싶지만 sort옵션을 사용할 때 다음 오류 메시지가 나타납니다.--parallel

sort: unrecognized option '--parallel=2'
Try `sort --help' for more information.

큰 목록을 정렬하기 위해 작성된 Python 스크립트가 있다면 시도해 보고 싶습니다.

추천 메뉴가 무엇인가요?

답변1

sort(예를 들어 일부 제거된 구현 제외 busybox)는 제한된 양만 사용하고 해당 제한에 도달하면 임시 파일에 의존하기 때문에 메모리에 의해 제한되지 않습니다.

디스크 공간이 부족할 가능성이 높습니다. 사용 중인 준비 영역에 약 130GB의 여유 디스크 공간이 필요합니다 sort(쓰기 파일 자체를 사용하지 않는 한 결과를 저장하는 데 사용되는 디스크 공간에 추가 sort -o mybigfile mybigfile).

파일 시스템에 공간이 충분하지 않은 경우 여유 디스크 공간이 더 많은 위치 /tmp로 설정합니다 (구현된 일부 옵션도 참조).$TMPDIR-Tsort

TMPDIR=~/tmp sort my-big-file > sorted

필요한 임시 디스크 공간의 양을 줄이기 위해 일부 sort구현에서는 임시 파일을 압축하도록 지시할 수도 있습니다. CPU에서 사용하기 쉬운 압축기(예: lzop회전 디스크의 파일 시스템)를 선택하면 성능이 향상될 수도 있습니다.

TMPDIR=~/tmp sort --compress-program=lzop my-big-file > sorted

답변2

대용량 목록(130GB)을 정렬하려고 합니다.

거대한 텍스트 파일을 한 줄씩 정렬하고 싶습니다.

정렬: 인식할 수 없는 옵션 '--parallel=2'

이것은녹음된최근 GNU coreutils에서 허용되는 옵션입니다. 불행하게도 GNU corutils는 없지만 sort 다른 것이 있습니다. 그래서 컴파일하고 설치하는 것이 좋습니다.최근의 GNU 핵심 도구, 예: coreutils-8.27원천(2017년 여름). 제공된 시스템을 엉망으로 만드는 것을 방지하기 위해 --program-suffix=-my 스크립트 configure를 사용하여 설치할 수 있습니다 .sort-mysort

(루트가 없어도 then configure등을 사용할 수 있습니다 . 그런 다음--prefix=$HOME/pubmake install$HOME/pub/bin/....)

이것이 가능하지 않다면 다음을 사용할 수 있습니다.나뉘다을 누른 다음 각각의 작은 청크를 정렬하고 병합합니다( 사용 sort --merge).

또 다른 가능성은 이 큰 파일을 구문 분석하고 일부 파일에 넣는 작은 Python 스크립트를 작성하는 것입니다.SQLite데이터 베이스.

최신 GNU를 다운로드하여 사용하는 것이 좋습니다.핵심 도구(다른 방법을 사용하면 시간이 더 걸립니다.) 이것이 가장 실용적인 방법입니다. 정렬을 실행하려면 파일 시스템에 충분한 추가 여유 공간(150GB 정도)이 필요할 수 있습니다.

소스에서 GNU 유틸리티를 컴파일한 적이 없다면 다음 단계를 수행하는 것이 좋습니다.

  • 예를 들어, 브라우저에 대한 coreutils 소스 tarball을 사용하거나 구하십시오 wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.27.tar.xz.

  • tar xvf coreutils-8.27.tar.xz (최신 GNU tar를 사용하여) 압축을 푼다. 그렇지 않으면 unzip을 사용한 xz -d coreutils-8.27.tar.xz 다음 unzip을 사용한다.tar xvf coreutils-8.27.tar

  • GNU 유틸리티 설치를 위한 디렉토리 생성mkdir $HOME/gnu/

  • coreutils 소스 디렉터리를 입력하세요.cd coreutils-8.27

  • 컴파일 전 구성:

     ./configure --prefix=$HOME/gnu/ --program-suffix=-my
    

오류 메시지가 나타나면 시스템을 수정해 보거나(예: C 컴파일러와 같은 유틸리티 누락으로 인해) 도움을 요청하세요. 읽다자동 구성그리고구성 스크립트옵션에 대해 알아보세요.

  • 그것을 구축

    make
    
  • 설치하세요 (빌드가 잘되면)

    make install
    

(위의 모든 항목을 실행하는 데 루트 권한이 필요하지 않습니다)

  • 그런 다음 정렬하는 데 사용 됩니다 $HOME/gnu/bin/sort-my($HOME/gnu/bin/간단하게 입력 가능 sort-my)

관련 정보