YARN 문제를 해결하려고 합니다. 작업이 YARN에 제출되면 필요한 모든 설정과 스크립트가 포함된 새 디렉터리가 생성됩니다. 이 작업을 완료하면 디렉터리가 삭제됩니다.
0~2초 후에 작업이 실패하므로 파일이 너무 빨리 삭제되어 저장할 수 없습니다. 또한 작업을 실행하기 전에는 파일의 정확한 이름을 모르지만(자동 증가 카운터가 있음) 상위 디렉터리를 알고 있으므로 정확한 경로를 추측해 볼 수 있습니다.
어떻게든 이 파일(디렉토리 전체)을 보호하거나 복사하고 싶습니다. 매초 실행되도록 cron을 설정하고 상위 디렉토리를 복사할 수 있을 것 같습니다(파일 크기가 용량을 초과하지 않을지는 모르겠습니다 cp
). 또한 디렉터리의 모든 파일을 읽기 전용 모드(초당)로 변경할 수도 있습니다(그러나 이는 YARN 프로세스를 방해하고 새로운 문제를 일으킬 수 있습니다). 디렉터리에 대한 권한을 변경할 수 없습니다. YARN은 처음에 디렉터리를 생성할 수 없습니다.
더 나은 해결책이 있습니까? (YARN 세부 정보는 중요하지 않지만 누군가 내가 모르는 일부 YARN 기능을 사용하는 방법을 알고 있을 수도 있습니다.)
답변1
당신의 아이디어 중 일부는 작동하지 않을 것입니다.
- Cron은 분 간격으로만 실행됩니다.
- 파일을 읽기 전용으로 설정해도 삭제가 방지되지는 않습니다.
- 디렉토리를 읽기 전용으로 설정하면 삭제가 방지되지만 생성도 허용됩니다.
- 반면에 파일 크기는
cp
용량을 초과하지 않습니다.
가장 좋은 해결책은 임시 파일 삭제를 비활성화하는 방법을 찾는 것입니다.
그래도 문제가 해결되지 않으면 가장 좋은 방법은 파일을 복사하는 것이 아니라 파일을 연결하는 것입니다. 파일이 생성될 디렉터리를 알고 있다면 두 번째 셸에서 해당 디렉터리를 사용하세요.
while true; do
ln sourcedir/* targetdir &> /dev/null
done
완료되면 이 작업을 종료해야 합니다. 동일한 파일 시스템에 있어야 합니다 sourcedir
. targetdir
이렇게 하면 각 파일에 대한 하드 링크가 생성됩니다. 다시 실행하면 대상이 존재하므로 오류 메시지가 표시되며 /dev/null
소스에 있는 파일이 곧 삭제되지 않는 한 모든 파일을 대상 디렉터리에 배치해야 합니다.
편집하다
제한된 수의 중첩 디렉터리의 경우 다음을 사용하세요.
ln sourcedir/* sourcedir/*/* sourcedir/*/*/* targetdir &> /dev/null
모든 중첩 수준에 대해 find를 사용하십시오.
find sourcedir -type f -exec ln --target-directory targetdir {} +