![](/img/trans.png)
[英]why does spark need S3 to connect Redshift warehouse? Meanwhile python pandas can read Redshift table directly
[英]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對話,您必須執行一些特定的操作:
獲取redshift jdbc,將其包括在您的spark類路徑中,並在jar中添加--jars標志。
在IAM中為Redshift創建特殊角色。 這意味着首先要創建角色,然后在開始處選擇redshift類/選項,因此主要資源實際上是redshift,然后從那里添加其他權限。
進入redshift並將該新角色添加到您的redshift集群中
在您的spark應用程序中提供角色的ARN
確保在新角色中授予S3權限,因為當spark和redshift通過JDBC相互通信時,所有數據都作為中間文件集存儲在s3中...就像S3
的臨時交換文件一樣。
注意 :如果遇到有關S3的權限錯誤,請嘗試將文件路徑中的協議從s3://
更改為s3a://
-出於某種原因而繞過該安全性。 資源
在完成所有這些操作之后,redshift和spark可以相互交談。 它有很多東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.