使用阿帕奇 Hadoop 作為源 AWS SCT - AWS Schema Conversion Tool

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用阿帕奇 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
  1. 建立新的 AWS SCT CLI 指令碼或編輯現有案例範本。例如,您可以下載和編輯HadoopMigrationTemplate.scts範本。如需詳細資訊,請參閱取得 CLI 案例

  2. 設定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 中使用這個範例和下列範例。

  3. 創建一個新AWS SCT項目。

    下列程式碼範例會在c:\sct資料夾中建立hadoop_emr專案。

    CreateProject -name: 'hadoop_emr' -directory: 'c:\sct' /
  4. 將您的源 Hadoop 集群添加到項目中。

    使用該AddSourceCluster命令連接到源 Hadoop 集群。請確定您提供下列必要參數的值:namehostport、和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 檔案的名稱和路徑。

  5. 儲存您的 CLI 指令碼。接下來,添加您的蜂巢和 HDFS 服務的連接信息。

連接到您的來源蜂巢和 HDFS 服務

您可以使用 AWS SCT CLI 連接到源配置單元和 HDFS 服務。要連接到阿帕奇蜂房,請使用配置單元 JDBC 驅動程序 2.3.4 或更高版本。如需詳細資訊,請參閱下載所需資料庫驅動程式

AWS SCT使用hadoop叢集使用者連線至 Apache Hive。若要這麼做,請使用AddSourceClusterHiveAddSourceClusterHDFS指令。您可以使用下列其中一種方法。

  • 建立新的 SSH 通道。

    針對 createTunnel,輸入 true。對於host,請輸入來源 Hive 或 HDFS 服務的內部 IP 位址。對於port,輸入您的蜂巢或 HDFS 服務的服務端口。

    接下來, 輸入您的蜂巢或 HDFS 憑據userpassword. 如需 SSH 通道的詳細資訊,請參閱《Amazon EMR 管理指南》中的使用本機連接埠轉送設定到主節點的 SSH 通道。

  • 使用現有的 SSH 通道。

    針對 host,輸入 localhost。對於port,從 SSH 通道參數輸入本機連接埠。

  • 直接連接到您的蜂巢和 HDFS 服務。

    對於host,請輸入來源 Hive 或 HDFS 服務的 IP 位址或主機名稱。對於port,輸入您的蜂巢或 HDFS 服務的服務端口。接下來, 輸入您的蜂巢或 HDFS 憑據userpassword.

若要在 CLI 中連接到配置單元和 HDFS AWS SCT
  1. 開啟包含來源 Hadoop 叢集的連線資訊的 CLI 指令碼。請確定您使用您在上一個步驟中定義的 Hadoop 叢集的名稱。

  2. 將您的源 Hive 服務添加到項目中。

    使用命AddSourceClusterHive令來連接源 Hive 服務。請確定您提供下列必要參數的值:userpasswordclustername、和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 地址。

  3. 將您的源 HDFS 服務添加到項目中。

    使用AddSourceClusterHDFS命令連接源 HDFS 服務。請確定您提供下列必要參數的值:userpasswordclustername、和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_userhdfs_password 與您的 HDFS 用戶的名稱和該用戶的密碼。

    接下來,用您的源 Hadoop 集群的 NameNode IP 地址和端口替換 hdfs_ port 和 hdfs_port。

    對於 hdfs_remote_address,您可以使用默認值127.0.0.1或源配置單元服務的 NameNode IP 地址。

  4. 儲存您的 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
  1. 開啟包含來源 Hadoop 叢集的連線資訊的 CLI 指令碼。將目標亞馬遜 EMR 登入資料新增到此檔案中。

  2. 將您的目標 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 檔案

  3. 將您的目標 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 儲存貯體。

  4. 將您的目標 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 替換為目標配置單元服務的端口。

  5. 將您的目標 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_userhdfs_password 與您的 HDFS 用戶的名稱和該用戶的密碼。

    接下來,替換 hdfs_ port 與您的目標 HDFS 服務的私有 IP 地址和端口。NameNode

  6. 儲存您的 CLI 指令碼。接下來,新增對應規則和移轉指令。如需詳細資訊,請參閱遷移阿帕奇 Hadoop 到亞馬遜 EMR