

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 考量和限制
<a name="security-lf-enable-considerations"></a>

當您搭配 AWS Glue 使用 Lake Formation 時，請考慮下列考量和限制。

AWS Glue with Lake Formation 可在 AWS GovCloud （美國東部） 和 AWS GovCloud （美國西部） 以外的所有支援區域中使用。
+ AWS Glue 僅支援透過 Lake Formation 對 Apache Hive 和 Apache Iceberg 資料表進行精細存取控制。Apache Hive 格式包括 Parquet、ORC 和 CSV。
+ 只能將 Lake Formation 與 Spark 任務搭配使用。
+ AWS Glue with Lake Formation 僅支援整個任務的單一 Spark 工作階段。
+ 啟用 Lake Formation 時，AWS Glue 需要更多工作者，因為它需要一個系統驅動程式、系統執行器、一個使用者驅動程式，以及選擇性的使用者執行器 （當您的任務具有 UDFs 或 時需要`spark.createDataFrame`)。
+ AWS Glue with Lake Formation 僅支援透過資源連結共用的跨帳戶資料表查詢。資源連結的名稱必須與來源帳戶的資源相同。
+ 若要啟用 Glue AWS 任務的精細存取控制，請傳遞`--enable-lakeformation-fine-grained-access`任務參數。
+ 您可以設定 AWS Glue 任務以使用 AWS Glue 多目錄階層。如需搭配 Glue `StartJobRun` API AWS 使用的組態參數資訊，請參閱[在 EMR Serverless 上使用 AWS Glue 多目錄階層](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/external-metastore-glue-multi.html)。
+ 不支援下列內容：
  + 彈性分散式資料集 (RDD)
  + Spark 串流
  + 使用 Lake Formation 授權的許可進行寫入
  + 巢狀資料欄的存取控制
+ AWS Glue 會封鎖可能會破壞系統驅動程式完全隔離的功能，包括下列項目：
  + UDT、HiveUDF 以及任何涉及自訂類別的使用者定義的函數
  + 自訂資料來源
  + 為 Spark 延伸模組、連接器或中繼存放區提供額外的 jar
  + `ANALYZE TABLE` 命令
+ 為了強制執行存取控制，諸如 `DESCRIBE TABLE` 等 `EXPLAIN PLAN` 和 DDL 操作不會公開限制資訊。
+ AWS Glue 會限制對已啟用 Lake Formation 之應用程式上的系統驅動程式 Spark 日誌的存取。由於系統驅動程式執行時具有更多存取權，因此系統驅動程式產生的事件和日誌可能包含敏感資訊。為了防止未經授權的使用者或程式碼存取此敏感資料， AWS Glue 已停用對系統驅動程式日誌的存取。如需故障診斷，請聯絡 AWS 支援。
+ 如果已向 Lake Formation 註冊資料表位置，無論 AWS Glue 任務執行時期角色的 IAM 許可為何，資料存取路徑都會經過 Lake Formation 儲存的憑證。如果您錯誤設定向資料表位置註冊的角色，則使用對該資料表具有 S3 IAM 許可的角色提交的任務將會失敗。
+ 寫入 Lake Formation 資料表會使用 IAM 許可，而非 Lake Formation 授予的許可。如果您的任務執行時期角色具有必要的 S3 許可，則可以使用其來執行寫入操作。

以下是使用 Apache Iceberg 時的考量與限制：
+ 只能將 Apache Iceberg 與工作階段目錄搭配使用，不能與任意命名目錄搭配使用。
+ 在 Lake Formation 中註冊的 Iceberg 資料表僅支援中繼資料表 `history`、`metadata_log_entries`、`manifests`、、 `snapshots` `files`和 `refs`。 AWS Glue 會隱藏可能具有敏感資料的資料欄，例如 `partitions`、 `path`和 `summaries`。此限制不適用於未在 Lake Formation 中註冊的 Iceberg 資料表。
+ 未在 Lake Formation 中註冊的資料表支援所有 Iceberg 儲存的程序。所有資料表都不支援 `register_table` 和 `migrate` 程序。
+ 建議您使用 Iceberg DataFrameWriterV2 而非 V1。

## 工作者分配範例
<a name="security-lf-considerations-worker-allocation"></a>

對於使用下列參數設定的任務：

```
--enable-lakeformation-fine-grained-access=true  
--number-of-workers=20
```

工作者分配如下：
+ 使用者驅動程式有一個工作者。
+ 系統驅動程式有一個工作者。
+ 為使用者執行器保留的其餘 18 個工作者的 10% (即 2 個工作者)。
+ 最多為系統執行器分配 16 個工作者。

啟用自動擴展後，使用者執行器可以視需要利用系統執行器中任何未分配的容量。

## 控制使用者執行器分配
<a name="security-lf-considerations-user-exec-allocation"></a>

可以使用下列組態來調整使用者執行器的保留百分比：

```
--conf spark.dynamicAllocation.maxExecutorsRatio=<value between 0 and 1>
```

此組態允許針對相對於總可用容量而言預留的使用者執行器數量進行微調控制。