使用连接到 Apache Hadoop 数据库 AWS Schema Conversion Tool - AWS Schema Conversion Tool

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用连接到 Apache Hadoop 数据库 AWS Schema Conversion Tool

你可以使用 AWS SCT 命令行界面 (CLI) 从 Apache Hadoop 迁移到亚马逊。EMR AWS SCT 在迁移期间使用您的 Amazon S3 存储桶作为数据的临时存储空间。

AWS SCT 支持 Apache Hadoop 版本 2.2.0 及更高版本作为源代码。此外,还 AWS SCT 支持 Apache Hive 版本 0.13.0 及更高版本。

AWS SCT 支持将 Amazon 6.3.0 及更高EMR版本作为目标。此外,还 AWS SCT 支持 Apache Hadoop 版本 2.6.0 及更高版本以及 Apache Hive 0.13.0 及更高版本。

使用 Apache Hadoop 为源的先决条件

使用连接到 Apache 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 集群。有关更多信息,请参阅《亚马逊EMR管理指南》EMR中的 “亚马逊入门”。

  • 在源 Apache 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 存储桶和目标 Amazon S3 存储桶

为了提高迁移速度,我们建议您对 ACID-transactional 源表运行压缩。

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/foo/barEXECUTE 权限。

以下代码示例演示如何授予源文件夹和文件 EXECUTE+READ 权限以及 tmp 目录的 READ+WRITE 权限。

hadoop fs –chmod –R 744 /user/hdfs-data hadoop fs –chmod –R 766 /tmp

HDFS用作目标的权限

Amazon EMR HDFS 作为目标所需的权限如下:

  • EXECUTE对于目标 Amazon EMR 集群的 NameNode

  • READ+WRITE用于迁移后您将在其中存储数据的目标HDFS文件夹

连接到作为源的 Apache Hadoop

在 1.0.670 或更高 AWS SCT 版本中,你可以使用 Apache Hadoop 作为源代码。您EMR只能在 AWS SCT 命令行界面 () CLI 中将 Hadoop 集群迁移到亚马逊。在开始之前,请熟悉 AWS SCT的命令行界面。有关更多信息,请参阅 CLI的参考 AWS Schema Conversion Tool

要在 Apache 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 集群。请确保为以下必填参数提供值:namehostportuser。其他参数都是可选的。

    以下代码示例添加了源 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 Hive,请使用 Hive 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服务的服务端口。

    接下来,输入您的 Hive 或userpassword的HDFS凭据。有关SSH隧道的更多信息,请参阅 Amazon EMR 管理指南中的使用本地端口转发设置SSH通往主节点的隧道。

  • 使用现有SSH隧道。

    对于 host,输入 localhost。对于port,从SSH隧道参数中输入本地端口。

  • 直接连接到您的 Hive 和HDFS服务。

    对于host,请输入您的源 Hive 或HDFS服务的 IP 地址或主机名。对于port,请输入 Hive 或HDFS服务的服务端口。接下来,输入您的 Hive 或userpassword的HDFS凭据。

要连接到 Hive 然后HDFS在 AWS SCT CLI
  1. 打开您的CLI脚本,其中包含您的源 Hadoop 集群的连接信息。确保使用您在上一步中定义的 Hadoop 集群的名称。

  2. 将源 Hive 服务添加到项目中。

    使用 AddSourceClusterHive 命令连接源 Hive 服务。请确保为以下必填参数提供值:userpasswordclusternameport。其他参数都是可选的。

    以下代码示例创建了一个用于 AWS SCT 与 Hive 服务配合使用的隧道。此源 Hive 服务与 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服务。请确保为以下必填参数提供值:userpasswordclusternameport。其他参数都是可选的。

    确保您的用户具有从源HDFS服务迁移数据所需的权限。有关更多信息,请参阅 使用 Hive 作为源的权限

    以下代码示例创建了一个用于 AWS SCT 与 Apache HDFS 服务配合使用的隧道。此示例使用您之前创建的 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 集群的连接信息以及迁移命令。

以目标EMR身份连接至亚马逊

您可以使用连接到您的目标 Amazon EMR 集群 AWS SCT CLI。为此,您需要授权入站流量并使用SSH。在本例中, AWS SCT 拥有使用您的 Amazon EMR 集群所需的所有权限。有关更多信息,请参阅《Amazon EMR 管理指南》中的 “SSH在连接和连接主节点之前”。

AWS SCT 使用hadoop集群用户连接到 Amazon EMR Hive。要连接到 Amazon EMR Hive,请使用 Hive 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 连接信息。这包括您的亚马逊EMR集群的 IP 地址、访问密钥、私有 AWS 访问 AWS 密钥和 Amazon S3 存储桶。如果需要,请配置端口变量的值。接下来,替换 emr_user 以及 emr_password 包含您的 Amazon EMR 用户名和该用户的密码。对于 path\name,输入目标 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 服务添加到项目中。

    以下代码示例创建了一个隧道, AWS SCT 以便与您的目标 Hive 服务配合使用。此示例使用您之前创建的 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服务添加到项目中。

    以下代码示例创建了一个用于 AWS SCT 与 Apache HDFS 服务配合使用的隧道。此示例使用您之前创建的 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 工作负载