使用AWS膠水數據目錄作為metastore(遺留)

您可以配置數據磚運行時使用AWS膠數據目錄metastore。這可以作為一個蜂巢metastore的替代。

每個AWS帳戶擁有一個一個AWS地區目錄的目錄ID是一樣的AWS帳戶ID。使用膠水目錄作為metastore磚可以啟用共享metastore在AWS服務,應用程序,或AWS帳戶。

您可以配置多個磚工作區metastore分享相同的。

本文展示了如何安全地訪問膠磚使用實例配置文件的目錄的數據。

請注意

使用外部metastores遺留數據治理模型。磚建議你升級到統一的目錄。統一目錄簡化了數據的安全性和治理提供一個中心位置管理和審計數據訪問跨多個工作空間在您的帳戶。看到聯合目錄是什麼?

需求

  • 你必須AWS管理員訪問我角色和策略在磚的AWS帳戶中部署和AWS帳戶包含膠水數據目錄。

  • 如果膠數據目錄是在一個不同的AWS帳戶從磚在哪裏部署,across-account訪問政策必須允許訪問目錄從磚的AWS帳戶中部署。注意,我們隻支持給予cross-account訪問使用資源策略的膠水。

  • 內置模式需要磚運行時的8.4或以上,或運行時7.3 LTS磚。

配置膠metastore數據目錄

使膠目錄集成設置火花配置spark.databricks.hive.metastore.glueCatalog.enabled真正的。這個配置默認情況下是禁用的。即默認是使用磚蜂巢metastore主辦,或其他外部metastore如果配置。

集群互動或工作,設置配置集群中配置之前集群啟動。

重要的

這種配置選項不能在集群運行修改。

運行時spark-submit無論是在工作,設置此配置選項spark-submit參數使用——設計spark.databricks.hive.metastore.glueCatalog.enabled = true或設置它的代碼之前創建SparkSessionSparkContext。例如:

pyspark.sql進口SparkSession#設置膠直接參看這裏而不是使用spark-submit——配置選項火花=SparkSession構建器\瀏覽器名稱(“ExamplePySparkSubmitTask”)\配置(“spark.databricks.hive.metastore.glueCatalog.enabled”,“真正的”)\enableHiveSupport()\getOrCreate()打印(火花sparkContextgetConf()得到(“spark.databricks.hive.metastore.glueCatalog.enabled”))火花sql(“顯示數據庫”)顯示()火花停止()

如何配置膠目錄訪問取決於磚和膠水的目錄在同一個AWS帳戶和地區,在不同的賬戶,或在不同的地區。遵循適當的步驟在本文的其餘部分:

  • 相同的AWS帳戶和地區:按照步驟1,然後步驟3 - 5。

  • Cross-account1 - 6:遵循步驟。

  • 區域:按照步驟1,然後3 - 6的步驟。

重要的

AWS膠數據編目政策隻定義元數據的訪問權限。S3政策定義訪問權限內容本身。這些步驟建立一個政策AWS膠水數據目錄。他們建立相關的S3 bucket或對象級策略。看到S3訪問配置實例配置文件設置S3權限數據磚。

有關更多信息,請參見限製你的AWS膠水數據目錄資源級別我權限和資源政策

步驟1:創建一個實例配置文件訪問膠水數據目錄

  1. 在AWS控製台中,去我的服務。

  2. 在側邊欄單擊角色選項卡。

  3. 點擊創建角色

    1. 在選擇信任的實體類型,選擇AWS服務

    2. 單擊EC2服務。

    3. 在選擇你的用例,點擊EC2

      選擇服務
    4. 點擊下一個:權限並點擊下一個:審查

    5. 在角色名稱字段中,輸入角色名稱。

    6. 點擊創建角色。角色的列表顯示。

  4. 在角色列表中,點擊角色。

  5. 添加一個內聯政策膠目錄。

    1. 在“權限”選項卡,單擊內聯政策

    2. 單擊JSON選項卡。

    3. 複製和粘貼這一政策選項卡。

      {“版本”:“2012-10-17”,“聲明”:({“席德”:“GrantCatalogAccessToGlue”,“效應”:“允許”,“行動”:(“膠:BatchCreatePartition”,“膠:BatchDeletePartition”,“膠:BatchGetPartition”,“膠:CreateDatabase”,“膠:不知道”,“膠:CreateUserDefinedFunction”,“膠:DeleteDatabase”,“膠:DeletePartition”,“膠:DeleteTable”,“膠:DeleteUserDefinedFunction”,“膠:GetDatabase”,“膠:getdatabase”,“膠:GetPartition”,“膠:GetPartitions”,“膠:可以獲得的”,“膠:可以獲得的”,“膠:GetUserDefinedFunction”,“膠:GetUserDefinedFunctions”,“膠:UpdateDatabase”,“膠:UpdatePartition”,“膠:UpdateTable”,“膠:UpdateUserDefinedFunction”),“資源”:(“*”]}]}

