簡體   English   中英

默認的EMR Spark是否已預先配置為直接訪問redshift表?

[英]Does the default EMR Spark come preconfigured to directly access redshift tables?

EMR Spark集群和redshift之間的讀/寫操作絕對可以通過以下方式完成。 中間數據轉儲到s3。

但是,有一些火花庫,可以將redshift直接視為數據源: https : //github.com/databricks/spark-redshift

EMR 5.0 Spark集群是否已預配置了庫和用於Redshift訪問的訪問憑證?

EMR 5.0 Spark集群是否已預配置了庫和用於Redshift訪問的訪問憑證?

不,EMR不提供數據塊提供的該庫。

訪問Redshift:與Redshift的連接不需要任何基於IAM的身份驗證。 它僅需要在Redshift的默認端口5439的安全組中列入白名單的EMR群集(主/從IP或EMR主/從SG)。

現在,由於Spark執行程序基於spark命令運行COPY / LOAD命令,並且這些命令需要訪問S3,因此您需要配置此處提到的IAM憑據: https : //github.com/databricks/spark-redshift#aws-credentials

要從EMR訪問S3:

默認情況下,EMR節點承擔一個稱為EMR_EC2_DefaultRole的IAM實例配置文件角色,此角色的權限定義了可以訪問哪些EMR節點及其實體(使用InstanceProfileCredentialsProvider)。 因此,您可以使用文檔中提到的第四種方法 可以像下面這樣檢索(AccessKey,SecretKey,Tokens),並且可以將其用作Option或Parameter(temporary_aws_access_key_id,temporary_aws_secret_access_key,temporary_aws_session_token)

https://github.com/databricks/spark-redshift#parameters

//Get cred's from IAM instance profile
val provider = new InstanceProfileCredentialsProvider()
val credentials: AWSSessionCredentials = provider.getCredentials.asInstanceOf[AWSSessionCredentials]
val token = credentials.getSessionToken
val awsAccessKey = credentials.getAWSAccessKeyId
val awsSecretKey = credentials.getAWSSecretKey

EMR_EC2_DefaultRole應該具有對用作臨時目錄的S3對象進行讀/寫的權限

最后,EMR確實在/usr/share/aws/redshift/jdbc上包含Redshift的JDBC驅動程序,可在spark的驅動程序和執行程序類路徑( --jars )中使用。

為了允許在EMR和任何其他AWS資源之間進行訪問,您需要編輯應用於主節點/核心節點的角色(標識和訪問管理,又稱“ IAM”),並添加使用您所使用的服務的權限需要,例如S3(默認情況下已啟用),Redshift等。

旁注,在某些情況下,您可以在應用程序中使用AWS開發工具包來與其他服務的API交互。

要使Spark成功與redshift對話,您必須執行一些特定的操作:

  1. 獲取redshift jdbc,將其包括在您的spark類路徑中,並在jar中添加--jars標志。

  2. 在IAM中為Redshift創建特殊角色。 這意味着首先要創建角色,然后在開始處選擇redshift類/選項,因此主要資源實際上是redshift,然后從那里添加其他權限。

  3. 進入redshift並將該新角色添加到您的redshift集群中

  4. 在您的spark應用程序中提供角色的ARN

  5. 確保在新角色中授予S3權限,因為當spark和redshift通過JDBC相互通信時,所有數據都作為中間文件集存儲在s3中...就像S3的臨時交換文件一樣。

    注意 :如果遇到有關S3的權限錯誤,請嘗試將文件路徑中的協議從s3://更改為s3a:// -出於某種原因而繞過該安全性。 資源

在完成所有這些操作之后,redshift和spark可以相互交談。 它有很多東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM