在 Amazon EMR 上使用 Sqoop 的考量 - Amazon EMR

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

在 Amazon EMR 上使用 Sqoop 的考量

在 Amazon EMR 上執行 Sqoop 時請考量以下項目。

使用 Sqoop 搭配 HCatalog 整合

在 Amazon EMR 上的 Sqoop 支援 Sqoop-HCatalog 整合。當您使用 Sqoop 將輸出寫入至 Amazon S3 中的 HCatalog 資料表,請將 mapred.output.direct.NativeS3FileSystemmapred.output.direct.EmrFileSystem 屬性設為 false 以停用 Amazon EMR 直接寫入。如需詳細資訊,請參閱 使用 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 支持的數據庫列在以下網址,http://sqoop.apache.org/docs/ 版本/SqoopUserGuideHTML #_supported_databases,其中版本是您正在使用的 Sqoop 的版本,例如 1.4.6。如果 JDBC 連線字串與此清單的字串不相符,您必須指定驅動程式。

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

sqoop export --connect jdbc:redshift://$MYREDSHIFTHOST:5439/mydb --table mysqoopexport --export-dir s3://mybucket/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://mybucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master --password Mymasterpass1

如果您使用的是安全資料傳輸層加密來存取您的資料庫,則需要使用 JDBC URI (如以下 Sqoop 匯出範例中所示):

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

如需有關 RDS 中 SSL 加密的詳細資訊,請參閱《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://mybucket/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://mybucket/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://mybucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master -P