

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

# 在 Amazon EMR 上使用 Sqoop 的考量
<a name="emr-sqoop-considerations"></a>

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

## 使用 Sqoop 搭配 HCatalog 整合
<a name="emr-sqoop-hcatalog"></a>

在 Amazon EMR 上的 Sqoop 支援 [Sqoop-HCatalog 整合](https://sqoop.apache.org/docs/1.4.4/SqoopUserGuide.html#_sqoop_hcatalog_integration)。當您使用 Sqoop 將輸出寫入至 Amazon S3 中的 HCatalog 資料表，請將 `mapred.output.direct.NativeS3FileSystem` 和 `mapred.output.direct.EmrFileSystem` 屬性設為 `false` 以停用 Amazon EMR 直接寫入。如需詳細資訊，請參閱[使用 HCatalog](emr-hcatalog-using.md)。您可以使用 Hadoop `-D mapred.output.direct.NativeS3FileSystem=false` 和 `-D mapred.output.direct.EmrFileSystem=false` 命令。如果您不停用直接寫入，則不會發生錯誤，但資料表會建立在 Amazon S3 中且不會寫入任何資料。

## Sqoop JDBC 和資料庫支援
<a name="sqoop-supported-drivers-databases"></a>

在預設情況下，Sqoop 已安裝 MariaDB 和 PostgreSQL 驅動程式。Sqoop 安裝的 PostgreSQL 驅動程式僅適用於 PostgreSQL 8.4 版。若要為 Sqoop 安裝另一組 JDBC 連接器，請連接至叢集主節點並在 `/usr/lib/sqoop/lib` 中進行安裝。以下是各種 JDBC 連接器的連結：
+ MariaDB：[關於 MariaDB Connector/J](https://mariadb.com/kb/en/mariadb/about-mariadb-connector-j/)。
+ PostgreSQL：[PostgreSQL JDBC 驅動器](https://jdbc.postgresql.org/)。
+ SQLServer：[下載適用於 SQL Server 的 Microsoft JDBC 驅動器](https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server)。
+ MySQL：[下載 Connector/J](https://dev.mysql.com/downloads/connector/j/)
+ Oracle：[從 Oracle Maven 儲存庫取得 Oracle JDBC 驅動器和 UCP](http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html)

以下 URL (http://sqoop.apache.org/docs/*version*/SqoopUserGuide.html\$1\$1supported\$1databases) 列出了 Sqoop 的支援資料庫，其中 *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
```

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

```
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
```

如需有關 RDS 中 SSL 加密的詳細資訊，請參閱《Amazon RDS 使用者指南》中的[使用 SSL 來加密對資料庫執行個體的連線](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)。

如需詳細資訊，請參閱 [Apache Sqoop](http://sqoop.apache.org) 文件。

## 保護密碼
<a name="emr-sqoop-password"></a>

您可以選擇以下幾種方法來安全地傳遞密碼：

------
#### [ Java KeyStore ]

偏好的方法是使用 Java KeyStore (JKS) 加密密碼，而不需以易讀格式存放密碼。

1. 建立密碼別名。收到提示時，輸入您用來存取資料庫的密碼。

   ```
   hadoop credential create mydb.password.alias -provider jceks://hdfs/user/root/mysql.password.jceks
   ```

1. 使用密碼別名來啟動 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
   ```

1. 使用該檔案啟動 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
```

------