Amazon Athena HBase 커넥터
Amazon Athena HBase 커넥터를 통해 Amazon Athena는 Apache HBase 인스턴스와 통신할 수 있고, 이로써 SQL을 사용하여 HBase 데이터를 쿼리할 수 있습니다.
기존의 관계형 데이터 스토어와 달리 HBase 컬렉션에는 설정된 스키마가 없습니다. HBase에는 메타데이터 스토어가 없습니다. HBase 컬렉션의 항목마다 필드와 데이터 형식이 다를 수 있습니다.
HBase 커넥터는 테이블 스키마 정보를 생성하기 위한 두 가지 메커니즘인 기본 스키마 추론과 AWS Glue Data Catalog 메타데이터를 지원합니다.
스키마 추론이 기본값입니다. 이 옵션은 컬렉션에 있는 소수의 문서를 스캔하고, 모든 필드의 통합을 형성하고, 겹치지 않는 데이터 형식을 가진 필드를 강제 변환합니다. 이 옵션은 항목이 대부분 균일한 컬렉션에 적합합니다.
더 다양한 데이터 형식이 있는 컬렉션의 경우 커넥터는 AWS Glue Data Catalog에서 메타데이터 검색을 지원합니다. 커넥터가 HBase 네임스페이스 및 컬렉션 이름과 일치하는 AWS Glue 데이터베이스 및 테이블을 발견하면 해당 AWS Glue 테이블에서 스키마 정보를 가져옵니다. AWS Glue 테이블을 생성할 때 HBase 컬렉션에서 액세스하려는 모든 필드의 상위 세트로 만드는 것이 좋습니다.
계정에서 Lake Formation을 활성화한 경우 AWS Serverless Application Repository에 배포한 Athena 페더레이션형 Lambda 커넥터의 IAM 역할은 Lake Formation에서 AWS Glue Data Catalog에 대한 읽기 액세스 권한을 가지고 있어야 합니다.
사전 조건
Athena 콘솔 또는 AWS Serverless Application Repository를 사용하여 AWS 계정에 커넥터를 배포합니다. 자세한 내용은 데이터 소스 커넥터 배포 또는 AWS Serverless Application Repository을 사용하여 데이터 원본 커넥터 배포을 참조하세요.
파라미터
이 섹션의 Lambda 환경 변수를 사용하여 HBase 커넥터를 구성합니다.
-
spill_bucket – Lambda 함수 제한을 초과하는 데이터에 대한 Amazon S3 버킷을 지정합니다.
-
spill_prefix – (선택 사항) 기본값은
athena-federation-spill
이라는 지정된spill_bucket
의 하위 폴더입니다. 미리 정해진 일 수 또는 시간보다 오래된 유출을 삭제하려면 이 위치에서 Amazon S3 스토리지 수명 주기를 구성하는 것이 좋습니다. -
spill_put_request_headers – (선택 사항) 유출에 사용되는 Amazon S3
putObject
요청에 대한 요청 헤더 및 값의 JSON 인코딩 맵입니다(예:{"x-amz-server-side-encryption" : "AES256"}
). 다른 가능한 헤더를 알아보려면 Amazon Simple Storage Service API Reference(Amazon Simple Storage Service API 참조)의 PutObject를 참조하세요. -
kms_key_id – (선택 사항) 기본적으로 Amazon S3로 유출된 모든 데이터는 AES-GCM 인증 암호화 모드와 임의로 생성된 키를 사용하여 암호화됩니다. Lambda 함수가
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331
과 같이 KMS에서 생성된 더 강력한 암호화 키를 사용하도록 하려면 KMS 키 ID를 지정합니다. -
disable_spill_encryption – (선택 사항)
True
로 설정하면 유출 암호화가 비활성화됩니다. S3로 유출되는 데이터가 AES-GCM을 사용하여 암호화되도록 기본값은False
입니다(임의로 생성된 키 또는 KMS를 사용하여 키 생성). 유출 암호화를 비활성화하면 특히 유출 위치가 서버 측 암호화를 사용하는 경우 성능이 향상될 수 있습니다. -
disable_glue – (선택 사항) true로 설정된 경우 커넥터는 AWS Glue에서 보충 메타데이터 검색을 시도하지 않습니다.
-
glue_catalog – (선택 사항) 이 옵션을 사용하여 크로스 계정 AWS Glue 카탈로그를 지정합니다. 기본적으로 커넥터는 자체 AWS Glue 계정에서 메타데이터를 가져오려고 시도합니다.
-
default_hbase – 있는 경우 카탈로그 관련 환경 변수가 없을 때 사용할 HBase 연결 문자열을 지정합니다.
-
enable_case_insensitive_match - (선택 사항)
true
인 경우 HBase의 테이블 이름에 대해 대소문자를 구분하지 않는 검색을 수행합니다. 기본값은false
입니다. 쿼리에 대문자 테이블 이름이 포함된 경우에 사용합니다.
연결 문자열 지정
커넥터에서 사용하는 HBase 인스턴스에 대한 HBase 연결 세부 정보를 정의하는 속성을 하나 이상 제공할 수 있습니다. 이렇게 하려면 Athena에서 사용하려는 카탈로그 이름에 해당하는 Lambda 환경 변수를 설정합니다. 예를 들어, 다음 쿼리를 사용하여 Athena에서 서로 다른 2개의 HBase 인스턴스를 쿼리하려고 한다고 가정해 보겠습니다.
SELECT * FROM "hbase_instance_1".database.table
SELECT * FROM "hbase_instance_2".database.table
이 두 SQL 문을 사용하려면 먼저 2개의 환경 변수 hbase_instance_1
과 hbase_instance_2
를 Lambda 함수에 추가해야 합니다. 각 값은 다음 형식의 HBase 연결 문자열이어야 합니다.
master_hostname
:hbase_port
:zookeeper_port
보안 암호 사용
필요에 따라 연결 문자열 세부 정보 값의 일부 또는 전체에 대해 AWS Secrets Manager를 사용할 수 있습니다. Secrets Manager에서 Athena 연합 쿼리 기능을 사용하려면 Secrets Manager 연결을 위한 인터넷 액세스
${my_secret}
구문을 사용하여 Secrets Manager의 보안 암호 이름을 연결 문자열에 입력하면 커넥터가 보안 암호 이름을 Secrets Manager의 사용자 이름 및 암호 값으로 바꿉니다.
예를 들어, hbase_instance_1
에 대한 Lambda 환경 변수를 다음 값으로 설정했다고 가정해 보겠습니다.
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
Athena Query Federation SDK는 자동으로 Secrets Manager에서 hbase_instance_1_creds
라는 보안 암호를 검색하고 ${hbase_instance_1_creds}
대신 해당 값을 삽입하려고 시도합니다. ${
}
문자 조합으로 묶은 연결 문자열 부분은 Secrets Manager의 보안 암호로 해석됩니다. 커넥터가 Secrets Manager에서 찾을 수 없는 보안 암호 이름을 지정하면 커넥터가 텍스트를 바꾸지 않습니다.
AWS Glue에서 데이터베이스 및 테이블 설정
커넥터의 기본 제공 스키마 추론은 HBase에서 문자열로 직렬화되는 값(예: String.valueOf(int)
)만 지원합니다. 커넥터의 기본 제공 스키마 추론 기능이 제한되어 있으므로 메타데이터에 AWS Glue를 대신 사용할 수 있습니다. HBase에서 사용할 AWS Glue 테이블을 활성화하려면 보충 메타데이터를 제공할 HBase 네임스페이스 및 테이블과 이름이 일치하는 AWS Glue 데이터베이스 및 테이블이 있어야 합니다. HBase 열 패밀리 이름 지정 규칙의 사용은 선택 사항이며 필수는 아닙니다.
보충 메타데이터에 AWS Glue 테이블 사용
-
AWS Glue 콘솔에서 테이블과 데이터베이스를 편집할 때 다음 테이블 속성을 추가합니다.
hbase-metadata-flag – 이 속성은 보충 메타데이터에 테이블을 사용할 수 있음을 HBase 커넥터에 나타냅니다.
hbase-metadata-flag
속성이 테이블 속성 목록에 있는 한hbase-metadata-flag
에 모든 값을 제공할 수 있습니다.-
hbase-native-storage-flag - 이 플래그를 사용하여 커넥터에서 지원하는 2개의 값 직렬화 모드를 전환합니다. 기본적으로 이 필드가 없으면 커넥터는 모든 값이 HBase에 문자열로 저장되어 있다고 가정합니다. 따라서 HBase에서
INT
,BIGINT
,DOUBLE
등의 데이터 형식을 문자열로 구문 분석하려고 시도합니다. 이 필드가 AWS Glue의 테이블에 있는 값으로 설정된 경우 커넥터는 '네이티브' 스토리지 모드로 전환하고 다음 함수를 사용하여INT
,BIGINT
,BIT
및DOUBLE
을 바이트로 읽으려고 시도합니다.ByteBuffer.wrap(value).getInt() ByteBuffer.wrap(value).getLong() ByteBuffer.wrap(value).get() ByteBuffer.wrap(value).getDouble()
-
이 문서에 나열된 대로 AWS Glue에 적합한 데이터 형식을 사용해야 합니다.
열 패밀리 모델링
Athena HBase 커넥터는 HBase 열 패밀리를 모델링하는 두 가지 방법, 즉 family:column
과 같은 정규화된(평면화됨) 이름 지정 또는 STRUCT
객체 사용을 지원합니다.
STRUCT
모델에서 STRUCT
필드의 이름은 열 패밀리와 일치해야 하고 STRUCT
의 하위 항목은 패밀리의 열 이름과 일치해야 합니다. 그러나 조건자 푸시다운 및 열 형식 읽기는 STRUCT
와 같은 복합 유형에 대해 아직 완전히 지원되지 않으므로 현재 STRUCT
를 사용하는 것은 권장되지 않습니다.
다음 이미지에서는 AWS Glue에서 두 가지 접근 방식을 조합하여 사용하도록 구성된 테이블을 보여줍니다.
![AWS Glue에서 Apache Hbase용 열 패밀리 모델링.](images/connectors-hbase-1.png)
데이터 형식 지원
커넥터는 모든 HBase 값을 기본 바이트 유형으로 검색합니다. 그런 다음 AWS Glue 데이터 카탈로그에서 테이블을 정의한 방법에 따라 값을 다음 테이블의 Apache Arrow 데이터 형식 중 하나로 매핑합니다.
AWS Glue 데이터 유형 | Apache Arrow 데이터 형식 |
---|---|
int | INT |
bigint | BIGINT |
double | FLOAT8 |
float | FLOAT4 |
boolean | BIT |
이진수 | VARBINARY |
문자열 | VARCHAR |
참고
AWS Glue를 사용하여 메타데이터를 보충하지 않는 경우 커넥터의 스키마 추론은 데이터 형식 BIGINT
, FLOAT8
및 VARCHAR
만 사용합니다.
필수 권한
이 커넥터에 필요한 IAM 정책에 대한 자세한 내용을 알아보려면 athena-hbase.yamlPolicies
섹션을 검토하세요. 다음 목록에 필요한 권한이 요약되어 있습니다.
-
Amazon S3 쓰기 액세스 - 대규모 쿼리의 결과 유출을 위해서는 커넥터에 Amazon S3 위치에 대한 쓰기 액세스 권한이 필요합니다.
-
Athena GetQueryExecution - 커넥터는 업스트림 Athena 쿼리가 종료된 경우 이 권한을 사용하여 빠른 실패를 수행합니다.
-
AWS Glue Data Catalog - 스키마 정보를 가져오기 위해 HBase 커넥터에 AWS Glue Data Catalog에 대한 읽기 전용 액세스 권한이 필요합니다.
-
CloudWatch Logs - 로그를 저장하기 위해 커넥터 CloudWatch Logs에 대한 액세스 권한이 필요합니다.
-
AWS Secrets Manager 읽기 액세스 - Secrets Manager에 HBase 엔드포인트 세부 정보를 저장하기로 선택하는 경우 커넥터에 해당 보안 암호에 대한 액세스 권한을 부여해야 합니다.
-
VPC 액세스 - VPC에 연결하고 HBase 인스턴스와 통신할 수 있도록 VPC에 인터페이스를 연결하고 분리하는 기능이 커넥터에 필요합니다.
성능
Athena HBase 커넥터는 각 리전 서버를 병렬로 읽어 HBase 인스턴스에 대한 쿼리 병렬화를 시도합니다. 쿼리에서 스캔하는 데이터를 줄이기 위해 Athena HBase 커넥터에서 조건자 푸시다운을 수행합니다.
쿼리에서 스캔된는 데이터를 줄이기 위해 Lambda 함수에서 프로젝션 푸시다운도 수행합니다. 그러나 열의 하위 세트를 선택하면 쿼리 실행 런타임이 길어지는 경우가 있습니다. LIMIT
절은 스캔되는 데이터의 양을 줄이지만 조건자를 제공하지 않으면 LIMIT
절을 포함하는 SELECT
쿼리가 최소 16MB의 데이터를 스캔할 것으로 예상해야 합니다.
HBase는 쿼리 실패가 발생하기 쉽고 쿼리 실행 시간이 가변적입니다. 쿼리가 성공하려면 쿼리를 여러 번 다시 시도해야 할 수 있습니다. HBase 커넥터는 동시성으로 인한 제한에 대한 복원력이 뛰어납니다.
패스스루 쿼리
HBase 커넥터는 패스스루 쿼리를 지원하며 NoSQL 기반입니다. 필터링을 사용한 Apache HBase 쿼리에 대한 자세한 내용은 Apache 설명서의 Filter language
HBase에서 패스스루 쿼리를 사용하려면 다음 구문을 사용합니다.
SELECT * FROM TABLE( system.query( database => '
database_name
', collection => 'collection_name
', filter => '{query_syntax
}' ))
다음 예제 HBase 패스스루 쿼리는 default
데이터베이스의 employee
컬렉션 내에서 24세 또는 30세 직원을 필터링합니다.
SELECT * FROM TABLE( system.query( DATABASE => 'default', COLLECTION => 'employee', FILTER => 'SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:30'')' || ' OR SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:24'')' ))
라이선스 정보
Amazon Athena HBase 커넥터 프로젝트는 Apache-2.0 라이선스
추가 리소스
이 커넥터에 대한 추가 정보를 알아보려면 GitHub.com의 해당 사이트