細粒度的配置允許資源(目錄、數據庫、表、userDefinedFunction),看到的指定AWS資源是膠水

如果允許操作的列表在上麵的政策不足,請聯係您的磚代表的錯誤信息。最簡單的方法是使用政策,給出了完全訪問膠:

{“版本”:“2012-10-17”,“聲明”:({“席德”:“GrantFullAccessToGlue”,“效應”:“允許”,“行動”:(“膠:*”),“資源”:“*”}]}

步驟2:創建一個政策目標膠目錄

遵循這個步驟隻有在目標膠目錄不同的AWS帳戶比用於磚部署。

  1. 登錄到目標的AWS帳戶膠目錄和去膠控製台。

  2. 在設置中,在以下政策粘貼到盒子的權限。集< aws-account-id-databricks >,< iam-role-for-glue-access >從步驟1,< aws-region-target-glue-catalog >,< aws-account-id-target-glue-catalog >相應地,。

    {“版本”:“2012-10-17”,“聲明”:({“席德”:“許可”,“效應”:“允許”,“校長”:{“AWS”:“攻擊:aws:我::< aws-account-id-databricks >: / < iam-role-for-glue-access >”角色},“行動”:(“膠:BatchCreatePartition”,“膠:BatchDeletePartition”,“膠:BatchGetPartition”,“膠:CreateDatabase”,“膠:不知道”,“膠:CreateUserDefinedFunction”,“膠:DeleteDatabase”,“膠:DeletePartition”,“膠:DeleteTable”,“膠:DeleteUserDefinedFunction”,“膠:GetDatabase”,“膠:getdatabase”,“膠:GetPartition”,“膠:GetPartitions”,“膠:可以獲得的”,“膠:可以獲得的”,“膠:GetUserDefinedFunction”,“膠:GetUserDefinedFunctions”,“膠:UpdateDatabase”,“膠:UpdatePartition”,“膠:UpdateTable”,“膠:UpdateUserDefinedFunction”),“資源”:“攻擊:aws:膠:< aws-region-target-glue-catalog >: < aws-account-id-target-glue-catalog >: *”}]}

步驟3:查找我的角色用於創建數據磚部署

這我的角色是角色設置磚時使用帳戶。

下麵的步驟是不同的賬戶E2版本的平台Beplay体育安卓版本比賬戶在另一個版本的所有新磚磚平台賬戶和大多數現有的賬戶現在E2。Beplay体育安卓版本如果你不確定該帳戶類型,請聯係您的磚的代表。

如果你是在一個E2帳戶:

  1. 作為計算帳戶所有者或管理員,登錄到賬戶控製台

  2. 工作區並點擊您的工作區名稱。

  3. 憑證框,注意角色名在攻擊的作用。

    例如,在攻擊的角色攻擊:aws:我::123456789123:/ finance-prod角色,finance-prod角色的名字。

如果你不是E2帳戶:

  1. 作為帳戶所有者,登錄到賬戶控製台

  2. 單擊AWS帳戶選項卡。

  3. 注意角色名稱的最後攻擊的角色,在這裏testco-role

    我的角色

