使用連接到阿帕奇 Hadoop 數據庫 AWS Schema Conversion Tool - AWS Schema Conversion Tool

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

使用連接到阿帕奇 Hadoop 數據庫 AWS Schema Conversion Tool

您可以使用命 AWS SCT 令行界面(CLI)從阿帕奇 Hadoop 遷移到 Amazon EMR。 AWS SCT 使用 Amazon S3 儲存貯體做為移轉期間資料的暫時儲存。

AWS SCT 支持作為源阿帕奇 Hadoop 的版本 2.2.0 及更高版本。此外, AWS SCT 支持阿帕奇蜂巢版本 0.13.0 及更高版本。

AWS SCT 支持作為目標 Amazon EMR 版本 6.3.0 及更高版本。此外, AWS SCT 支持作為一個目標阿帕奇 Hadoop 版本 2.6.0 及更高版本,和阿帕奇蜂巢版本 0.13.0 及更高版本。

使用阿帕奇 Hadoop 作為源的先決條件

需要下列先決條件才能使用 AWS SCT CLI.

  • 建立 Amazon S3 儲存貯體以在遷移期間存放資料。然後,您可以將資料複製到亞馬遜,EMRHDFS或使用 Amazon S3 做為 Hadoop 工作負載的資料儲存庫。如需詳細資訊,請參閱 Amazon S3 使用者指南中的建立儲存貯體。

  • 使用AmazonS3FullAccess策略建立 AWS Identity and Access Management (IAM) 角色。 AWS SCT 使用此IAM角色存取您的 Amazon S3 儲存貯體。

  • 記下您的 AWS 密鑰和 AWS 秘密訪問密鑰。若要 AWS 取得有關存取金鑰的詳細資訊,請參閱IAM使用指南中的管理存取金鑰

  • 建立和設定目標 Amazon EMR 叢集。如需詳細資訊,請參閱 Amazon EMR 管理指南EMR中的開始使用 Amazon

  • 在源阿帕奇 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訪問目標 Amazon S3 存儲桶

  • READ+WRITE訪問中間 Amazon 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作目標的權限

Amazon EMR HDFS 作為目標所需的許可如下:

  • EXECUTE對於 NameNode 目標 Amazon EMR 集群

  • READ+WRITE用於移轉後儲存資料的目標資料HDFS夾

連接到阿帕奇 Hadoop 作為源

您可以使用阿帕奇 Hadoop 作為 1.0.670 或更高 AWS SCT 版本的源。您EMR只能在 AWS SCT 命令行界面(CLI)將 Hadoop 集群遷移到 Amazon。在開始之前,請先熟悉的指令行介面。 AWS SCT如需詳細資訊,請參閱CLI參考資料 AWS Schema Conversion Tool

要連接到阿帕奇的 Hadoop 的 AWS SCT CLI
  1. 建立新 AWS SCT CLI指令碼或編輯現有案例範本。例如,您可以下載和編輯HadoopMigrationTemplate.scts範本。如需詳細資訊,請參閱取得CLI案例

  2. 設定 AWS SCT 應用程式設定,例如驅動程式位置和記錄檔資料夾。

    下載所需的JDBC驅動程式並指定儲存檔案的位置。如需詳細資訊,請參閱安裝JDBC驅動程式 AWS Schema Conversion Tool

    下列程式碼範例會示範如何將路徑新增至 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為來源叢集的名稱。使用此物件名稱可將 Hive 和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_user 以及 hadoop_password 使用您的 Hadoop 用戶的名稱和此用戶的密碼。用於 path\name」中,輸入來源 Hadoop 叢集之PEM檔案的名稱和路徑。

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

連接到您的來源 Hive 和HDFS服務

您可以使用連線到來源 Hive 和HDFS服務 AWS SCT CLI。若要連線到 Apache 蜂巢,請使用配置單元JDBC驅動程式 2.3.4 或更高版本。如需詳細資訊,請參閱安裝JDBC驅動程式 AWS Schema Conversion Tool

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

  • 創建一個新的SSH隧道。

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

    接下來,輸入user和的 Hive 或HDFS認證password。如需有關SSH通SSH道的詳細資訊,請參閱 Amazon EMR 管理指南中的使用本機連接埠轉送設定通道至主節點

  • 使用現有的SSH隧道。

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

  • 直接 Connect 到您的 Hive 和HDFS服務。

    針對host,輸入來源 Hive 或HDFS服務的 IP 位址或主機名稱。對於port,輸入您的 Hive 或服務的HDFS服務端口。接下來,輸入user和的 Hive 或HDFS認證password

要連接到蜂巢和 HDFS AWS SCT CLI
  1. 打開您的CLI腳本,其中包括源 Hadoop 集群的連接信息。請確定您使用您在上一個步驟中定義的 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 使用您的 Hive 用戶的名稱和此用戶的密碼。

    接下來,更換 hive_address 以及 hive_port 使用來源 Hadoop 叢集的 NameNode IP 位址和連接埠。

    用於 hive_remote_address,您可以使用來源 Hive 服務的預設值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_user 以及 hdfs_password HDFS使用您的使用者名稱和此使用者的密碼。

    接下來,更換 hdfs_address 以及 hdfs_port 使用來源 Hadoop 叢集的 NameNode IP 位址和連接埠。

    用於 hdfs_remote_address,您可以使用來源 Hive 服務的預設值127.0.0.1或 NameNode IP 位址。

  4. 儲存您的CLI指令碼。接下來,新增目標 Amazon EMR 叢集的連線資訊和遷移命令。

連接到 Amazon EMR 作為目標

您可以使用連接到目標 Amazon EMR 叢集 AWS SCT CLI。為此,您授權入站流量和使用SSH。在這種情況下, AWS SCT 具有與 Amazon EMR 叢集搭配使用的所有必要許可。如需詳細資訊,請參閱 Amazon EMR 管理指南SSH中的使用連線和連線到主節點之前。

AWS SCT 透過hadoop叢集使用者連線到 Amazon EMR Hive。要連接到 Amazon EMR 蜂巢,請使用蜂巢JDBC驅動程序版本 2.6.2.1002 或更高版本。如需詳細資訊,請參閱安裝JDBC驅動程式 AWS Schema Conversion Tool

要連接EMR到 Amazon AWS SCT CLI
  1. 打開您的CLI腳本,其中包括源 Hadoop 集群的連接信息。將目標 Amazon 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 使用您的 Amazon EMR 使用者名稱和此使用者的密碼。用於 path\name」中,輸入目標 Amazon EMR 叢集的PEM檔案名稱和路徑。如需詳細資訊,請參閱下載PEM檔案以進行EMR叢集存取

  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 用戶的名稱和此用戶的密碼。

    接下來,更換 hive_address 使用默認值127.0.0.1或目標 Hive 服務的 NameNode IP 地址。接下來,更換 hive_port 與目標 Hive 服務的端口。

  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_user 以及 hdfs_password HDFS使用您的使用者名稱和此使用者的密碼。

    接下來,更換 hdfs_address 以及 hdfs_port 使用目標HDFS服務的私有 IP 位址和連接埠。 NameNode

  6. 儲存您的CLI指令碼。接下來,新增對應規則和移轉指令。如需詳細資訊,請參閱移轉 Hadoop 工作負載