Consideraciones relacionadas con el uso de Sqoop en Amazon EMR - Amazon EMR

Consideraciones relacionadas con el uso de Sqoop en Amazon EMR

Tenga en cuenta los siguientes elementos al ejecutar Sqoop en Amazon EMR.

Uso de Sqoop con la integración de HCatalog

Sqoop en Amazon EMR admite la integración de HCatalog con Sqoop. Cuando utilice Sqoop para escribir el resultado en una tabla de HCatalog en Amazon S3, deshabilite la escritura directa de Amazon EMR; para ello, establezca las propiedades mapred.output.direct.NativeS3FileSystem y mapred.output.direct.EmrFileSystem en false. Para obtener más información, consulte Uso de HCatalog. Puede utilizar los comandos -D mapred.output.direct.NativeS3FileSystem=false y -D mapred.output.direct.EmrFileSystem=false de Hadoop. Si no se desactiva la escritura directa, no se produce ningún error, pero la tabla se crea en Amazon S3 y no se escriben datos.

Compatibilidad con JDBC y bases de datos de Sqoop

De forma predeterminada, Sqoop tiene instalado un controlador de MariaDB y PostgresSQL. El controlador de PostgresSQL instalado para Sqoop solo funciona en PostgreSQL 8.4. Para instalar un conjunto alternativo de conectores JDBC para Sqoop, conéctese al nodo principal del clúster e instálelos en /usr/lib/sqoop/lib. A continuación se indican los enlaces para diversos conectores JDBC:

Las bases de datos compatibles para Sqoop se muestran en la siguiente URL: http://sqoop.apache.org/docs/versión/SqoopUserGuide.html#_supported_databases, donde versión es la versión de Sqoop que se utiliza, por ejemplo, la 1.4.6. Si la cadena de conexión de JDBC no coincide con ninguna de las cadenas de esta lista, debe especificar un controlador.

Por ejemplo, puede exportar a una tabla de base de datos de Amazon Redshift con el siguiente comando (para 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

Puede utilizar las cadenas de conexión de MariaDB y MySQL, pero si especifica la cadena de conexión de MariaDB, tiene que especificar el controlador:

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

Si utiliza el cifrado de Capa de conexión segura para acceder a la base de datos, tiene que utilizar un URI de JDBC como en el siguiente ejemplo de exportación de 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

Para más información sobre el cifrado SSL en RDS, consulte Uso de SSL para cifrar una conexión a una instancia de base de datos en la Guía del usuario de Amazon RDS.

Para obtener más información, consulte la documentación de Apache Sqoop.

Cómo proteger la contraseña

Hay varios métodos entre los cuales podría elegir para asegurarse de transferir su contraseña de forma segura:

Java KeyStore

El método preferido cifra la contraseña con un Java KeyStore (JKS), lo que elimina la necesidad de almacenar la contraseña en un formato legible.

  1. Cree un alias de contraseña. Cuando aparezca el mensaje, ingrese su contraseña para acceder a la base de datos.

    hadoop credential create mydb.password.alias -provider jceks://hdfs/user/root/mysql.password.jceks
  2. Utilice el alias de contraseña para iniciar el trabajo de 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

También puede usar el comando --password-file para transferir la contraseña a través de un archivo, como se muestra en el siguiente ejemplo:

  1. Cree un nuevo archivo que contenga la contraseña:

    echo -n 'Mymasterpass1' > /home/hadoop/mysql-pass.password
  2. Utilice el archivo para iniciar el trabajo de 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

También puede usar el comando -P para escribir la contraseña, como se muestra en el siguiente ejemplo:

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