步驟4:添加膠水目錄實例配置EC2政策

  1. 在AWS控製台中,去我的服務。

  2. 單擊角色在側邊欄選項卡。

  3. 在步驟3中單擊你提到的角色。

  4. 在權限選項卡上,單擊政策。

  5. 點擊編輯政策

  6. 修改政策允許磚通過實例配置文件您在步驟1中創建的EC2實例火花集群。這是一個新政策應該是什麼樣子的例子。取代< iam-role-for-glue-access >有您在步驟1中創建的角色。

    • 賬戶的E2版本的平台Beplay体育安卓版本:

      {“版本”:“2012-10-17”,“聲明”:({“席德”:“Stmt1403287045000”,“效應”:“允許”,“行動”:(“ec2: AssociateDhcpOptions”,“ec2: AssociateIamInstanceProfile”,“ec2: AssociateRouteTable”,“ec2: AttachInternetGateway”,“ec2: AttachVolume”,“ec2: AuthorizeSecurityGroupEgress”,“ec2: AuthorizeSecurityGroupIngress”,“ec2: CancelSpotInstanceRequests”,“ec2: CreateDhcpOptions”,“ec2: CreateInternetGateway”,“ec2: CreatePlacementGroup”,“ec2: CreateRoute”,“ec2: CreateSecurityGroup”,“ec2: CreateSubnet”,“ec2: CreateTags”,“ec2: CreateVolume”,“ec2: CreateVpc”,“ec2: CreateVpcPeeringConnection”,“ec2: DeleteInternetGateway”,“ec2: DeletePlacementGroup”,“ec2: DeleteRoute”,“ec2: DeleteRouteTable”,“ec2: DeleteSecurityGroup”,“ec2: DeleteSubnet”,“ec2: DeleteTags”,“ec2: DeleteVolume”,“ec2: DeleteVpc”,“ec2: DescribeAvailabilityZones”,“ec2: DescribeIamInstanceProfileAssociations”,“ec2: DescribeInstanceStatus”,“ec2: DescribeInstances”,“ec2: DescribePlacementGroups”,“ec2: DescribePrefixLists”,“ec2: DescribeReservedInstancesOfferings”,“ec2: DescribeRouteTables”,“ec2: DescribeSecurityGroups”,“ec2: DescribeSpotInstanceRequests”,“ec2: DescribeSpotPriceHistory”,“ec2: DescribeSubnets”,“ec2: DescribeVolumes”,“ec2: DescribeVpcs”,“ec2: DetachInternetGateway”,“ec2: DisassociateIamInstanceProfile”,“ec2: ModifyVpcAttribute”,“ec2: ReplaceIamInstanceProfileAssociation”,“ec2: RequestSpotInstances”,“ec2: RevokeSecurityGroupEgress”,“ec2: RevokeSecurityGroupIngress”,“ec2: RunInstances”,“ec2: TerminateInstances”),“資源”:(“*”]},{“效應”:“允許”,“行動”:“我:PassRole”,“資源”:“攻擊:aws:我::< aws-account-id-databricks >: / < iam-role-for-glue-access >”角色}]}
      • 賬戶在其他版本的平台:Beplay体育安卓版本

        {“版本”:“2012-10-17”,“聲明”:({“席德”:“Stmt1403287045000”,“效應”:“允許”,“行動”:(“ec2: AssociateDhcpOptions”,“ec2: AssociateIamInstanceProfile”,“ec2: AssociateRouteTable”,“ec2: AttachInternetGateway”,“ec2: AttachVolume”,“ec2: AuthorizeSecurityGroupEgress”,“ec2: AuthorizeSecurityGroupIngress”,“ec2: CancelSpotInstanceRequests”,“ec2: CreateDhcpOptions”,“ec2: CreateInternetGateway”,“ec2: CreateKeyPair”,“ec2: CreateRoute”,“ec2: CreateSecurityGroup”,“ec2: CreateSubnet”,“ec2: CreateTags”,“ec2: CreateVolume”,“ec2: CreateVpc”,“ec2: CreateVpcPeeringConnection”,“ec2: DeleteInternetGateway”,“ec2: DeleteKeyPair”,“ec2: DeleteRoute”,“ec2: DeleteRouteTable”,“ec2: DeleteSecurityGroup”,“ec2: DeleteSubnet”,“ec2: DeleteTags”,“ec2: DeleteVolume”,“ec2: DeleteVpc”,“ec2: DescribeAvailabilityZones”,“ec2: DescribeIamInstanceProfileAssociations”,“ec2: DescribeInstanceStatus”,“ec2: DescribeInstances”,“ec2: DescribePrefixLists”,“ec2: DescribeReservedInstancesOfferings”,“ec2: DescribeRouteTables”,“ec2: DescribeSecurityGroups”,“ec2: DescribeSpotInstanceRequests”,“ec2: DescribeSpotPriceHistory”,“ec2: DescribeSubnets”,“ec2: DescribeVolumes”,“ec2: DescribeVpcs”,“ec2: DetachInternetGateway”,“ec2: DisassociateIamInstanceProfile”,“ec2: ModifyVpcAttribute”,“ec2: ReplaceIamInstanceProfileAssociation”,“ec2: RequestSpotInstances”,“ec2: RevokeSecurityGroupEgress”,“ec2: RevokeSecurityGroupIngress”,“ec2: RunInstances”,“ec2: TerminateInstances”),“資源”:(“*”]},{“效應”:“允許”,“行動”:“我:PassRole”,“資源”:“攻擊:aws:我::< aws-account-id-databricks >: / < iam-role-for-glue-access >”角色}]}
  7. 點擊審查政策

  8. 點擊保存更改

