HDFS의 확장 속성

HDFS의 확장 속성 (Extended Attributes)

확장 속성(줄여서 xattrs)은 사용자 애플리케이션이 파일이나 디렉터리에 추가 메타데이터를 연결할 수 있게 하는 파일시스템 기능입니다. 파일 권한이나 수정 시간 같은 시스템 레벨 inode 메타데이터와 달리, 확장 속성은 시스템이 해석하지 않고 애플리케이션이 inode에 대한 추가 정보를 저장하는 데 사용합니다. 예를 들어 확장 속성은 평문 문서의 문자 인코딩을 지정하는 데 사용될 수 있습니다.

출처: Extended Attributes in HDFS

HDFS 확장 속성

HDFS의 확장 속성은 Linux의 확장 속성(attr(5)의 Linux manpage 참고)을 모델로 합니다. 확장 속성은 문자열 이름과 이진 값으로 이루어진 이름-값 쌍입니다. xattr 이름은 반드시 네임스페이스로 접두사가 붙어야 합니다. 예를 들어 user 네임스페이스의 myXattr라는 xattr은 user.myXattr로 지정됩니다. 단일 inode에 여러 xattr을 연결할 수 있습니다.

네임스페이스와 권한

HDFS에는 user, trusted, system, security, raw라는 다섯 가지 유효한 네임스페이스가 있습니다. 각 네임스페이스는 서로 다른 접근 제한을 가집니다.

user 네임스페이스는 클라이언트 애플리케이션이 일반적으로 사용하는 네임스페이스입니다. user 네임스페이스의 확장 속성에 대한 접근은 해당 파일 권한에 의해 제어됩니다.

trusted 네임스페이스는 HDFS 슈퍼유저만 사용할 수 있습니다.

system 네임스페이스는 내부 HDFS 사용을 위해 예약되어 있습니다. 이 네임스페이스는 사용자 공간 메서드를 통해 접근할 수 없으며, 내부 HDFS 기능을 구현하기 위해 예약되어 있습니다.

security 네임스페이스는 내부 HDFS 사용을 위해 예약되어 있습니다. 이 네임스페이스는 일반적으로 사용자 공간 메서드를 통해 접근할 수 없습니다. security의 특별한 용도 중 하나는 security.hdfs.unreadable.by.superuser 확장 속성입니다. 이 xattr은 파일에만 설정할 수 있으며, 슈퍼유저가 파일 내용을 읽는 것을 방지합니다. 슈퍼유저는 여전히 소유자, 권한 등 파일 메타데이터를 읽고 수정할 수 있습니다. 이 xattr은 일반 파일시스템 권한을 가정할 때 어떤 사용자든 설정하고 접근할 수 있습니다. 이 xattr은 또한 한 번만 쓸 수 있으며(write-once), 설정되면 제거할 수 없습니다. 이 xattr은 값을 설정하는 것을 허용하지 않습니다.

raw 네임스페이스는 때로 노출되어야 하는 내부 시스템 속성을 위해 예약되어 있습니다. system 네임스페이스 속성처럼 /.reserved/raw HDFS 디렉터리 계층의 파일이나 디렉터리에서 getXAttr/getXAttrs가 호출될 때를 제외하고는 사용자에게 보이지 않습니다. 이러한 속성은 슈퍼유저만 접근할 수 있습니다. raw 네임스페이스 확장 속성이 사용되는 예는 distcp 유틸리티입니다. 암호화 영역 메타데이터는 raw.* 확장 속성에 저장되므로, 관리자가 소스와 대상에서 /.reserved/raw 경로 이름을 사용하는 한 암호화 영역의 암호화된 파일이 투명하게 복사됩니다.

확장 속성과 상호작용

Hadoop 셸은 hadoop fs -getfattr와 hadoop fs -setfattr를 통해 확장 속성과의 상호작용을 지원합니다. 이 명령들은 Linux의 getfattr(1)과 setfattr(1) 명령을 본뜬 것입니다.

getfattr

hadoop fs -getfattr [-R] -n name | -d [-e en] <path>

파일 또는 디렉터리의 확장 속성 이름과 값(있는 경우)을 표시합니다.

옵션 설명
-R 모든 파일과 디렉터리의 속성을 재귀적으로 나열합니다.
-n name 명명된 확장 속성 값을 덤프합니다.
-d pathname과 연결된 모든 확장 속성 값을 덤프합니다.
-e <encoding> 값을 검색한 후 인코딩합니다. 유효한 인코딩은 "text", "hex", "base64"입니다. 텍스트 문자열로 인코딩된 값은 큰따옴표(")로 묶이고, 16진수와 base64로 인코딩된 값은 각각 0x와 0s로 접두사가 붙습니다.
<path> 파일 또는 디렉터리.

setfattr

hadoop fs -setfattr -n name [-v value] | -x name <path>

파일 또는 디렉터리에 확장 속성 이름과 값을 설정합니다.

옵션 설명
-n name 확장 속성 이름.
-v value 확장 속성 값. 값에는 세 가지 인코딩 방법이 있습니다. 인자가 큰따옴표로 묶이면 값은 따옴표 안의 문자열입니다. 인자가 0x 또는 0X로 접두사가 붙으면 16진수로 받습니다. 인자가 0s 또는 0S로 시작하면 base64 인코딩으로 받습니다.
-x name 확장 속성을 제거합니다.
<path> 파일 또는 디렉터리.

설정 옵션

HDFS는 추가 설정 없이 기본적으로 확장 속성을 지원합니다. xattr은 inode의 디스크 및 메모리 공간 소비를 증가시키므로, 관리자는 inode당 xattr 수와 xattr 크기를 제한하는 옵션에 관심이 있을 수 있습니다.

dfs.namenode.xattrs.enabled

NameNode에서 확장 속성 지원이 활성화되어 있는지 여부. 기본적으로 확장 속성은 활성화되어 있습니다.

dfs.namenode.fs-limits.max-xattrs-per-inode

inode당 최대 확장 속성 수. 기본적으로 이 제한은 32입니다.

dfs.namenode.fs-limits.max-xattr-size

확장 속성의 이름과 값의 최대 결합 크기(바이트). 기본적으로 이 제한은 16384바이트입니다.

더 알아보기 (Learn more)