Amazon EMR에서 Sqoop에 대한 고려 사항 - Amazon EMR

Amazon EMR에서 Sqoop에 대한 고려 사항

Amazon EMR에서 Sqoop을 실행할 때는 다음 사항을 고려합니다.

HCatalog 통합을 통해 Sqoop 사용

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/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 및 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 내보내기 예제에서처럼 JDBC URI를 사용해야 합니다.

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을 사용하여 DB 인스턴스에 대한 연결 암호화를 참조하세요.

자세한 내용은 Apache Sqoop 설명서를 참조하십시오.

암호 변경

몇 가지 방법 중 하나를 선택하여 암호를 안전하게 전달할 수 있습니다.

Java KeyStore

선택한 방법에서는 JKS(Java KeyStore)를 사용하여 암호를 암호화하므로 암호를 읽을 수 있는 형식으로 저장할 필요가 없습니다.

  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