Sqoop on Amazon 的考量事項 EMR - Amazon EMR

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

Sqoop on Amazon 的考量事項 EMR

當您在 Amazon 上執行 Sqoop 時,請考慮下列項目EMR。

搭配HCatalog整合使用 Sqoop

Amazon 上的 Sqoop EMR支援 Sqoop HCatalog整合 。當您使用 Sqoop 將輸出寫入 Amazon S3 中的HCatalog資料表時,請將 mapred.output.direct.NativeS3FileSystemmapred.output.direct.EmrFileSystem 屬性設定為 來停用 Amazon EMR直接寫入false。如需詳細資訊,請參閱使用 HCatalog。您可以使用 Hadoop -D mapred.output.direct.NativeS3FileSystem=false-D mapred.output.direct.EmrFileSystem=false 命令。如果您不停用直接寫入,則不會發生錯誤,但資料表會建立在 Amazon S3 中且不會寫入任何資料。

Sqoop JDBC和資料庫支援

根據預設,Sqoop 已安裝 MariaDB 和 PostgreSQL 驅動程式。為 Sqoop 安裝的 PostgreSQL 驅動程式僅適用於 PostgreSQL 8.4。若要安裝 Sqoop 的替代JDBC連接器集,請連線至叢集主節點,並將其安裝在 中/usr/lib/sqoop/lib。以下是各種JDBC連接器的連結:

Sqoop 支援的資料庫列於下列 URL:https://http://sqoop.apache.org/docs/version/SqoopUserGuide.html#_supported_databases,其中 version 是您正在使用的 Sqoop 版本,例如 1.4.6。如果JDBC連線字串與此清單中的字串不相符,您必須指定驅動程式。

例如,您可以使用下列命令 (適用於 JDBC 4.1) 匯出至 Amazon Redshift 資料庫資料表:

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 和 MySQL 連線字串,但如果您指定 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

如果您使用 Secure Socket Layer 加密來存取資料庫,則需要在以下 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