在亚马逊上使用 Sqoop 的注意事项 EMR - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在亚马逊上使用 Sqoop 的注意事项 EMR

在亚马逊上运行 Sqoop 时,请考虑以下几点。EMR

将 Sqoop 与集成一起使用 HCatalog

亚马逊上的 Sqoop EMR 支持 Sqoo p 集成。HCatalog当您使用 Sqoop 将输出写入 Amazon S3 中的HCatalog表时,请通过将mapred.output.direct.NativeS3FileSystemmapred.output.direct.EmrFileSystem属性设置为来禁用亚马逊EMR直接写入。false有关更多信息,请参阅 使用 HCatalog。您可使用 Hadoop -D mapred.output.direct.NativeS3FileSystem=false-D mapred.output.direct.EmrFileSystem=false 命令。如果您未禁用直接写入,则不会发生错误,但在 Amazon S3 中创建表时不会写入任何数据。

Sqoop JDBC 和数据库支持

默认情况下,Sqoop 安装了 MariaDB 和 Postgre 驱动程序。SQL为 Sqoop 安装的 Postgre SQL 驱动程序仅适用于 Postgre 8.4。SQL要为 Sqoop 安装一组备用JDBC连接器,请连接到群集主节点并将其安装在中。/usr/lib/sqoop/lib以下是各种JDBC连接器的链接:

Sqoop 支持的数据库列在以下网址上 http://sqoop.apache.org/docs/version/SqoopUserGuide.html #_supported_databases, 哪里 version 是你正在使用的 Sqoop 版本,例如 1.4.6。如果JDBC连接字符串与此列表中的字符串不匹配,则必须指定驱动程序。

例如,您可以使用以下命令导出到 Amazon Redshift 数据库表(对于 JDBC 4.1):

sqoop export --connect jdbc:redshift://$MYREDSHIFTHOST:5439/mydb --table mysqoopexport --export-dir s3://amzn-s3-demo-bucket/myinputfiles/ --driver com.amazon.redshift.jdbc41.Driver --username master --password Mymasterpass1

你可以同时使用 MariaDB 和 My 的SQL连接字符串,但是如果你指定了 MariaDB 连接字符串,则需要指定驱动程序:

sqoop export --connect jdbc:mariadb://$HOSTNAME:3306/mydb --table mysqoopexport --export-dir s3://amzn-s3-demo-bucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master --password Mymasterpass1

如果您使用安全套接字层加密来访问数据库,则需要使用以下 Sqoop 导出示例中的JDBCURI类似内容:

sqoop export --connect jdbc:mariadb://$HOSTNAME:3306/mydb?verifyServerCertificate=false&useSSL=true&requireSSL=true --table mysqoopexport --export-dir s3://amzn-s3-demo-bucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master --password Mymasterpass1

有关SSL加密的更多信息RDS,请参阅 Amazon RDS 用户指南中的使用SSL加密与数据库实例的连接

有关更多信息,请参阅 Apache Sqoop 文档。

保护密码

您可以选择以下几种方法来安全地传递密码:

Java KeyStore

首选方法使用 Java KeyStore (JKS) 对密码进行加密,无需以可读格式存储密码。

  1. 创建密码别名。当出现提示时,输入您用于访问数据库的密码。

    hadoop credential create mydb.password.alias -provider jceks://hdfs/user/root/mysql.password.jceks
  2. 使用密码别名启动 Sqoop 作业:

    sqoop export -Dhadoop.security.credential.provider.path=jceks://hdfs/user/root/mysql.password.jceks --connect jdbc:mariadb://$HOSTNAME:3306/mydb --table mysqoopexport --export-dir s3://amzn-s3-demo-bucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master --password-alias mydb.password.alias
--password-file

您可以使用 --password-file 命令通过文件传递密码,如以下示例所示:

  1. 创建包含密码的新文件:

    echo -n 'Mymasterpass1' > /home/hadoop/mysql-pass.password
  2. 使用该文件启动 Sqoop 作业:

    sqoop export --connect jdbc:mariadb://$HOSTNAME:3306/mydb --table mysqoopexport --export-dir s3://amzn-s3-demo-bucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master --password-file /home/hadoop/mysql-pass.password
-P

您可以使用 -P 命令通过提示符输入密码,如以下示例所示:

sqoop export --connect jdbc:mariadb://$HOSTNAME:3306/mydb --table mysqoopexport --export-dir s3://amzn-s3-demo-bucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master -P