本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用阿帕奇 Hadoop 作為源 AWS SCT
您可以使用命AWS SCT令行界面(CLI)從阿帕奇 Hadoop 遷移到亞馬遜 EMR。 AWS SCT使用 Amazon S3 儲存貯體做為移轉期間資料的暫時儲存。
AWS SCT支持作為一個源阿帕奇 Hadoop 的版本 2.2.0 及更高版本。此外,AWS SCT支持阿帕奇蜂巢版本 0.13.0 及更高版本。
AWS SCT支持作為目標亞馬遜 EMR 版本 6.3.0 及更高版本。此外,AWS SCT支持作為一個目標阿帕奇 Hadoop 版本 2.6.0 及更高版本,和阿帕奇蜂巢版本 0.13.0 及更高版本。
主題
使用阿帕奇 Hadoop 作為源的先決條件
需要以下先決條件才能使用 AWS SCT CLI 連接到阿帕奇的 Hadoop。
-
建立 Amazon S3 儲存貯體以在遷移期間存放資料。然後,您可以將資料複製到亞馬遜 EMR HDFS,或使用 Amazon S3 做為 Hadoop 工作負載的資料儲存庫。如需詳細資訊,請參閱 Amazon S3 使用者指南中的建立儲存貯體。
-
使用
AmazonS3FullAccess
政策建立 AWS Identity and Access Management (IAM) 角色。 AWS SCT使用此 IAM 角色存取您的 Amazon S3 儲存貯體。 -
記下您的AWS密鑰和AWS秘密訪問密鑰。如需有關AWS存取金鑰的詳細資訊,請參閱 IAM 使用者指南中的管理存取金鑰。
-
建立和設定目標亞馬遜 EMR 叢集。如需詳細資訊,請參閱 Amazon EMR 管理指南中的開始使用 Amazon EMR。
-
在源阿帕奇 Hadoop 集群上安裝該
distcp
實用程序。此外,請在目標 Amazon EMR 叢集上安裝s3-dist-cp
公用程式。請確定您的資料庫使用者具有執行這些公用程式的權限。 -
將來源 Hadoop 叢集中的
core-site.xml
檔案設定為使用 s3a 通訊協定。若要這樣做,請將fs.s3a.aws.credentials.provider
參數設定為下列其中一個值。org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider
org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider
org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider
org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider
您可以將下面的代碼示例添加到
core-site.xml
文件中。<property> <name>fs.s3a.aws.credentials.provider</name> <value>org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider</value> </property>
上述範例顯示上述選項清單中的四個選項之一。如果您未在
core-site.xml
檔案中設定fs.s3a.aws.credentials.provider
參數,則會自動AWS SCT選擇提供者。
使用 Hive 作為源的權限
Hive 來源使用者所需的權限如下:
READ
存取來源資料夾和來源 Amazon S3 儲存貯體READ+WRITE
存取中繼和目標 Amazon S3 儲存貯體
若要提高移轉速度,建議您針對 ACID 交易來源表格執行壓縮。
Amazon EMR Hive 目標使用者所需的許可如下:
READ
訪問目標亞馬遜 S3 存儲桶READ+WRITE
訪問中間亞馬遜 S3 存儲桶READ+WRITE
訪問目標 HDFS 文件夾
使用 HDFS 作為來源的權限
HDFS 作為源所需的權限如下:
EXECUTE
(針對NameNode)EXECUTE+READ
包含在移轉專案中的所有來源資料夾和檔案READ+WRITE
在遷移NameNode到 Amazon S3 之前執行 Spark 任務和存放檔案的tmp
目錄
在 HDFS 中,所有操作都需要遍歷訪問。遍歷存取需要路徑所有現有元件的EXECUTE
權限,但最終路徑元件除外。例如,對於存取任何作業/foo/bar/baz
,您的使用者必須擁有/
/foo
、和的EXECUTE
權限/foo/bar
。
下列程式碼範例示範如何授與EXECUTE+READ
來源資料夾和檔案的READ+WRITE
權限,以及tmp
目錄的權限。
hadoop fs –chmod –R 744 /user/hdfs-data hadoop fs –chmod –R 766 /tmp
使用 HDFS 作為目標的權限
亞馬遜 EMR HDFS 作為目標所需的許可如下:
EXECUTE
用於目NameNode標亞馬遜 EMR 集群READ+WRITE
對於目標 HDFS 文件夾,您將在遷移後存儲數據
連接到阿帕奇 Hadoop 作為源
您可以使用阿帕奇 Hadoop 作為 1.0.670 或更高AWS SCT版本的源。您只能在AWS SCT命令列界面 (CLI) 中將 Hadoop 叢集遷移到亞馬遜 EMR。在開始之前,請先熟悉的指令行介面。AWS SCT如需詳細資訊,請參閱AWS SCT CLI 參考資料。
要連接到阿帕奇的 Hadoop 在 CLI AWS SCT
-
建立新的 AWS SCT CLI 指令碼或編輯現有案例範本。例如,您可以下載和編輯
HadoopMigrationTemplate.scts
範本。如需詳細資訊,請參閱取得 CLI 案例。 -
設定AWS SCT應用程式設定,例如驅動程式位置和記錄檔資料夾。
下載所需的 JDBC 驅動程式,並指定儲存檔案的位置。如需詳細資訊,請參閱下載所需資料庫驅動程式。
下列程式碼範例會示範如何將路徑新增至 Apache Hive 驅動程式。執行此程式碼範例之後,將記錄檔AWS SCT儲存在資
c:\sct
料夾中。SetGlobalSettings -save: 'true' -settings: '{ "hive_driver_file": "c:\\sct\\HiveJDBC42.jar", "log_folder": "c:\\sct", "console_log_folder": "c:\\sct" }' /
您可以在 Windows 中使用這個範例和下列範例。
-
創建一個新AWS SCT項目。
下列程式碼範例會在
c:\sct
資料夾中建立hadoop_emr
專案。CreateProject -name: 'hadoop_emr' -directory: 'c:\sct' /
-
將您的源 Hadoop 集群添加到項目中。
使用該
AddSourceCluster
命令連接到源 Hadoop 集群。請確定您提供下列必要參數的值:name
host
、port
、和user
。其他參數是可選的。下列程式碼範例會新增來源 Hadoop 叢集。此範例會設定
HADOOP_SOURCE
為來源叢集的名稱。使用此對象名稱添加蜂巢和 HDFS 服務的項目,並創建映射規則。AddSourceCluster -name: 'HADOOP_SOURCE' -vendor: 'HADOOP' -host: '
hadoop_address
' -port: '22' -user: 'hadoop_user
' -password: 'hadoop_password
' -useSSL: 'true' -privateKeyPath: 'c:\path\name
.pem' -passPhrase: 'hadoop_passphrase
' /在上述範例中,請將
hadoop_address
取代為 Hadoop 叢集的 IP 位址。如果需要,請設定連接埠選項的值。接下來,用您的Hadoop 用戶
的名稱和此用戶的密碼替換 hadoop_
user 和密碼。針對路徑\ 名稱
,請輸入來源 Hadoop 叢集之 PEM 檔案的名稱和路徑。 -
儲存您的 CLI 指令碼。接下來,添加您的蜂巢和 HDFS 服務的連接信息。
連接到您的來源蜂巢和 HDFS 服務
您可以使用 AWS SCT CLI 連接到源配置單元和 HDFS 服務。要連接到阿帕奇蜂房,請使用配置單元 JDBC 驅動程序 2.3.4 或更高版本。如需詳細資訊,請參閱下載所需資料庫驅動程式。
AWS SCT使用hadoop
叢集使用者連線至 Apache Hive。若要這麼做,請使用AddSourceClusterHive
和AddSourceClusterHDFS
指令。您可以使用下列其中一種方法。
-
建立新的 SSH 通道。
針對
createTunnel
,輸入true
。對於host
,請輸入來源 Hive 或 HDFS 服務的內部 IP 位址。對於port
,輸入您的蜂巢或 HDFS 服務的服務端口。接下來, 輸入您的蜂巢或 HDFS 憑據
user
和password
. 如需 SSH 通道的詳細資訊,請參閱《Amazon EMR 管理指南》中的使用本機連接埠轉送設定到主節點的 SSH 通道。 -
使用現有的 SSH 通道。
針對
host
,輸入localhost
。對於port
,從 SSH 通道參數輸入本機連接埠。 -
直接連接到您的蜂巢和 HDFS 服務。
對於
host
,請輸入來源 Hive 或 HDFS 服務的 IP 位址或主機名稱。對於port
,輸入您的蜂巢或 HDFS 服務的服務端口。接下來, 輸入您的蜂巢或 HDFS 憑據user
和password
.
若要在 CLI 中連接到配置單元和 HDFS AWS SCT
-
開啟包含來源 Hadoop 叢集的連線資訊的 CLI 指令碼。請確定您使用您在上一個步驟中定義的 Hadoop 叢集的名稱。
-
將您的源 Hive 服務添加到項目中。
使用命
AddSourceClusterHive
令來連接源 Hive 服務。請確定您提供下列必要參數的值:user
password
、cluster
、name
、和port
。其他參數是可選的。下列程式碼範例會建立與 Hive 服務搭配使用的通道。AWS SCT此源 Hive 服務運行在同一台 PC 上AWS SCT。此範例使用上一個範例中的
HADOOP_SOURCE
來源叢集。AddSourceClusterHive -cluster: 'HADOOP_SOURCE' -name: 'HIVE_SOURCE' -host: 'localhost' -port: '10005' -user: '
hive_user
' -password: 'hive_password
' -createTunnel: 'true' -localPort: '10005' -remoteHost: 'hive_remote_address
' -remotePort: 'hive_port
' /下列程式碼範例會連線至您的 Hive 服務,而不需要通道。
AddSourceClusterHive -cluster: 'HADOOP_SOURCE' -name: 'HIVE_SOURCE' -host: '
hive_address
' -port: 'hive_port
' -user: 'hive_user
' -password: 'hive_password
' /在前面的例子中,將
hive_user 和 hive_
password
替換為您的配置單元用戶的名稱和此用戶的密碼。接下來,用源
Hadoop 集群的 NameNode IP 地址
和端口替換隱
藏地址和隱藏端口。對於
hive_remote_address
,您可以使用默認值127.0.0.1
或源配置單元服務的 NameNode IP 地址。 -
將您的源 HDFS 服務添加到項目中。
使用
AddSourceClusterHDFS
命令連接源 HDFS 服務。請確定您提供下列必要參數的值:user
password
、cluster
、name
、和port
。其他參數是可選的。請確定您的使用者具有從來源 HDFS 服務遷移資料所需的權限。如需詳細資訊,請參閱使用 Hive 作為源的權限。
下面的代碼示例創建一個隧道與您的 Apache HDFS 服務的工作。AWS SCT此範例使用您之前建立的
HADOOP_SOURCE
來源叢集。AddSourceClusterHDFS -cluster: 'HADOOP_SOURCE' -name: 'HDFS_SOURCE' -host: 'localhost' -port: '9005' -user: '
hdfs_user
' -password: 'hdfs_password
' -createTunnel: 'true' -localPort: '9005' -remoteHost: 'hdfs_remote_address
' -remotePort: 'hdfs_port
' /下面的代碼連接到你的 Apache HDFS 服務沒有隧道。
AddSourceClusterHDFS -cluster: 'HADOOP_SOURCE' -name: 'HDFS_SOURCE' -host: '
hdfs_address
' -port: 'hdfs_port
' -user: 'hdfs_user
' -password: 'hdfs_password
' /在前面的例子中,替換
hdfs_user
和hdfs_password
與您的 HDFS 用戶的名稱和該用戶的密碼。接下來,用您的源 Hadoop 集群的 NameNode IP
地址和端口替換 hdfs_
port
和 hdfs_port。對於
hdfs_remote_address
,您可以使用默認值127.0.0.1
或源配置單元服務的 NameNode IP 地址。 -
儲存您的 CLI 指令碼。接下來,新增目標 Amazon EMR 叢集的連線資訊和遷移命令。
連接到亞馬遜 EMR 作為目標
您可以使用 AWS SCT CLI 連線到目標亞馬遜 EMR 叢集。若要這麼做,您可以授權輸入流量並使用 SSH。在這種情況下,AWS SCT具有與 Amazon EMR 叢集搭配使用的所有必要許可。如需詳細資訊,請參閱《Amazon EMR 管理指南》中的〈使用 SSH 連線和連線到主節點之前〉。
AWS SCT透過hadoop
叢集使用者連線至 Amazon EMR Hive。要連接到亞馬遜 EMR 配置單元,請使用蜂巢 JDBC 驅動程序版本 2.6.2.1002 或更高版本。如需詳細資訊,請參閱下載所需資料庫驅動程式。
若要在 CLI 中連線到亞馬遜 EMR AWS SCT
-
開啟包含來源 Hadoop 叢集的連線資訊的 CLI 指令碼。將目標亞馬遜 EMR 登入資料新增到此檔案中。
-
將您的目標 Amazon EMR 叢集新增至專案。
下列程式碼範例會新增目標 Amazon EMR 叢集。此範例會設定
HADOOP_TARGET
為目標叢集的名稱。使用此物件名稱將您的 Hive 和 HDFS 服務以及 Amazon S3 儲存貯體資料夾新增至專案,並建立映射規則。AddTargetCluster -name: 'HADOOP_TARGET' -vendor: 'AMAZON_EMR' -host: 'ec2-44-44-55-66.eu-west-1.EXAMPLE.amazonaws.com' -port: '22' -user: '
emr_user
' -password: 'emr_password
' -useSSL: 'true' -privateKeyPath: 'c:\path\name
.pem' -passPhrase: '1234567890abcdef0!' -s3Name: 'S3_TARGET' -accessKey: 'AKIAIOSFODNN7EXAMPLE' -secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' -region: 'eu-west-1' -s3Path: 'doc-example-bucket/example-folder' /在前面的範例中,輸入您的AWS資源名稱和 Amazon EMR 連線資訊。這包括您的 Amazon EMR 叢集的 IP 位址、AWS存取金鑰、AWS秘密存取金鑰和 Amazon S3 儲存貯體。如果需要,請配置端口變量的值。接下來,將
emr_user 和 emr_
password
替換為您的亞馬遜 EMR 用戶的名稱和該用戶的密碼。對於路徑\ 名稱
,請輸入目標 Amazon EMR 叢集之 PEM 檔案的名稱和路徑。如需詳細資訊,請參閱下載 EMR 叢集存取的 PEM 檔案。 -
將您的目標 Amazon S3 儲存貯體新增至專案。
下列程式碼範例會新增目標 Amazon S3 儲存貯體。此範例使用您之前建立的
HADOOP_TARGET
叢集。AddTargetClusterS3 -cluster: 'HADOOP_TARGET' -Name: 'S3_TARGET' -accessKey: 'AKIAIOSFODNN7EXAMPLE' -secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' -region: 'eu-west-1' -s3Path: 'doc-example-bucket/example-folder' /
在上述範例中,輸入您的AWS存取金鑰、AWS秘密存取金鑰和 Amazon S3 儲存貯體。
-
將您的目標 Hive 服務添加到項目中。
下列程式碼範例會建立與目標 Hive 服務搭配使用的通道。AWS SCT此範例使用您之前建立的
HADOOP_TARGET
目標叢集。AddTargetClusterHive -cluster: 'HADOOP_TARGET' -name: 'HIVE_TARGET' -host: 'localhost' -port: '10006' -user: '
hive_user
' -password: 'hive_password
' -createTunnel: 'true' -localPort: '10006' -remoteHost: 'hive_address
' -remotePort: 'hive_port
' /在前面的例子中,將
hive_user 和 hive_
password
替換為您的配置單元用戶的名稱和此用戶的密碼。接下來,將
hive_address
替換為默認值127.0.0.1
或目標配置單元服務的 NameNode IP 地址。接下來,將hive_port
替換為目標配置單元服務的端口。 -
將您的目標 HDFS 服務添加到項目中。
下面的代碼示例創建一個隧道與您的 Apache HDFS 服務的工作。AWS SCT此範例使用您之前建立的
HADOOP_TARGET
目標叢集。AddTargetClusterHDFS -cluster: 'HADOOP_TARGET' -name: 'HDFS_TARGET' -host: 'localhost' -port: '8025' -user: '
hdfs_user
' -password: 'hdfs_password
' -createTunnel: 'true' -localPort: '8025' -remoteHost: 'hdfs_address
' -remotePort: 'hdfs_port
' /在前面的例子中,替換
hdfs_user
和hdfs_password
與您的 HDFS 用戶的名稱和該用戶的密碼。接下來,替換
hdfs_
port 與您的目標 HDFS
服務的私有 IP 地址和端口。NameNode -
儲存您的 CLI 指令碼。接下來,新增對應規則和移轉指令。如需詳細資訊,請參閱遷移阿帕奇 Hadoop 到亞馬遜 EMR。