本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用连接到 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
对于 NameNodeEXECUTE+READ
适用于迁移项目中包含的所有源文件夹和文件READ+WRITE
用于在迁移 NameNode 到 Amazon S3 之前运行 Spark 任务和存储文件的tmp
目录
在中HDFS,所有操作都需要遍历访问权限。遍历访问需要路径中所有现有组件的 EXECUTE
权限,但最终路径组件除外。例如,对于访问 /foo/bar/baz
的任何操作,您的用户都必须拥有 /
、/foo
和 /foo/bar
的 EXECUTE
权限。
以下代码示例演示如何授予源文件夹和文件 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 集群的 NameNodeREAD+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
-
创建新 AWS SCT CLI脚本或编辑现有场景模板。例如,您可以下载和编辑
HadoopMigrationTemplate.scts
模板。有关更多信息,请参阅 获取CLI场景。 -
配置 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 中使用此示例和以下示例。
-
创建新 AWS SCT 项目。
以下代码示例在
c:\sct
文件夹中创建hadoop_emr
项目。CreateProject -name: 'hadoop_emr' -directory: 'c:\sct' /
-
将源 Hadoop 集群添加到项目中。
使用
AddSourceCluster
命令连接到源 Hadoop 集群。请确保为以下必填参数提供值:name
、host
、port
和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群的文件名称和路径。 -
保存您的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。为此,请使用 AddSourceClusterHive
和 AddSourceClusterHDFS
命令。您可以使用以下方法之一。
-
创建新SSH隧道。
对于
createTunnel
,输入true
。对于host
,请输入您的源 Hive 或HDFS服务的内部 IP 地址。对于port
,请输入 Hive 或HDFS服务的服务端口。接下来,输入您的 Hive 或
user
和password
的HDFS凭据。有关SSH隧道的更多信息,请参阅 Amazon EMR 管理指南中的使用本地端口转发设置SSH通往主节点的隧道。 -
使用现有SSH隧道。
对于
host
,输入localhost
。对于port
,从SSH隧道参数中输入本地端口。 -
直接连接到您的 Hive 和HDFS服务。
对于
host
,请输入您的源 Hive 或HDFS服务的 IP 地址或主机名。对于port
,请输入 Hive 或HDFS服务的服务端口。接下来,输入您的 Hive 或user
和password
的HDFS凭据。
要连接到 Hive 然后HDFS在 AWS SCT CLI
-
打开您的CLI脚本,其中包含您的源 Hadoop 集群的连接信息。确保使用您在上一步中定义的 Hadoop 集群的名称。
-
将源 Hive 服务添加到项目中。
使用
AddSourceClusterHive
命令连接源 Hive 服务。请确保为以下必填参数提供值:user
、password
、cluster
、name
和port
。其他参数都是可选的。以下代码示例创建了一个用于 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 地址。 -
将您的源HDFS服务添加到项目中。
使用
AddSourceClusterHDFS
命令连接源HDFS服务。请确保为以下必填参数提供值:user
、password
、cluster
、name
和port
。其他参数都是可选的。确保您的用户具有从源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 地址。 -
保存您的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
-
打开您的CLI脚本,其中包含您的源 Hadoop 集群的连接信息。将目标 Amazon 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 连接信息。这包括您的亚马逊EMR集群的 IP 地址、访问密钥、私有 AWS 访问 AWS 密钥和 Amazon S3 存储桶。如果需要,请配置端口变量的值。接下来,替换
emr_user
以及emr_password
包含您的 Amazon EMR 用户名和该用户的密码。对于path\name
,输入目标 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 服务添加到项目中。
以下代码示例创建了一个隧道, 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 服务的端口。 -
将您的目标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 -
保存您的CLI脚本。接下来,添加映射规则和迁移命令。有关更多信息,请参阅 迁移 Hadoop 工作负载。