HDFS 파일시스템 지원

HDFS 파일시스템 지원 (HDFS file system support)

Trino는 Delta Lake, Hive, Hudi, Iceberg 커넥터를 사용하는 카탈로그로 Hadoop Distributed File System(HDFS)에 접근하는 것을 지원해요. Apache Hadoop HDFS 2.x와 3.x가 지원돼요.

출처: 문서

본문

Trino는 Delta Lake, Hive, Hudi, Iceberg 커넥터를 사용하는 카탈로그로 Hadoop Distributed File System(HDFS)에 접근하는 것을 지원해요.

HDFS 지원은 기본적으로 활성화되어 있지 않지만, 카탈로그 구성 파일에 fs.hadoop.enabled 프로퍼티를 true로 설정해 활성화할 수 있어요. Apache Hadoop HDFS 2.x와 3.x가 지원돼요.

일반 구성 (General configuration)

HDFS 지원의 일반적인 측면을 구성하려면 다음 프로퍼티를 사용해요.

프로퍼티 설명
fs.hadoop.enabled HDFS 접근 지원을 활성화해요. 기본값은 false. true로 설정하면 HDFS를 사용하고 다른 모든 프로퍼티를 활성화해요.
hive.config.resources 선택적, HDFS 구성 파일의 쉼표로 구분된 목록. 이 파일들은 Trino가 실행되는 머신에 존재해야 해요. 기본 설정에서 Trino는 HDFS 클라이언트를 자동으로 구성하며 구성 파일이 필요하지 않아요. Federated HDFS나 NameNode 고가용성(high availability)을 사용하는 등 일부 경우에는 HDFS XML 구성 파일에 추가 HDFS 클라이언트 옵션을 지정하고 이 파라미터로 참조해야 할 필요가 있어요.
hive.config.resources=/etc/hadoop/conf/core-site.xml
설정에 필요한 경우에만 추가 구성 파일을 지정하고, 필요한 최소 프로퍼티 집합만 갖도록 구성 파일을 줄여야 해요. 추가 프로퍼티는 문제를 일으킬 수 있어요.
hive.fs.new-directory-permissions 스키마와 테이블을 위해 생성되는 새 디렉토리에 설정되는 권한을 제어해요. 값은 skip 또는 앞에 0이 붙은 8진수여야 해요. skip으로 설정하면 새로 생성된 디렉토리의 권한이 Trino에 의해 설정되지 않아요. 기본값은 0777.
hive.dfs.verify-checksum 파일 체크섬을 검증해야 하는지 여부를 결정하는 플래그. 기본값은 false.
hive.dfs.ipc-ping-interval Trino에서 HDFS로의 IPC ping 사이의 시간. 기본값은 10s.
hive.dfs-timeout HDFS 접근 동작의 타임아웃 시간. 기본값은 60s.
hive.dfs.connect.timeout HDFS 연결 동작의 타임아웃 시간. 기본값은 500ms.
hive.dfs.connect.max-retries HDFS 연결 시도의 최대 재시도 횟수. 기본값은 5.
hive.dfs.key-provider.cache-ttl 키 제공자(key provider)의 캐싱 시간. 기본값은 30min.
hive.dfs.domain-socket-path DataNode용 UNIX 도메인 소켓의 경로. 경로는 각 노드에 존재해야 해요. 예: /var/lib/hadoop-hdfs/dn_socket.
hive.hdfs.socks-proxy HDFS 접근에 사용할 SOCKS 프록시의 URL. 예: hdfs-master:1180.
hive.hdfs.wire-encryption.enabled HDFS wire encryption을 활성화해요. HDFS wire encryption을 사용하는 Kerberos화된 Hadoop 클러스터에서, Trino가 HDFS에 접근할 수 있게 하려면 true로 설정해야 해요. wire encryption을 사용하면 쿼리 실행 성능에 영향을 줄 수 있어요. 기본값은 false.
hive.fs.cache.max-size HDFS 캐시에 캐시된 파일시스템 객체의 최대 수. 기본값은 1000.
hive.dfs.replication HDFS 복제 계수를 설정하는 정수 값. 기본적으로 값이 설정되지 않아요.

보안 (Security)