第五步:添加膠磚工作區目錄實例配置文件

  1. 去管理設置頁麵。

  2. 單擊實例配置文件選項卡。

  3. 單擊添加實例配置文件按鈕。出現一個對話框。

  4. 粘貼在實例配置文件從步驟1攻擊。

    實例配置文件是

    磚確認了這個實例配置文件是在語法上和語義上都是正確的。驗證語義正確性,磚幹由啟動集群實例配置文件。任何失敗在這個幹燥的運行在UI中產生一個驗證錯誤。

    請注意

    實例的驗證配置文件可能會失敗,如果它包含tag-enforcement政策,防止合法實例添加一個概要文件。如果驗證失敗,你還想添加實例配置文件數據磚,使用API和指定的實例文件skip_validation

  5. 點擊添加

  6. 選擇指定的用戶可以啟動集群實例配置文件。

    添加用戶

第六步:啟動集群與膠水目錄實例配置文件

  1. 創建一個集群。

  2. 單擊實例選項卡在集群上創建頁麵。

  3. 實例配置文件下拉列表中,選擇實例配置文件。

    選擇實例配置文件
  4. 驗證您可以訪問膠目錄,在筆記本上使用下麵的命令:

    顯示數據庫;

    如果命令成功,這磚集群運行時配置為使用膠水。根據您的AWS帳戶和膠水,您可能需要執行兩個額外的步驟:

    • 如果磚的AWS帳戶部署和膠水的AWS帳戶數據目錄是不同的,額外cross-account設置是必要的。

      spark.hadoop.hive.metastore.glue.catalogid< aws-account-id-for-glue-catalog >火花配置

    • 如果目標目錄膠比磚部署在不同的地區,也指定spark.hadoop.aws.region< aws-region-for-glue-catalog >

    提示

    提醒人們,spark.databricks.hive.metastore.glueCatalog。實在是需要啟用配置連接到AWS膠水。

  5. 引發包括對蜂巢的內置支持,但這是否取決於磚使用運行時版本。

    • 隔離模式:內置支持蜂巢是禁用的。圖書館為蜂巢1.2.1。spark2加載從/磚/膠水/。在磚8.3運行時,隔離模式,不能啟用被禁用。在磚運行時7.3 LTS和磚運行時8.4及以上,隔離模式是默認的,但可以被禁用。

    • 內置模式啟用:對蜂巢的內置支持,以及版本取決於引發的蜂巢。在磚運行時7.3 LTS和磚運行時8.4及以上,您可以啟用內置模式通過設置spark.databricks.hive.metastore.glueCatalog.isolation.enabled在集群上。

  6. 要啟用憑據透傳,集spark.databricks.passthrough.enabled真正的。這需要磚運行時7.3 LTS或磚運行時8.4或以上。磚上運行時7.3 LTS和磚運行時8.4及以上,這個設置會自動使內置模式。

