本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 Amazon EMR 載入資料
您可以使用 COPY 命令從 Amazon EMR 叢集平行載入資料,而叢集設定為以固定寬度檔案、字元分隔檔案、CSV 檔案或 JSON 格式檔案的形式,將文字檔案寫入叢集的 Hadoop 分散式檔案系統 (HDFS)。
從 Amazon EMR 載入資料的程序
本節會逐步引導您完成從 Amazon EMR 叢集載入資料的程序。下列小節提供必須完成每個步驟的詳細資訊。
-
建立 Amazon EMR 叢集和執行 Amazon Redshift COPY 命令的使用者必須具備必要的許可。
-
設定叢集以輸出文字檔案至 Hadoop 分散式檔案系統 (HDFS)。您將需要 Amazon EMR 叢集 ID 和叢集的主要公有 DNS (主控叢集的 Amazon EC2 執行個體端點)。
-
步驟 3:擷取 Amazon Redshift 叢集公有金鑰和叢集節點 IP 地址
公有金鑰可讓 Amazon Redshift 叢集節點與主機建立 SSH 連線。您將使用每個叢集節點的 IP 地址來設定主機安全群組,以允許使用這些 IP 地址從您的 Amazon Redshift 叢集存取。
-
步驟 4:將 Amazon Redshift 叢集公有金鑰新增至每個 Amazon EC2 主機的授權金鑰檔案
您可以將 Amazon Redshift 叢集公有金鑰新增至主機的授權金鑰檔案,以便主機識別 Amazon Redshift 叢集並接受 SSH 連線。
-
步驟 5:設定主機以接受所有 Amazon Redshift 叢集的 IP 地址
修改 Amazon EMR 執行個體的安全群組,以新增傳入規則來接受 Amazon Redshift IP 地址。
-
從 Amazon Redshift 資料庫,執行 COPY 命令以將資料載入至 Amazon Redshift 資料表。
步驟 1:設定 IAM 許可
建立 Amazon EMR 叢集和執行 Amazon Redshift COPY 命令的使用者必須具備必要的許可。
設定 IAM 許可
-
為將建立 Amazon EMR 叢集的使用者新增下列許可。
ec2:DescribeSecurityGroups ec2:RevokeSecurityGroupIngress ec2:AuthorizeSecurityGroupIngress redshift:DescribeClusters
-
為將執行 COPY 命令的 IAM 角色或使用者新增下列許可。
elasticmapreduce:ListInstances
-
將下列許可新增至 Amazon EMR 叢集的 IAM 角色。
redshift:DescribeClusters
步驟 2:建立 Amazon EMR 叢集。
COPY 命令會從 Amazon EMR Hadoop 分散式檔案系統 (HDFS) 上的檔案載入資料。建立 Amazon EMR 叢集時,請設定叢集以輸出資料檔案至叢集的 HDFS。
建立 Amazon EMR 叢集
-
在與 Amazon Redshift 叢集相同的 AWS 區域中建立 Amazon EMR 叢集。
如果 Amazon Redshift 叢集位於 VPC 中,Amazon EMR 叢集必須位在相同的 VPC 群組。如果 Amazon Redshift 叢集使用 EC2-Classic 模式 (亦即,不在 VPC 中),Amazon EMR 叢集也必須使用 EC2-Classic 模式。如需詳細資訊,請參閱《Amazon Redshift 管理指南》中的在虛擬私有雲端 (VPC) 中管理叢集。
-
設定叢集以將資料檔案輸出至叢集的 HDFS。HDFS 檔案名稱不能包括星號 (*) 或問號 (?)。
重要
檔案名稱不能包括星號 (*) 或問號 (?)。
-
針對 Amazon EMR 叢集組態中的自動終止選項指定否,以便叢集在 COPY 命令執行時保持可用狀態。
重要
如果 COPY 完成之前有任何資料檔案變更或刪除,可能會發生非預期的結果,COPY 操作也可能失敗。
-
請記下叢集 ID 和主要公有 DNS (主控叢集的 Amazon EC2 執行個體端點)。您將在稍後的步驟中使用該資訊。
步驟 3:擷取 Amazon Redshift 叢集公有金鑰和叢集節點 IP 地址
您將使用每個叢集節點的 IP 地址來設定主機安全群組,以允許使用這些 IP 地址從您的 Amazon Redshift 叢集存取。
使用主控台擷取您叢集的 Amazon Redshift 叢集公有金鑰和叢集節點 IP 地址
-
存取 Amazon Redshift 管理主控台。
-
在導覽窗格中,選擇叢集連結。
-
從清單選取您的叢集。
-
找到 SSH Ingestion Settings (SSH 擷取設定) 群組。
記下 Cluster Public Key (叢集公有金鑰) 和 Node IP addresses (節點 IP 地址)。您將在稍後的步驟中用到它們。
您將使用步驟 3 的私有 IP 地址來設定 Amazon EC2 主機以接受來自 Amazon Redshift 的連線。
若要使用 Amazon Redshift CLI 來擷取叢集的叢集公有金鑰和叢集節點 IP 地址,請執行 describe-clusters 命令。例如:
aws redshift describe-clusters --cluster-identifier <cluster-identifier>
回應將包含 ClusterPublicKey 值和私有和公有 IP 地址的清單,類似於下列:
{ "Clusters": [ { "VpcSecurityGroups": [], "ClusterStatus": "available", "ClusterNodes": [ { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "LEADER", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-0", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-1", "PublicIPAddress": "10.nnn.nnn.nnn" } ], "AutomatedSnapshotRetentionPeriod": 1, "PreferredMaintenanceWindow": "wed:05:30-wed:06:00", "AvailabilityZone": "us-east-1a", "NodeType": "dc2.large", "ClusterPublicKey": "ssh-rsa AAAABexamplepublickey...Y3TAl Amazon-Redshift", ... ... }
若要使用 Amazon Redshift API 來擷取叢集的叢集公有金鑰和叢集節點 IP 地址,請使用 DescribeClusters
動作。如需詳細資訊,請參閱《Amazon Redshift CLI 指南》中的 describe-clusters 或《Amazon Redshift API 指南》中的 DescribeClusters。
步驟 4:將 Amazon Redshift 叢集公有金鑰新增至每個 Amazon EC2 主機的授權金鑰檔案
您可以將叢集公有金鑰新增至所有 Amazon EMR 叢集節點的每個主機的授權金鑰檔案,以便主機識別 Amazon Redshift 並接受 SSH 連線。
將 Amazon Redshift 叢集公有金鑰新增至主機的授權金鑰檔案
-
使用 SSH 連線存取主機。
如需使用 SSH 連接至執行個體的詳細資訊,請參閱《Amazon EC2 使用者指南》中的連接至您的執行個體。
-
從主控台或從 CLI 回應文字複製 Amazon Redshift 公有金鑰。
-
將公有金鑰的內容複製和貼上至主機上的
/home/<ssh_username>/.ssh/authorized_keys
檔案。包括完整字串,包括字首 "ssh-rsa
" 和字尾 "Amazon-Redshift
"。例如:ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift
步驟 5:設定主機以接受所有 Amazon Redshift 叢集的 IP 地址
若要允許對主機執行個體的輸入流量,請編輯安全群組,並為每個 Amazon Redshift 叢集節點新增一個輸出規則。針對類別,對連接埠 22 上的 TCP 通訊協定選取 SSH。針對來源,輸入您在 步驟 3:擷取 Amazon Redshift 叢集公有金鑰和叢集節點 IP 地址 中擷取的 Amazon Redshift 叢集節點私有 IP 地址。如需將規則新增至 Amazon EC2 安全群組的相關資訊,請參閱《Amazon EC2 使用者指南》中的授權執行個體的傳入流量。
步驟 6:執行 COPY 命令以載入資料
執行 COPY 命令以連線至 Amazon EMR 叢集,並將資料載入至 Amazon Redshift 資料表。Amazon EMR 叢集必須繼續執行,直到 COPY 命令完成。例如,請勿將叢集設定為自動終止。
重要
如果 COPY 完成之前有任何資料檔案變更或刪除,可能會發生非預期的結果,COPY 操作也可能失敗。
在 COPY 命令中,指定 Amazon EMR 叢集 ID 和 HDFS 檔案路徑和檔案名稱。
COPY sales
FROM 'emr://myemrclusterid/myoutput/part*' CREDENTIALS
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
您可以在檔案名稱引數中使用萬用字元星號 (*
) 和問號 (?
)。例如,part*
會載入檔案 part-0000
、part-0001
,以此類推。如果僅指定資料夾名稱,COPY 會嘗試載入該資料夾中的所有檔案。
重要
如果使用萬用字元或只使用資料夾名稱,請確認不會載入不需要的檔案,否則 COPY 命令將會失敗。例如,某些程序可能將日誌檔案寫入至輸出資料夾。