HDFS 지원에는 사용자 가장(impersonation)과 Kerberos 인증 기능이 포함돼요. 다음 프로퍼티를 사용할 수 있어요.

프로퍼티 설명
hive.hdfs.authentication.type 인증 없음(NONE) 또는 Kerberos 인증(KERBEROS)을 사용하도록 구성해요. 기본값은 NONE.
hive.hdfs.impersonation.enabled HDFS 최종 사용자 가장을 활성화해요. 기본값은 false.
hive.hdfs.trino.principal Trino가 HDFS에 연결할 때 사용하는 Kerberos principal. 예: trino-hdfs-superuser/... 또는 trino-hdfs-superuser/....
이 프로퍼티 값에는 _HOST 플레이스홀더를 사용할 수 있어요. HDFS에 연결할 때 Hive 커넥터는 Trino가 실행되는 워커 노드의 호스트명을 대입해요. 각 워커 노드가 자체 Kerberos principal을 가질 때 유용해요.
hive.hdfs.trino.keytab hive.hdfs.trino.principal로 지정된 principal의 키를 담은 keytab 파일의 경로. 이 파일은 Trino를 실행하는 운영체제 사용자가 읽을 수 있어야 해요.
hive.hdfs.trino.credential-cache.location HDFS에 접근할 principal의 자격 증명을 담은 credential-cache의 위치. hive.hdfs.trino.keytab의 대안이에요.

기본 보안 구성은 Hadoop 클러스터에 연결할 때 인증을 사용하지 않아요(hive.hdfs.authentication.type=NONE). 쿼리를 제출한 사용자가 누구든 모든 쿼리는 Trino 프로세스를 실행하는 OS 사용자로 실행돼요.

Trino에서 Hive 테이블의 CREATE TABLE 또는 CREATE TABLE AS 문장을 실행하기 전에, Trino가 HDFS에 접근하는 데 사용하는 사용자가 Hive 웨어하우스 디렉토리에 접근 권한이 있는지 확인해야 해요. Hive 웨어하우스 디렉토리는 hive-site.xml의 구성 변수 hive.metastore.warehouse.dir로 지정되며 기본값은 /user/hive/warehouse예요.

예를 들어 Trino가 nobody로 실행되면 HDFS에 nobody로 접근해요. Trino JVM 구성에 HADOOP_USER_NAME 시스템 프로퍼티를 설정해 이 사용자 이름을 덮어쓸 수 있어요. hdfs_user를 적절한 사용자 이름으로 바꿔요.

-DHADOOP_USER_NAME=hdfs_user

hive 사용자는 보통 잘 동작해요. Hive가 자주 hive 사용자로 시작되고 이 사용자가 Hive 웨어하우스에 접근권이 있기 때문이에요.

HDFS 가장 (HDFS impersonation)

카탈로그 프로퍼티 파일에 hive.hdfs.impersonation.enabled=true를 추가하면 HDFS 가장이 활성화돼요. 이 구성으로 Trino는 쿼리를 실행하는 최종 사용자를 가장할 수 있어요. 이를 HDFS 권한과 ACL과 함께 사용하면 데이터에 대한 추가 보안을 제공할 수 있어요. HDFS 권한과 ACL은 HDFS Permissions Guide에 설명돼 있어요.

가장을 사용하려면 Hadoop 클러스터가 Trino로 실행되는 사용자 또는 principal이 Trino에 로그인하는 사용자를 가장할 수 있도록 구성되어야 해요. Hadoop의 가장은 core-site.xml 파일에 구성돼요. 구성 옵션의 전체 설명은 Hadoop 문서에 있어요.

커맨드라인 인터페이스에서 쿼리를 실행하는 사용자의 경우, 최종 사용자는 Trino CLI 프로세스와 연관된 사용자 이름이거나 선택적 --user 옵션의 인자예요.

HDFS Kerberos 인증 (HDFS Kerberos authentication)

Kerberos 인증을 사용하는 Hadoop 클러스터와 함께 Trino를 사용하려면 카탈로그 프로퍼티 파일에서 Hadoop 클러스터의 두 서비스와 함께 작업하도록 카탈로그를 구성해야 해요.

  • Hive metastore Thrift 서비스(Thrift metastore authentication 참고)
  • Hadoop Distributed File System(HDFS)(KERBEROS authentication without impersonation 또는 KERBEROS authentication with impersonation 예시 참고)