限製

  • 使用AWS膠數據目錄的metastore磚有可能比默認的蜂巢metastore更高的延遲。有關更多信息,請參見經曆比磚蜂巢metastore更高的延遲與膠水目錄在故障排除部分。

  • 默認的數據庫創建一個位置設置為一個URI使用dbfs:文件係統(磚)計劃。這個位置不是從AWS訪問應用程序外磚如AWS EMR或AWS雅典娜。作為一個解決方案,使用位置子句指定一桶位置,等s3: / / mybucket,當你調用創建。另外,一個數據庫中創建表除了默認的數據庫和設置位置數據庫的一個S3的位置。

  • 你不能動態地膠目錄和一個蜂巢metastore之間切換。你必須重新啟動新火花的集群配置生效。

  • 憑據支持透傳隻在磚運行時8.4及以上。

  • 不支持以下特性:

    • 磚連接

    • 跨係統的交互,你共享相同的元數據目錄或實際表數據跨多個係統。

故障排除

較高的延遲膠比磚蜂巢metastore目錄

使用膠水數據目錄作為外部metastore可能導致延遲高於默認磚蜂巢metastore托管。磚推薦膠水目錄中啟用客戶端緩存客戶端。以下小節將展示如何配置客戶端緩存表和數據庫。您可以配置客戶端緩存集群SQL倉庫

請注意

  • 沒有客戶端緩存清單表的操作可以獲得的

  • time - to - live (TTL)配置之間權衡緩存的有效性和可容忍的過時的元數據。選擇一個特定場景TTL值是有意義的。

更多細節,請參閱為膠啟用客戶端緩存目錄在AWS文檔。

spark.hadoop.aws.glue.cache.table。實現真正的spark.hadoop.aws.glue.cache.table。大小1000spark.hadoop.aws.glue.cache.table。ttl-mins 30

數據庫

spark.hadoop.aws.glue.cache.db。實現真正的spark.hadoop.aws.glue.cache.db。大小1000spark.hadoop.aws.glue.cache.db。ttl-mins 30

沒有實例配置文件附加到磚集群運行時

如果沒有實例配置文件是附加到磚運行時的集群,然後發生下列異常運行任何操作時,需要metastore查找:

