HDFS 쿼터 가이드
HDFS 쿼터 가이드 (Quotas Guide)
관리자가 개별 디렉터리에 대해 이름(name) 쿼터와 공간(space) 쿼터를 설정하는 방법을 설명하는 문서예요. 이름 쿼터와 공간 쿼터는 독립적으로 동작하지만, 관리와 구현은 밀접하게 평행합니다.
출처: 문서
본문
개요 (Overview)
HDFS는 관리자가 개별 디렉터리에 대해 사용되는 이름(names) 수와 공간(space) 크기에 쿼터를 설정할 수 있게 해 줍니다. 이름 쿼터와 공간 쿼터는 독립적으로 동작하지만, 두 유형의 쿼터 관리와 구현은 밀접하게 평행합니다.
이름 쿼터 (Name Quotas)
이름 쿼터는 해당 디렉터리를 루트로 하는 트리의 파일·디렉터리 이름 수에 대한 하드 한도입니다. 쿼터를 초과하면 파일·디렉터리 생성이 실패해요. 쿼터는 이름이 바뀐 디렉터리에 따라 붙어 다니며, 이름 바꾸기가 쿼터 위반을 초래하면 그 연산은 실패합니다. 디렉터리가 새 쿼터를 위반하더라도 쿼터 설정 시도는 여전히 성공합니다. 새로 만든 디렉터리에는 연결된 쿼터가 없어요. 가장 큰 쿼터는 Long.Max_Value입니다. 쿼터가 1이면 디렉터리가 비어 있도록 강제합니다. (네, 디렉터리 자신도 자기 쿼터에 포함됩니다!)
쿼터는 fsimage와 함께 영속됩니다. 시작 시 fsimage가 즉시 쿼터를 위반하고 있으면(예: fsimage가 몰래 수정된 경우) 각 위반마다 경고가 출력됩니다. 쿼터를 설정하거나 제거하면 저널 항목이 만들어집니다.
공간 쿼터 (Space Quotas)
공간 쿼터는 해당 디렉터리를 루트로 하는 트리의 파일이 사용하는 바이트 수에 대한 하드 한도입니다. 쿼터가 전체 블록 쓰기를 허용하지 않으면 블록 할당이 실패해요. 블록의 각 복제본은 쿼터에 포함됩니다. 쿼터는 이름이 바뀐 디렉터리에 따라 붙어 다니며, 이름 바꾸기가 쿼터 위반을 초래하면 그 연산은 실패합니다. 새로 만든 디렉터리에는 연결된 쿼터가 없고, 가장 큰 쿼터는 Long.Max_Value입니다. 쿼터가 0이어도 파일 생성은 허용되지만 파일에 블록을 추가할 수는 없어요. 디렉터리는 호스트 파일 시스템 공간을 사용하지 않으므로 공간 쿼터에 포함되지 않습니다. 파일 메타데이터를 저장하는 데 사용된 호스트 파일 시스템 공간도 쿼터에 포함되지 않아요. 쿼터는 파일의 의도된 복제 팩터로 부과됩니다. 파일의 복제 팩터를 바꾸면 쿼터가 적립되거나 차감됩니다.
쿼터는 fsimage와 함께 영속됩니다. 시작 시 fsimage가 즉시 쿼터를 위반하고 있으면 각 위반마다 경고가 출력됩니다. 쿼터를 설정하거나 제거하면 저널 항목이 만들어집니다.
저장소 유형 쿼터 (Storage Type Quotas)
저장소 유형 쿼터는 디렉터리를 루트로 하는 트리의 파일이 특정 저장소 유형(SSD, DISK, ARCHIVE, NVDIMM)을 사용하는 양에 대한 하드 한도입니다. 공간 쿼터와 여러 면에서 비슷하지만, 클러스터 저장 공간 사용에 대한 세밀한 제어를 제공해요. 디렉터리에 저장소 유형 쿼터를 설정하려면, 저장소 정책에 따라 파일이 서로 다른 저장소 유형에 저장되도록 디렉터리에 저장소 정책을 구성해야 합니다. 자세한 내용은 HDFS 저장소 정책 문서를 참고하세요.
저장소 유형 쿼터는 공간 쿼터와 이름 쿼터와 결합해 클러스터 저장 공간 사용을 효율적으로 관리할 수 있어요. 예를 들어:
- 저장소 정책이 구성된 디렉터리는 관리자가 SSD 같은 자원 제약이 있는 저장소 유형에 대해 저장소 유형 쿼터를 설정하고, 다른 저장소 유형 쿼터와 전체 공간 쿼터는 덜 제한적인 값이나 기본 무제한으로 둡니다. HDFS는 대상 저장소 유형 쿼터와 전체 공간 쿼터 양쪽에서 쿼터를 차감해요.
- 저장소 정책이 구성되지 않은 디렉터리에는 저장소 유형 쿼터를 설정하지 않는 것이 좋습니다. 특정 저장소 유형이 사용 불가(또는 저장소 유형 정보가 제대로 구성되지 않은 상태로 사용 가능)해도 저장소 유형 쿼터를 설정할 수는 있어요. 다만 이 경우 저장소 유형 정보가 없거나 부정확해서 저장소 유형 쿼터 적용이 어려우므로 전체 공간 쿼터를 권장합니다.
- DISK가 주 저장 매체가 아닌 경우(예: 주로 ARCHIVE 저장소인 클러스터)가 아니면 DISK의 저장소 유형 쿼터는 용도가 제한적입니다.
관리 명령 (Administrative Commands)
쿼터는 관리자만 사용할 수 있는 명령 집합으로 관리합니다.
hdfs dfsadmin -setQuota <N> <directory>...<directory>
각 디렉터리의 이름 쿼터를 N으로 설정. 각 디렉터리에 대해 최선을 다하며, N이 양의 long 정수가 아니거나, 디렉터리가 존재하지 않거나 파일이거나, 디렉터리가 즉시 새 쿼터를 초과하면 오류가 보고됩니다.
hdfs dfsadmin -clrQuota <directory>...<directory>
각 디렉터리의 이름 쿼터를 제거. 각 디렉터리에 대해 최선을 다하며, 디렉터리가 존재하지 않거나 파일이면 오류가 보고됩니다. 디렉터리에 쿼터가 없어도 오류는 아닙니다.
hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>
각 디렉터리의 공간 쿼터를 N바이트로 설정. 디렉터리 트리 아래 모든 파일 총 크기에 대한 하드 한도입니다. 공간 쿼터는 복제도 고려해서, 복제 3의 1GB 데이터는 3GB 쿼터를 소모합니다. 편의상 N은 이진 접두어로도 지정할 수 있어요. 예를 들어 50g는 50기가바이트, 2t는 2테라바이트입니다. 각 디렉터리에 최선을 다하며, N이 0도 양의 정수도 아니거나, 디렉터리가 존재하지 않거나 파일이거나, 디렉터리가 즉시 새 쿼터를 초과하면 오류가 보고됩니다.
hdfs dfsadmin -clrSpaceQuota <directory>...<directory>
각 디렉터리의 공간 쿼터를 제거. 각 디렉터리에 최선을 다하며, 디렉터리가 존재하지 않거나 파일이면 오류가 보고됩니다. 디렉터리에 쿼터가 없어도 오류는 아닙니다.
hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory>
각 디렉터리의 저장소 유형 쿼터를 지정된 저장소 유형 N바이트로 설정. 디렉터리 트리 아래 모든 파일의 총 저장소 유형 사용에 대한 하드 한도입니다. 저장소 유형 쿼터 사용량은 저장소 정책에 기반한 의도된 사용량을 반영해요. 예를 들어 복제 3에 ALL_SSD 저장소 정책인 1GB 데이터는 3GB의 SSD 쿼터를 소모합니다. 편의상 N은 이진 접두어로도 지정할 수 있어요(50g, 2t 등). 각 디렉터리에 최선을 다하며, N이 0도 양의 정수도 아니거나, 디렉터리가 존재하지 않거나 파일이거나, 디렉터리가 즉시 새 쿼터를 초과하면 오류가 보고됩니다. -storageType 옵션을 지정하면 저장소 유형별 쿼터가 설정됩니다. 사용 가능한 저장소 유형은 DISK, SSD, ARCHIVE, PROVIDED, NVDIMM입니다.
hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory>
각 디렉터리에 지정된 저장소 유형 쿼터를 제거. 각 디렉터리에 최선을 다하며, 디렉터리가 존재하지 않거나 파일이면 오류가 보고됩니다. 지정된 저장소 유형에 대한 저장소 유형 쿼터가 없어도 오류는 아닙니다. -storageType 옵션을 지정하면 저장소 유형별 쿼터가 지워집니다. 사용 가능한 저장소 유형은 DISK, SSD, ARCHIVE, PROVIDED, NVDIMM입니다.
보고 명령 (Reporting Command)
HDFS 셸의 count 명령 확장은 쿼터 값과 현재 사용 중인 이름·바이트 수를 보고합니다.
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory>
-q 옵션과 함께, 각 디렉터리에 설정된 이름 쿼터 값, 남은 사용 가능 이름 쿼터, 설정된 공간 쿼터 값, 남은 사용 가능 공간 쿼터를 보고합니다. 디렉터리에 쿼터가 설정되지 않았으면 보고된 값은 none과 inf입니다. -h 옵션은 크기를 사람이 읽을 수 있는 형식으로 보여주고, -v 옵션은 헤더 줄을 표시하며, -t 옵션은 각 디렉터리의 저장소 유형별 쿼터와 남은 쿼터를 표시합니다. -t 옵션 뒤에 특정 저장소 유형을 주면 그 유형의 쿼터와 남은 쿼터만 표시됩니다. 그렇지 않으면 쿼터를 지원하는 모든 저장소 유형의 쿼터와 남은 쿼터가 표시돼요.
더 알아보기 (Learn more)
- 원문: 문서