亞馬遜紅移
您可以使用亞馬遜紅移數據源數據加載到Apache火花SQL DataFrames紅移和寫回紅移表。紅移數據源使用Amazon S3來有效地傳輸數據的紅移,使用JDBC來自動觸發適當的複製
和卸載
紅移的命令。
紅移等批處理工作負載的數據來源是更好的ETL處理而不是交互式查詢因為每個查詢執行可能提取大量數據S3。如果你計劃執行多個查詢相同的數據在紅移,磚建議提取的數據保存在一個優化的格式等Apache拚花。
請注意
你不應該創建一個紅移集群內部磚VPC,因為它會導致管理權限的問題由於磚VPC的安全模型。您應該創建自己的VPC,然後執行VPC凝視連接數據磚紅移的實例。
安裝
磚運行時包括亞馬遜紅移的數據源。不需要額外的安裝。紅移的版本數據源包含在每個磚磚中列出的運行時版本的運行時發布說明。
紅移的數據源也需要Redshift-compatible JDBC驅動程序。因為紅移是基於PostgreSQL數據庫係統,您可以使用PostgreSQL JDBC驅動程序附帶磚運行時或亞馬遜推薦紅移的JDBC驅動程序。無需安裝使用PostgreSQL JDBC驅動程序。PostgreSQL JDBC驅動程序的版本包含在每個磚磚中列出的運行時版本的運行時發布說明。
在磚運行時的11.2及以上,磚運行時包含了紅移的JDBC驅動程序。看到_驅動程序版本包含在每個磚運行時。用戶提供的司機仍然支持,優先於捆綁JDBC驅動程序。
在磚運行時的11.1和下麵,手動安裝紅移的JDBC驅動程序是必需的。
手動安裝紅移JDBC驅動程序:
請注意
磚推薦使用最新版本的紅移的JDBC驅動程序。下麵的紅移JDBC驅動程序版本1.2.41有以下限製:
驅動程序的版本1.2.16返回空數據時使用
在哪裏
條款一個SQL查詢。驅動程序的版本低於1.2.41可能返回無效的結果,因為一個列的nullability錯誤報告為“不空”而不是“未知”。
使用
配置紅移的JDBC URL連接基於司機:
捆綁PostgreSQL JDBC驅動程序:
jdbc: postgresql: / /…
紅移JDBC驅動程序:
jdbc:紅移:/ /…
下麵的例子演示結合紅移的司機。取代url
參數值,如果你使用PostgreSQL JDBC驅動程序。
一旦你有了配置你的AWS證書,您可以使用火花數據源的數據源API在Python中,SQL, R,或Scala:
#從一個表讀取數據df=火花。讀\。格式(“com.databricks.spark.redshift”)\。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)\。選項(“數據表”,“< your-table-name >”)\。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)\。負載()#讀取數據的查詢df=火花。讀\。格式(“com.databricks.spark.redshift”)\。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)\。選項(“查詢”,“選擇x, count (*) < your-table-name > group by x”)\。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)\。負載()#應用轉換到數據之後,您可以使用#數據源API來編寫回到另一個表的數據#寫回到一個表df。寫\。格式(“com.databricks.spark.redshift”)\。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)\。選項(“數據表”,“< your-table-name >”)\。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)\。模式(“錯誤”)\。保存()#使用我編寫回表基於角色的驗證df。寫\。格式(“com.databricks.spark.redshift”)\。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)\。選項(“數據表”,“< your-table-name >”)\。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)\。選項(“aws_iam_role”,“攻擊:aws:我::123456789000:角色/ redshift_iam_role”)\。模式(“錯誤”)\。保存()
使用SQL讀取數據:
創建表example_table使用com。磚。火花。紅移選項(數據表“< your-table-name >”,tempdir“s3a: / / <你的水桶> / < your-directory-path >”,url“jdbc:紅移:/ / < the-rest-of-the-connection-string >”);
使用SQL編寫數據:
——創建一個新表,拋出錯誤如果表具有相同名稱已經存在創建表example_table使用com。磚。火花。紅移選項(數據表“< your-table-name >”,tempdir“s3a: / / <你的水桶> / < your-directory-path >”url“jdbc:紅移:/ / < the-rest-of-the-connection-string >”)作為選擇*從table_to_save;
SQL API隻支持創建新表,而不是覆蓋或附加;這對應於其他語言api的默認的保存模式。
讀取數據使用R:
df< -read.df(零,“com.databricks.spark.redshift”,tempdir=“s3a: / / <你的水桶> / < your-directory-path >”,數據表=“< your-table-name >”,url=" jdbc:紅移:/ / < the-rest-of-the-connection-string >”)
/ /從一個紅移表得到一些數據瓦爾df:DataFrame=火花。讀。格式(“com.databricks.spark.redshift”)。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)。選項(“數據表”,“< your-table-name >”)。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)。負載()/ /加載數據從一個紅移的查詢瓦爾df:DataFrame=火花。讀。格式(“com.databricks.spark.redshift”)。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)。選項(“查詢”,“選擇x, count (*) < your-table-name > group by x”)。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)。負載()/ /轉換應用到數據之後,您可以使用/ /數據源API來編寫回到另一個表的數據/ /寫一個表df。寫。格式(“com.databricks.spark.redshift”)。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)。選項(“數據表”,“< your-table-name >”)。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)。模式(“錯誤”)。保存()/ /寫回表使用我基於角色的驗證df。寫。格式(“com.databricks.spark.redshift”)。選項(“url”," jdbc:紅移:/ / < the-rest-of-the-connection-string >”)。選項(“數據表”,“< your-table-name >”)。選項(“aws_iam_role”,“攻擊:aws:我::123456789000:角色/ redshift_iam_role”)。選項(“tempdir”,“s3a: / / <你的水桶> / < your-directory-path >”)。模式(“錯誤”)。保存()
配置
驗證S3和紅移
數據源包括多個網絡連接,見下圖:
┌───────┐┌───────────────────> S3││<─────────────────┐│我或鍵└───────┘我或鍵││^││││我或鍵v v┌──────v────┐┌────────────┐┌───────────┐│┌──────────┴┐│紅移││火花│││火花│││<──────────>││司機<────────> |執行人│└────────────┘└───────────┘└───────────┘JDBC與配置用戶名/密碼火花(默認啟用SSL)
數據源讀取和寫入數據傳輸數據時S3 /紅移。因此,它需要AWS憑證與讀和寫訪問一個S3 bucket(指定使用tempdir
配置參數)。
以下部分描述每個連接的身份驗證配置選項:
火花S3
充當中介S3存儲大量數據讀取或寫入紅移。火花連接到S3使用Hadoop文件係統接口和直接使用Amazon S3 Java SDK的客戶端。這個連接支持AWS鍵或實例配置文件不支持(DBFS掛載點,所以如果你不想依靠AWS鑰匙你應該使用集群實例配置文件)。有四個方法提供這些證書:
默認憑據提供程序鏈(最好的選擇對於大多數用戶):自動檢索通過AWS憑證DefaultAWSCredentialsProviderChain。如果你使用實例配置文件驗證S3,那麼你應該使用這種方法。
以下提供憑證優先於這個默認的方法。
在Hadoop設置鍵配置:您可以指定使用AWS鍵Hadoop配置屬性。如果你的
tempdir
配置指向一個s3a: / /
文件係統,您可以設置fs.s3a.access.key
和fs.s3a.secret.key
屬性在Hadoop XML配置文件或電話sc.hadoopConfiguration.set ()
配置Hadoop引發的全球配置。如果你使用一個s3n: / /
文件係統,您可以提供遺留配置鍵,如以下示例所示。例如,如果您正在使用
s3a
文件係統,添加:sc。hadoopConfiguration。集(“fs.s3a.access.key”,“< your-access-key-id >”)sc。hadoopConfiguration。集(“fs.s3a.secret.key”,“< your-secret-key >”)
的遺產
s3n
文件係統,添加:sc。hadoopConfiguration。集(“fs.s3n.awsAccessKeyId”,“< your-access-key-id >”)sc。hadoopConfiguration。集(“fs.s3n.awsSecretAccessKey”,“< your-secret-key >”)
下麵的命令依靠一些火花內部,但應與所有PySpark版本和將來不太可能改變:
sc。_jsc。hadoopConfiguration()。集(“fs.s3a.access.key”,“< your-access-key-id >”)sc。_jsc。hadoopConfiguration()。集(“fs.s3a.secret.key”,“< your-secret-key >”)
通過假設一個我的角色:你可以用一個實例配置文件可以假設我的角色。指定角色的攻擊,你必須實例配置文件附加到集群,並提供以下配置密鑰:
sc。hadoopConfiguration。集(“fs.s3a.credentialsType”,“AssumeRole”)sc。hadoopConfiguration。集(“fs.s3a.stsAssumeRole.arn”,<我- - - - - -角色- - - - - -在攻擊- - - - - -來- - - - - -是- - - - - -假定>)/ /一個可選的時間,表示為一個數量和單位/ /時間,如“15米”或“1 h”sc。hadoopConfiguration。集(“fs.s3a.assumed.role.session.duration”,<持續時間>)
sc。_jsc。hadoopConfiguration()。集(“fs.s3a.credentialsType”,“AssumeRole”)sc。_jsc。hadoopConfiguration()。集(“fs.s3a.stsAssumeRole.arn”,<我- - - - - -角色- - - - - -在攻擊- - - - - -來- - - - - -是- - - - - -假定>)#一個可選的時間,表示為一個數量和單位15 #時間,如“m”或“1 h”sc。_jsc。hadoopConfiguration()。集(“fs.s3a.assumed.role.session.duration”,<持續時間>)
紅移到S3
紅移也連接到S3複製
和卸載
查詢。這個連接進行身份驗證的方法有三種:
有紅移假設一個我的角色(最安全):你可以授予紅移許可期間承擔了我的角色
複製
orgydF4y2Ba卸載
操作,然後配置數據源指示紅移使用這些角色:創建一個給予你適當的S3權限鬥我的角色。
跟著導遊授權亞馬遜紅移來訪問其他AWS服務代表你配置這個角色的信任策略為了讓紅移承擔這個角色。
遵循的步驟使用我的角色授權複製和卸載操作指導助理,我的角色和你的紅移集群。
設置數據源
aws_iam_role
選擇角色的攻擊。
火花的S3憑證紅移:如果
forward_spark_s3_credentials
選項設置為真正的
然後數據源自動發現火花的憑證是用來連接到S3和轉發這些憑證在JDBC紅移。如果火花驗證S3使用實例配置文件然後一組臨時STS證書轉發給紅移;否則,AWS密鑰轉發。JDBC查詢嵌入這些憑據因此磚強烈建議您啟用SSL加密的JDBC連接時使用此身份驗證方法。使用安全令牌服務(STS)憑證:你可以配置
temporary_aws_access_key_id
,temporary_aws_secret_access_key
,temporary_aws_session_token
配置屬性指向臨時密鑰通過AWS創建的安全令牌服務。因此JDBC查詢嵌入這些憑證強烈推薦啟用SSL加密的JDBC連接時使用此身份驗證方法。如果您選擇這個選項然後意識到這種風險,證書到期前讀/寫操作成功。
這三個選項是相互排斥的,您必須顯式地選擇使用哪一個。
加密
確保JDBC:除非存在任何SSL-related設置JDBC URL,也默認數據源支持SSL加密和驗證紅移服務器是值得信賴的(也就是說,
sslmode = verify-full
)。,從亞馬遜服務器自動下載服務器證書第一次。如果失敗,預捆綁的證書文件作為後備。這適用於紅移和PostgreSQL JDBC驅動程序。介紹了自動SSL配置2.1.1-db4集群形象(不支持);之前的版本並不自動配置SSL和使用默認的JDBC驅動程序的配置(SSL禁用)。這個功能有問題,或者你隻是想禁用SSL,您可以調用
.option (“autoenablessl”,“假”)
在你的DataFrameReader
orgydF4y2BaDataFrameWriter
。如果你想指定自定義SSL-related設置,您可以按照紅移的說明文檔:在Java中使用SSL和服務器證書和JDBC驅動程序的配置選項任何SSL-related選項出現在JDBC
url
優先考慮使用數據源(即自動配置不會觸發)。加密存儲在S3中卸載數據(數據存儲當閱讀從紅移):根據紅移的文檔卸載數據S3”,自動卸載加密數據文件使用Amazon S3服務器端加密(SSE-S3)。”
紅移也支持與自定義客戶端加密密鑰(見:卸載加密的數據文件),但缺乏能力的數據源指定所需的對稱密鑰。
加密存儲在S3中複製數據(數據存儲在寫紅移):根據紅移的文檔從Amazon S3加載加密的數據文件:
您可以使用複製
命令加載數據文件上傳與AWS-managed Amazon S3使用服務器端加密加密密鑰(SSE-S3或SSE-KMS),客戶端加密,或兩者兼而有之。複製不支持Amazon S3與客供服務器端加密密鑰(SSE-C)。
使用此功能,配置您的Hadoop文件係統使用S3Amazon S3加密。這將不加密清單
寫文件,其中包含所有文件的列表。
參數
火花中提供的參數映射或選擇SQL支持以下設置:
參數 |
要求 |
默認的 |
描述 |
---|---|---|---|
數據表 |
是的,除非指定查詢。 |
沒有一個 |
表創建或從紅移。這個參數時需要保存數據回紅移。 |
查詢 |
是的,除非指定數據表。 |
沒有一個 |
查詢閱讀從紅移。 |
用戶 |
沒有 |
沒有一個 |
紅移的用戶名。必須配合使用密碼選項。可以使用隻有在用戶和密碼不通過在URL中,都將導致一個錯誤。用戶名包含特殊字符時使用這個參數需要轉義。 |
密碼 |
沒有 |
沒有一個 |
紅移的密碼。必須配合使用 |
url |
是的 |
沒有一個 |
JDBC URL的格式 jdbc: subprotocol: / / <主機>:<口> /數據庫?用戶= <用戶名>密碼= <密碼>
|
search_path |
沒有 |
沒有一個 |
設置模式搜索路徑在紅移。將使用嗎 |
aws_iam_role |
隻有在使用我的角色授權。 |
沒有一個 |
完全指定的攻擊我紅移複製/卸載操作的角色例如,集群與紅移 |
forward_spark_s3_credentials |
沒有 |
|
如果 |
temporary_aws_access_key_id |
沒有 |
沒有一個 |
AWS訪問密鑰,必須寫權限S3 bucket。 |
temporary_aws_secret_access_key |
沒有 |
沒有一個 |
AWS秘密訪問密鑰對應提供訪問密鑰。 |
temporary_aws_session_token |
沒有 |
沒有一個 |
AWS會話令牌對應提供訪問密鑰。 |
tempdir |
是的 |
沒有一個 |
可寫的位置在Amazon S3,用於卸載數據閱讀和Avro數據加載到寫作時紅移。如果你使用紅移數據源火花作為常規的ETL管道的一部分,它可以有用的設置生命周期策略一桶和使用它作為一個臨時的位置數據。 |
jdbcdriver |
沒有 |
由JDBC URL的subprotocol決定。 |
要使用JDBC驅動程序的類名。這個類必須在類路徑中。在大多數情況下,它應該不需要指定這個選項,作為適當的驅動程序類名應該自動由JDBC URL的subprotocol。 |
diststyle |
沒有 |
|
紅移分布的風格當創建一個表。可以是其中一個 |
distkey |
不,除非使用 |
沒有一個 |
表中的列的名稱作為主要分布在創建一個表。 |
sortkeyspec |
沒有 |
沒有一個 |
一個完整的紅移排序關鍵字定義。例子包括:
|
usestagingtable(棄用) |
沒有 |
|
設置這個棄用選項 因為設置 |
描述 |
沒有 |
沒有一個 |
一個描述表。將使用SQL命令發表評論,而且應該出現在大多數的查詢工具。看到也 |
預作用 |
沒有 |
沒有一個 |
一個 被警告說,如果這些命令失敗,它被視為一個錯誤,拋出異常。如果使用一個臨時表,更改恢複和備份表恢複以前如果行動失敗。 |
postactions |
沒有 |
沒有一個 |
一個 被警告說,如果這些命令失敗,它被視為一個錯誤,拋出異常。如果使用一個臨時表,更改恢複和備份表恢複如果行動失敗。 |
extracopyoptions |
沒有 |
沒有一個 |
額外的選項列表添加到紅移 因為這些選項添加到年底 |
tempformat(實驗) |
沒有 |
|
在S3中保存臨時文件的格式寫作時紅移。默認為 紅移明顯比裝船時Avro裝船時更快的CSV文件,所以使用tempformat可能提供了一個巨大的性能提升寫作時紅移。 |
csvnullstring(實驗) |
沒有 |
|
的字符串值為null當使用CSV tempformat寫。這應該是一個值,不出現在你的實際數據。 |
csvseparator ' '(實驗) |
沒有 |
|
分隔符用在編寫與tempformat設置為臨時文件 |
額外的配置選項
配置字符串列的最大大小
在創建紅移表時,默認行為是創建文本
列字符串列。紅移的商店文本
列如VARCHAR (256)
,所以這些列的最大大小是256字符(源)。
支持更大的列,可以使用最大長度
列元數據字段指定單個字符串的最大長度列。這也是有用的實現節省空間的性能優化,宣布與最大長度小於默認列。
請注意
由於火花,限製SQL和R語言api不支持列元數據修改。
df=…# dataframe你會想寫紅移#指定自定義每一列的寬度columnLengthMap={“language_code”:2,“country_code”:2,“url”:2083年,}#每一列元數據應用定製為(colName,長度)在columnLengthMap。iteritems():元數據={最大長度的:長度}df=df。withColumn(colName,df(colName]。別名(colName,元數據=元數據))df。寫\。格式(“com.databricks.spark.redshift”)\。選項(“url”,jdbcURL)\。選項(“tempdir”,s3TempDirectory)\。選項(“數據表”,sessionTable)\。保存()
這裏有一個例子更新多個列的元數據字段使用火花的Scala API:
進口org。apache。火花。sql。類型。MetadataBuilder/ /指定自定義每一列的寬度瓦爾columnLengthMap=地圖(“language_code”- >2,“country_code”- >2,“url”- >2083年)vardf=…/ / dataframe你會想寫紅移/ /每一列元數據應用定製columnLengthMap。foreach{情況下(colName,長度)= >瓦爾元數據=新MetadataBuilder()。putLong(“最大長度”,長度)。構建()df=df。withColumn(colName,df(colName)。作為(colName,元數據))}df。寫。格式(“com.databricks.spark.redshift”)。選項(“url”,jdbcURL)。選項(“tempdir”,s3TempDirectory)。選項(“數據表”,sessionTable)。保存()
設置一個自定義列類型
如果你需要手動設置列類型,您可以使用redshift_type
列元數據。例如,如果您希望覆蓋火花SQL模式- >紅移SQL
類型匹配器來分配一個用戶定義的列類型,您可以執行以下操作:
#指定自定義類型的每一列columnTypeMap={“language_code”:“CHAR (2)”,“country_code”:“CHAR (2)”,“url”:“BPCHAR (111)”,}df=…# dataframe你會想寫紅移#每一列元數據應用定製為(colName,colType)在columnTypeMap。iteritems():元數據={“redshift_type”:colType}df=df。withColumn(colName,df(colName]。別名(colName,元數據=元數據))
進口org。apache。火花。sql。類型。MetadataBuilder/ /指定自定義類型的每一列瓦爾columnTypeMap=地圖(“language_code”- >“CHAR (2)”,“country_code”- >“CHAR (2)”,“url”- >“BPCHAR (111)”)vardf=…/ / dataframe你會想寫紅移/ /每一列元數據應用定製columnTypeMap。foreach{情況下(colName,colType)= >瓦爾元數據=新MetadataBuilder()。putString(“redshift_type”,colType)。構建()df=df。withColumn(colName,df(colName)。作為(colName,元數據))}
配置列編碼
當創建一個表,使用編碼
列元數據字段指定為每個列(見壓縮編碼亞馬遜文檔可用的編碼)。
查詢下推到紅移
火花優化器將以下運營商分成紅移:
過濾器
項目
排序
限製
聚合
加入
在項目
和過濾器
它支持以下表達式:
大多數布爾邏輯運算符
比較
基本的算術運算
數字和字符串類型轉換
多數字符串函數
標量子查詢,如果他們完全可以下推到紅移。
請注意
這個疊加不支持表達式操作日期和時間戳。
在聚合
它支持以下聚合函數:
AVG
數
馬克斯
最小值
總和
STDDEV_SAMP
STDDEV_POP
VAR_SAMP
VAR_POP
結合截然不同的
條款,適用。
在加入
它支持以下類型的連接:
內心的加入
左外加入
正確的外加入
左半加入
左反加入
子查詢重寫成
加入
通過優化器。在哪裏存在
,在哪裏不存在
請注意
加入疊加不支持完整的外加入
。
查詢的疊加可能最有益限製
。一個查詢等選擇*從large_redshift_table限製10
可能需要很長時間,因為整個表將首先被卸載S3作為中間結果。疊加,限製
執行在紅移。與聚合查詢,將聚合分解成紅移也有助於減少需要傳輸的數據量。
查詢下推到紅移是默認啟用。它可以通過設置禁用spark.databricks.redshift.pushdown
來假
。即使殘疾,火花仍然推過濾器和執行列消除分成紅移。
事務擔保
本節描述紅移的事務保證數據源的火花。
一般背景紅移和S3屬性
紅移事務擔保一般信息,請參閱管理並發寫操作章的紅移的文檔。簡而言之,紅移可序列化的隔離根據文檔的紅移開始命令:
(雖然)您可以使用任何的四個事務隔離級別,亞馬遜紅移處理所有隔離級別是可序列化的。
根據紅移的文檔:
亞馬遜支持一個默認的紅移自動提交行為,每個separately-executed SQL命令單獨提交。
因此,個人的命令複製
和卸載
原子和事務,而顯式開始
和結束
應該隻需要執行多個命令或查詢的原子性。
當讀取或寫入紅移,在S3中讀取和寫入數據的數據源。火花和紅移產生分區的輸出並將其存儲在S3的多個文件。根據Amazon S3數據一致性模型文檔,S3 bucket清單操作最終一致性的,所以必須去特別的文件長度,避免丟失或不完整的數據由於最終一致性的來源。
保證紅移數據源的火花
創建一個新表(SaveMode.CreateIfNotExists
)
創建一個新表是一個兩步的過程,組成的創建表
命令之後複製命令來添加初始設置的行。操作都是在同一事務中執行。
常見問題和解決方案
S3 bucket和紅移集群不同的AWS區域
默認情況下,S3 < - >紅移副本不工作如果S3 bucket和紅移在AWS不同區域集群。
如果你嚐試讀一個紅移表S3 bucket時在不同的地區,你會看到一個錯誤,如:
錯誤:S3ServiceException: S3 bucket解決不同地區的查詢從這個集群。PermanentRedirect地位301年,錯誤。
同樣,試圖編寫使用S3 bucket紅移在不同的地區可能會導致以下錯誤:
錯誤:問題閱讀清單文件——S3ServiceException: S3 bucket解決不同地區的查詢從這個集群。PermanentRedirect地位301年,錯誤
意想不到的S3ServiceException憑證錯誤當你使用S3實例配置文件進行身份驗證
如果您使用的是實例配置文件驗證S3和接收一個意想不到的S3ServiceException
錯誤,檢查是否AWS訪問中指定鍵tempdir
S3 URI, Hadoop配置,或任何來源檢查DefaultAWSCredentialsProviderChain:那些資源優先於實例配置文件憑證。
錯誤消息,這是一個樣品可以的症狀鑰匙不小心將優先於實例配置文件:
com.amazonaws.services.s3.model。一個mazonS3Exception: The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId;
身份驗證錯誤當使用一個密碼與JDBC url中的特殊字符
如果你是提供用戶名和密碼作為JDBC url的一部分和密碼包含特殊字符,如;
,嗎?
,或&
,你可能會看到以下例外:
java.sql。SQLException: [Amazon](500310) Invalid operation: password authentication failed for user 'xyz'
這是由於特殊字符的用戶名或密碼不正確逃脫的JDBC驅動程序。一定要使用相應的DataFrame指定用戶名和密碼的選項用戶
和密碼
。有關更多信息,請參見參數。
長時間運行的火花查詢掛下去即使相應的紅移操作就完成了
如果你是讀或寫大量的數據從紅移,火花查詢可能無限期掛,即使AWS紅移監測頁麵顯示相應的負載
orgydF4y2Ba卸載
操作已完成,集群是空閑的。這是由於紅移之間的聯係和引發超時。為了避免這種情況,確保tcpKeepAlive
啟用JDBC國旗TCPKeepAliveMinutes
被設置為一個較低的值(例如,1)。
有關更多信息,請參見亞馬遜紅移JDBC驅動程序的配置。
遷移向導
現在需要您顯式地設置的數據源forward_spark_s3_credentials
火花S3憑證之前轉發給紅移。如果你使用這種變化沒有影響aws_iam_role
orgydF4y2Batemporary_aws_ *
身份驗證機製。然而,如果你依賴於舊的默認行為你現在必須顯式地設置forward_spark_s3_credentials
來真正的
繼續使用以前的紅移S3身份驗證機製。為三個身份驗證機製的討論及其安全的權衡,看到驗證S3和紅移本文的部分。