本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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,則您部署在其中部署的 Athena 聯合 Lambda 連接器的 IAM 角色 AWS Serverless Application Repository 必須具有. AWS Glue Data Catalog
必要條件
使用 Athena 主控台或 AWS Serverless Application Repository,將連接器部署到您的 AWS 帳戶 。如需詳細資訊,請參閱 部署資料來源連接器 或 使用 AWS Serverless Application Repository 部署資料來源連接器 。
參數
使用本節中的 Lambda 環境變數來設定 HBase 連接器。
-
spill_bucket - 針對超過 Lambda 函數限制的資料,指定 Amazon S3 儲存貯體。
-
spill_prefix - (選用) 預設為指定的
spill_bucket
中名為athena-federation-spill
的子資料夾。我們建議您在此位置設定 Amazon S3 儲存生命週期,以刪除超過預定天數或小時數的溢出。 -
spill_put_request_headers – (選用) 用於溢出的 Amazon S3
putObject
請求的請求標頭和值的 JSON 編碼映射 (例如,{"x-amz-server-side-encryption" : "AES256"}
)。如需其他可能的標頭,請參閱 Amazon 簡單儲存服務 API 參考PutObject中的。 -
kms_key_id - (選用) 依預設,任何溢出到 Amazon S3 的資料都會使用 AES-GCM 驗證加密模式和隨機產生的金鑰進行加密。為了讓您的 Lambda 函數使用 KMS 產生的更強大的加密金鑰,例如
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331
,您可以指定 KMS 金鑰 ID。 -
disable_spill_encryption - (選用) 當設定為
True
時,停用溢出加密。預設為False
,因此溢出 S3 的資料會使用 AES-GCM 進行加密 — 使用隨機產生的金鑰或 KMS 來產生金鑰。停用溢出加密可以提高效能,尤其是如果溢出位置使用伺服器端加密。 -
disabled le_glue — (選擇性) 如果存在且設定為 true,則連接器不會嘗試從中擷取補充中繼資料。 AWS Glue
-
glue_catalog - (選用) 使用此選項可指定跨帳戶 AWS Glue 目錄。依預設,連接器會嘗試從其自己的 AWS Glue 帳戶取得中繼資料。
-
default_hbase - 如果存在,則指定當不存在目錄特定環境變數時要使用的 HBase 連接字串。
-
啟用案例不敏感 _ 匹配 —(可選)當
true
,對 HBase 中的表名執行不區分大小寫的搜索。預設值為false
。如果您的查詢包含大寫資料表名稱,則使用
指定連接字串
您可以提供一個或多個屬性,以定義與連接器搭配使用的 HBase 執行個體的 HBase 連接詳細資訊。因此,請設定您要在 Athena 使用的目錄名稱所對應的 Lambda 環境變數。例如,假設您想要使用下列查詢來查詢來自 Athena 的兩個不同 HBase 執行個體:
SELECT * FROM "hbase_instance_1".database.table
SELECT * FROM "hbase_instance_2".database.table
您必須先將兩個環境變數 hbase_instance_1
和 hbase_instance_2
新增至 Lambda 函數,才能使用這兩個 SQL 陳述式。每個的值應該為以下格式的 HBase 連接字串:
master_hostname
:hbase_port
:zookeeper_port
使用秘密
您可以選擇性地用 AWS Secrets Manager 於連接字串詳細資料的部分或全部值。若要搭配使用 Athena 聯合查詢功能和 Secrets Manager,連接到您的 Lambda 函數的 VPC 應該具有網際網路存取權
如果您使用語法 ${my_secret}
將 Secret Manager 秘密的名稱放入連接字串中,連接器會使用您在 Secret Manager 中的使用者名稱和密碼值來取代秘密名稱。
例如,假設您將 hbase_instance_1
的 Lambda 環境變數設定為以下值:
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
Athena Query Federation 軟體開發套件會自動嘗試從 Secrets Manager 中擷取名為 hbase_instance_1_creds
的秘密,並將該值放入 ${hbase_instance_1_creds}
位置。由 ${
}
字元組合括住的連接字串的任何部分會被解譯為 Secrets Manager 的秘密。如果您指定連接器在 Secrets Manager 中找不到的秘密名稱,則連接器不會取代該文字。
設定資料庫和資料表 AWS Glue
連接器的內建結構描述推斷僅支援在 HBase 中序列化為字串的值 (例如,String.valueOf(int)
)。由於連接器的內建結構描述推斷功能受到限制,因此您可能需要對中繼資料使用 AWS Glue
。要啟用 AWS Glue 表與 HBase 的使用,你必須有一個 AWS Glue 數據庫和表的名稱匹配 HBase 的命名空間和表,你想提供補充元數據。使用 HBase 資料欄系列命名慣例是可選的,但不是必需的。
若要將 AWS Glue 表格用於補充描述資料
-
在 AWS Glue 主控台中編輯表格和資料庫時,請新增下列表格屬性:
hbase-metadata-flag— 此內容向 HBase 連接器指示連接器可將表格用於補充中繼資料。您可以為
hbase-metadata-flag
提供任何值,只要hbase-metadata-flag
屬性存在於資料表屬性清單中。-
hbase-native-storage-flag— 使用此旗標可切換連接器支援的兩個值序列化模式。根據預設,當此欄位不存在時,連接器假定所有值都作為字串儲存在 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 為阿帕奇 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 |
binary | VARBINARY |
string | 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 防護記錄 — 連接器需要存取 CloudWatch 記錄檔以儲存防護記錄。
-
AWS Secrets Manager 讀取存取權 — 如果您選擇將 HBase 端點詳細資料儲存在 Secrets Manager 中,則必須將這些密碼的存取權授與連接器。
-
VPC 存取 - 連接器需要能夠將介面連接到 VPC 並能進行分離,以便可進行連接並與 HBase 執行個體通訊。
效能
Athena HBase 連接器透過平行讀取每個區域伺服器,嘗試對 HBase 執行個體平行處理查詢。Athena HBase 連接器執行述詞下推,以減少查詢掃描的資料。
Lambda 函數還執行投影下推,以減少查詢掃描的資料。不過,選取資料欄子集有時會導致較長的查詢執行時間。LIMIT
子句可減少掃描的資料量,但是如果您未提供述詞,則應期望具有 LIMIT
子句的 SELECT
查詢掃描至少 16MB 的資料。
HBase 容易導致查詢失敗和可變的查詢執行時間。您可能必須重試查詢多次才能成功。HBase 連接器由於並行而對限流保有彈性。
直通查詢
HBase 的連接器支援直通查詢,並且是以 NoSQL 為基礎。如需使用篩選來查詢 Apache HBase 的詳細資訊,請參閱 Apache 文件中的篩選器語言
若要使用 HBase 的直通查詢,請使用下列語法:
SELECT * FROM TABLE( system.query( database => '
database_name
', collection => 'collection_name
', filter => '{query_syntax
}' ))
下列範例 HBase 的直通查詢篩選器適用於資料庫employee
集合中年齡在 24 或 30 歲的default
員工。
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 License
其他資源
如需有關此連接器的其他資訊,請造訪 GitHub .com 上的對應網站