두 설정 모두 각 Trino 노드에 Kerberos가 구성되어 있어야 해요. Hadoop 서비스에 Kerberos 인증을 사용할 때는 Trino 코디네이터 접근이 예를 들어 Kerberos 또는 비밀번호 인증으로 보안되어야 해요. Trino 코디네이터 접근을 보호하지 않으면 Hadoop 클러스터의 민감한 데이터에 무단 접근이 발생할 수 있어요. 자세한 내용은 Security 문서를, 특히 Kerberos 인증 구성을 참고하세요.

📌 참고: krb5.conf 위치가 /etc/krb5.conf와 다르다면 jvm.config 파일의 java.security.krb5.conf JVM 프로퍼티로 명시적으로 설정해야 해요. 예: -Djava.security.krb5.conf=/example/path/krb5.conf.

Keytab 파일 (Keytab files)

Keytab 파일은 Kerberos 인증에 필요하며, principal을 Kerberos KDC에 인증하는 데 사용되는 암호화 키를 담아요. 이 암호화 키는 안전하게 저장해야 해요. ssh 개인키를 보호할 때와 같은 예방 조치를 취해야 해요.

특히 keytab 파일에 대한 접근은 인증에 사용해야 하는 계정으로만 제한해야 해요. 실제로는 Trino 프로세스가 실행되는 사용자예요. keytab 파일의 소유권과 권한은 다른 사용자가 파일을 읽거나 수정하지 못하도록 설정해야 해요.

Keytab 파일은 Trino를 실행하는 모든 노드에 배포되어야 하고, 배포 후 모든 노드에서 올바른 권한을 가져야 해요.

보안 구성 예시 (Security configuration examples)

다음 섹션은 HDFS에서 다양한 인증 구성을 위해 필요한 구성 프로퍼티와 값을 설명해요.

가장 없는 기본 NONE 인증

hive.hdfs.authentication.type=NONE

HDFS의 기본 인증 타입은 NONE이에요. 인증 타입이 NONE이면 Trino는 Hadoop의 단순 인증 메커니즘으로 HDFS에 연결해요. Kerberos는 사용되지 않아요.

가장이 있는 NONE 인증

hive.hdfs.authentication.type=NONE
hive.hdfs.impersonation.enabled=true

가장이 있는 NONE 인증을 사용하면 Trino는 HDFS에 접근할 때 쿼리를 실행하는 사용자를 가장해요. Trino로 실행되는 사용자는 이 사용자를 가장하도록 허용되어야 해요(HDFS impersonation 섹션 참고). Kerberos는 사용되지 않아요.

가장 없는 KERBEROS 인증

hive.hdfs.authentication.type=KERBEROS
hive.hdfs.trino.principal=...
hive.hdfs.trino.keytab=/etc/trino/trino.keytab

인증 타입이 KERBEROS이면 Trino는 hive.hdfs.trino.principal 프로퍼티로 지정된 principal로 HDFS에 접근해요. Trino는 hive.hdfs.trino.keytab keytab으로 지정된 keytab을 사용해 이 principal을 인증해요.

가장이 있는 KERBEROS 인증

hive.hdfs.authentication.type=KERBEROS
hive.hdfs.impersonation.enabled=true
hive.hdfs.trino.principal=...
hive.hdfs.trino.keytab=/etc/trino/trino.keytab

가장이 있는 KERBEROS 인증을 사용하면 Trino는 HDFS에 접근할 때 쿼리를 실행하는 사용자를 가장해요. hive.hdfs.trino.principal 프로퍼티로 지정된 principal은 현재 Trino 사용자를 가장하도록 허용되어야 해요(HDFS impersonation 섹션 참고). Trino는 hive.hdfs.trino.keytab으로 지정된 keytab을 사용해 hive.hdfs.trino.principal을 인증해요.

더 알아보기 (Learn more)

HDFS 파일시스템 지원을 배웠어요. 이어서 Alluxio 지원에 대해 살펴보면 좋아요.