파일 시스템 공통 구성
파일 시스템 공통 구성 (Common Configurations)
Apache Flink는 모든 파일 시스템 구현에서 공통으로 동작하는 몇 가지 표준 구성 설정을 제공합니다. 이러한 설정은 기본 파일 시스템 지정, 연결 수 제한, 파일 시스템 팩토리 우선순위 등을 다룹니다. 파일 시스템을 안정적으로 운영하기 위해서는 이러한 공통 설정을 이해하는 것이 중요합니다.
출처: 문서
본문
기본 파일 시스템 (Default File System)
파일 경로가 파일 시스템의 scheme(및 authority)을 명시적으로 지정하지 않으면 기본 scheme(및 authority)이 사용됩니다.
fs.default-scheme: <default-fs>
예를 들어 기본 파일 시스템이 fs.default-scheme: hdfs://localhost:9000/으로 구성된 경우, /user/hugo/in.txt라는 파일 경로는 hdfs://localhost:9000/user/hugo/in.txt로 해석됩니다.
연결 수 제한 (Connection limiting)
파일 시스템이 동시에 열 수 있는 총 연결 수를 제한할 수 있습니다. 이는 파일 시스템이 많은 수의 동시 읽기/쓰기 또는 동시 열린 연결을 처리하지 못할 때 유용합니다.
예를 들어 RPC 핸들러가 적은 소규모 HDFS 클러스터는 체크포인트 중에 많은 연결을 맺으려는 대규모 Flink 작업으로 인해 과부하될 수 있습니다.
특정 파일 시스템의 연결을 제한하려면 Flink 구성에 다음 항목을 추가합니다. 제한할 파일 시스템은 scheme으로 식별됩니다.
fs.<scheme>.limit.total: (number, 0/-1 mean no limit)
fs.<scheme>.limit.input: (number, 0/-1 mean no limit)
fs.<scheme>.limit.output: (number, 0/-1 mean no limit)
fs.<scheme>.limit.timeout: (milliseconds, 0 means infinite)
fs.<scheme>.limit.stream-timeout: (milliseconds, 0 means infinite)
입력/출력 연결(스트림) 수를 각각 제한할 수 있고(fs.<scheme>.limit.input와 fs.<scheme>.limit.output), 동시 스트림의 총 개수도 제한할 수 있습니다(fs.<scheme>.limit.total). 파일 시스템이 더 많은 스트림을 열려고 하면 일부 스트림이 닫힐 때까지 작업이 차단됩니다. 스트림 열기가 fs.<scheme>.limit.timeout보다 오래 걸리면 스트림 열기가 실패합니다.
비활성 스트림이 전체 풀을 차지해 새 연결이 열리지 못하는 것을 방지하기 위해 비활성 타임아웃을 추가할 수 있습니다. 이는 해당 시간 동안 바이트를 읽거나 쓰지 않으면 스트림을 강제로 닫는 fs.<scheme>.limit.stream-timeout 설정입니다.
제한은 TaskManager/파일 시스템 단위로 적용됩니다. 파일 시스템은 scheme과 authority별로 생성되므로 서로 다른 authority는 독립적인 연결 풀을 가집니다. 예를 들어 hdfs://myhdfs:50010/와 hdfs://anotherhdfs:4399/는 별도의 풀을 갖습니다.
파일 시스템 팩토리 우선순위 (File System Factory Priority)
동일한 URI scheme에 대해 여러 FileSystemFactory 구현이 사용 가능한 경우(예: 파일 시스템 백엔드 간 마이그레이션 중), Flink는 우선순위 메커니즘을 사용해 충돌을 해결합니다. 우선순위가 가장 높은 팩토리가 선택됩니다.
각 팩토리는 getPriority() 메서드로 기본 우선순위를 선언합니다(기본값 0). 구성으로 모든 팩토리의 우선순위를 오버라이드할 수 있습니다.
fs.<scheme>.priority.<factoryClassName>: <integer>
값이 클수록 높은 우선순위를 의미합니다. 구성 키가 설정되지 않으면 팩토리가 선언한 우선순위가 사용됩니다.
두 팩토리가 동일한 우선순위를 가지게 되면 클래스로딩 순서에 따라 승자가 결정되는데, 이는 비결정적(non-deterministic)입니다. 이 경우 Flink는 경고를 로깅합니다. 결정적인 동작을 보장하려면 명시적 우선순위를 설정하세요.
예시: 두 개의 S3 팩토리 구현이 classpath에 있다고 가정해 봅시다. Presto 기반 팩토리보다(기본 우선순위는 0) Hadoop 기반 팩토리를 선택하려면 다음과 같이 설정합니다.
fs.s3.priority.org.apache.flink.fs.s3.hadoop.S3FileSystemFactory: 1