org.apache.spark.sql。AnalysisException: . lang。RuntimeException: com.amazonaws。SdkClientException:無法加載AWS憑證鏈中的任何提供者:[EnvironmentVariableCredentialsProvider:無法加載AWS憑證從環境變量(AWS_ACCESS_KEY_ID(或AWS_ACCESS_KEY)和AWS_SECRET_KEY(或AWS_SECRET_ACCESS_KEY)), SystemPropertiesCredentialsProvider:無法加載從Java係統屬性(AWS AWS憑據。com.amazonaws.auth.profile accessKeyId和aws.secretKey)。ProfileCredentialsProvider@2245a35d:概要文件不能為空,com.amazonaws.auth。EC2ContainerCredentialsProviderWrapper@52be6b57: The requested metadata is not found at https://169.254.169.254/latest/meta-data/iam/security-credentials/];

附加一個實例配置文件有足夠權限訪問所需的膠目錄。

膠水目錄權限不足

當實例配置文件不授予權限執行metastore所需操作,發生異常如下:

org.apache.spark.sql。AnalysisException: . lang。RuntimeException: MetaException(信息:無法驗證存在違約數據庫:com.amazonaws.services.glue.model。AccessDeniedException:用戶:在攻擊:aws: sts:: < aws-account-id >:自選角色/ < role-id > /……未被授權執行:膠:GetDatabase資源:在攻擊:aws:膠:< aws-region-for-glue-catalog >: < aws-account-id-for-glue-catalog >:目錄(服務:AWSGlue;狀態碼:400;錯誤代碼:AccessDeniedException;請求ID: <請求ID >));

檢查連接實例配置文件指定了足夠的權限。例如,在前麵的例外,添加膠水:GetDatabase實例配置文件。

允許錯誤膠水:GetDatabase當直接運行SQL文件

在磚運行時版本低於8.0,當運行一個SQL查詢直接在文件例如,

選擇*拚花路徑- - - - - -- - - - - -數據

你可能會遇到一個錯誤如下:

錯誤的SQL語句:AnalysisException…未被授權執行:膠:GetDatabase資源:< glue-account >:數據庫/拚花嗎

這發生在當我不予許可執行政策膠水:GetDatabase在資源上數據庫/ < datasource-format >,在那裏< datasource-format >是一種數據源格式如拚花δ

我政策允許添加權限膠水:GetDatabase數據庫/ < datasource-format >

有限製的實施引發SQL分析儀,它試圖解決關係攻擊目錄回落之前嚐試解決注冊數據源為SQL文件。回退隻能當最初試圖解決對目錄返回沒有一個例外。

盡管資源數據庫/ < datasource-format >可能不存在,後備文件成功運行SQL查詢,我政策膠目錄必須允許執行膠水:GetDatabase行動。

在磚運行時8.0及以上的,這個問題是這個解決方案不再需要自動處理。

不匹配的膠水目錄ID

默認情況下,磚集群試圖連接到膠目錄在同一個AWS帳戶用於磚的部署。

如果目標膠目錄是在一個不同的磚的AWS帳戶或地區部署,和spark.hadoop.hive.metastore.glue.catalogid火花配置沒有設置,集群將連接到磚的膠水在AWS帳戶目錄部署的目標目錄。

如果spark.hadoop.hive.metastore.glue.catalogid配置設置,但在步驟2中配置不正確,任何訪問metastore異常原因如下:

org.apache.spark.sql。AnalysisException: . lang。RuntimeException: MetaException(信息:無法驗證存在違約數據庫:com.amazonaws.services.glue.model。AccessDeniedException:用戶:攻擊:aws: sts:: < aws-account-id >:自選角色/ < role-id > /……未被授權執行:膠:GetDatabase資源:在攻擊:aws:膠:< aws-region-for-glue-catalog >: < aws-account-id-for-glue-catalog >:目錄(服務:AWSGlue;狀態碼:400;錯誤代碼:AccessDeniedException;請求ID: <請求ID >));

驗證配置與步驟2和6。

雅典娜目錄與膠水目錄衝突

如果您使用亞馬遜雅典娜創建表或亞馬遜光譜紅移在8月14日,2017年,存儲在一個數據庫和表Athena-managed目錄,這是獨立於AWS膠水數據目錄。集成數據磚與這些表運行時,您必須升級到AWS膠數據目錄。否則,磚運行時無法連接到膠目錄或未能創建和訪問一些數據庫,和異常消息可能是神秘的。

例如,如果數據庫中存在“默認”雅典娜目錄而不是膠水目錄,將產生一個異常,這樣的消息:

AWSCatalogMetastoreClient:無法驗證默認數據庫的存在:com.amazonaws.services.glue.model。AccessDeniedException:請遷移您的目錄來啟用訪問這個數據庫(服務:AWSGlue;狀態碼:400;錯誤代碼:AccessDeniedException;請求ID: <請求ID >)

按照說明在升級到AWS膠數據目錄在亞馬遜雅典娜用戶指南

與空數據庫中創建表位置

數據庫在膠目錄可能從各種來源創建。數據庫由磚默認運行時具有一個非空的位置字段。數據庫中創建膠控製台直接或從其他渠道進口,可能一個空位置字段。

當磚運行時試圖與一個空數據庫中創建一個表位置場,發生異常如下::

IllegalArgumentException:不能創建一個路徑從一個空字符串

創建數據庫在膠與一個有效的非空目錄路徑位置字段中,指定位置當創建表的SQL,或者指定選項(“路徑”,< some-valid-path >)DataFrame API。

當你創建一個數據庫在AWS膠控製台中,隻有名稱是必需的;“描述”和“位置”被標記為可選的。然而,蜂巢metastore操作取決於“位置”,所以你必須指定數據庫將用於磚運行時。

從共享訪問表之間數據磚工作區膠水目錄

位置關鍵字可以設置在數據庫級別(所有表控製默認位置)的一部分創建聲明。如果指定的路徑位置裝桶,您必須使用相同的山名的所有共享膠磚工作區目錄。因為膠水目錄存儲引用數據使用指定的路徑位置值,使用相同的掛載點的名稱確保每個工作區可以訪問數據庫對象存儲在S3 bucket中。

訪問其他係統中創建表和視圖

訪問其他係統創建的表和視圖,如AWS雅典娜還是很快,可能會或可能不會在磚工作運行或火花,不支持這些操作。他們用神秘的錯誤消息可能會失敗。例如,訪問視圖由雅典娜,磚運行時,或火花可能會拋出一個異常:

IllegalArgumentException:不能創建一個路徑從一個空字符串

這個異常是因為雅典娜和迅速的將元數據存儲在一個格式不同於磚運行時和火花的期待什麼。