

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

# 對搭配 AWS Lake Formation 使用 Amazon EMR 時的常見問題進行故障診斷
<a name="emr-troubleshoot-lf"></a>

 本章節會逐步解說將 Amazon EMR 與 AWS Lake Formation搭配使用時常見問題的疑難排解程序。

## 不允許存取資料湖
<a name="emr-troubleshoot-lf-data-access"></a>

您必須明確選擇在 Amazon EMR 叢集上進行資料篩選，然後才能分析和處理資料湖中的資料。當資料存取失敗時，您將在筆記本項目的輸出中看到一般 `Access is not allowed` 訊息。

若要選擇加入並允許在 Amazon EMR 上進行資料篩選，請參閱《AWS Lake Formation 開發人員指南》**中的[允許在 Amazon EMR 上進行資料篩選](https://docs.aws.amazon.com/lake-formation/latest/dg/getting-started-setup.html#emr-switch)以取得指示。

## 工作階段過期
<a name="emr-troubleshoot-lf-expiration"></a>

EMR Notebooks 和 Zeppelin 的工作階段逾時是由 Lake Formation 的 `Maximum CLI/API session duration` IAM 角色所控制。此設定的預設值為 1 小時。當工作階段過期發生時，您會在嘗試執行 Spark SQL 命令時，於筆記本項目的輸出中看到下列訊息。

```
Error 401    HTTP ERROR: 401 Problem accessing /sessions/2/statements. 
Reason:  JWT token included in request failed validation. 
Powered by Jetty:// 9.3.24.v20180605   org.springframework.web.client.HttpClientErrorException: 401 JWT token included in request failed validation…
```

若要驗證您的工作階段，請重新整理頁面。系統會提示您使用 IdP 重新驗證身分，並重新導向回筆記本。您可以在重新驗證之後繼續執行查詢。

## 請求的資料表上沒有使用者的許可
<a name="emr-troubleshoot-lf-no-permissisons"></a>

嘗試存取您無權存取的資料表時，您會在嘗試執行 Spark SQL 命令時，於筆記本項目的輸出中會看到下例外狀況。

```
org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table table. 
Resource does not exist or requester is not authorized to access requested permissions. 
(Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: …
```

若要存取資料表，您必須更新 Lake Formation 中與此資料表關聯的許可，將存取權授予使用者。

## 查詢與 Lake Formation 共用的跨帳戶資料
<a name="emr-troubleshoot-lf-cross-account"></a>

當您使用 Amazon EMR 存取從其他帳戶與您共用的資料時，部分 Spark 程式庫將嘗試呼叫 `Glue:GetUserDefinedFunctions` API 操作。由於 AWS RAM 受管許可的第 1 版和第 2 版不支援此動作，您會收到下列錯誤訊息：

`"ERROR: User: arn:aws:sts::012345678901:assumed-role/my-spark-role/i-06ab8c2b59299508a is not authorized to perform: glue:GetUserDefinedFunctions on resource: arn:exampleCatalogResource because no resource-based policy allows the glue:GetUserDefinedFunctions action"`

若要解決此錯誤，建立資源共享的資料湖管理員必須更新連接至資源共享的 AWS RAM 受管許可。 AWS RAM 受管許可第 3 版允許主體執行 `glue:GetUserDefinedFunctions` 動作。

如果您建立新的資源共享，Lake Formation 預設會套用最新版本的 AWS RAM 受管許可，而且您不需要採取任何動作。若要啟用現有資源共享的跨帳戶資料存取，您需要將 AWS RAM 受管許可更新為第 3 版。

您可以在 中檢視指派給與您共用資源的 AWS RAM 許可 AWS RAM。第 3 版中包含下列許可：

```
Databases
  AWSRAMPermissionGlueDatabaseReadWriteForCatalog 
  AWSRAMPermissionGlueDatabaseReadWrite
    
Tables
  AWSRAMPermissionGlueTableReadWriteForCatalog
  AWSRAMPermissionGlueTableReadWriteForDatabase
    
AllTables
  AWSRAMPermissionGlueAllTablesReadWriteForCatalog
  AWSRAMPermissionGlueAllTablesReadWriteForDatabase
```

**更新現有資源共享的 AWS RAM 受管許可版本**  
您 （資料湖管理員） 可以遵循*AWS RAM 《 使用者指南*》中的指示，將[AWS RAM 受管許可更新為較新版本](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update-permissions.html)，也可以撤銷資源類型的所有現有許可並予以授予。如果您撤銷許可， 會 AWS RAM 刪除與 AWS RAM 資源類型相關聯的資源共用。當您授予許可時， AWS RAM 會建立新的資源共用，附加最新版本的 AWS RAM 受管許可。

## 插入、建立和更改資料表
<a name="emr-troubleshoot-lf-unsupported"></a>

不支援在 Lake Formation 政策保護資料庫中插入、建立或更改資料表。當執行這些操作時，您會在嘗試執行 Spark SQL 命令時，於筆記本項目的輸出中看到下列例外狀況。

```
java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: 
            Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: …
```

如需詳細資訊，請參閱[與 Amazon EMR 整合的限制 AWS Lake Formation](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lf-scope.html#emr-lf-limitations)。