Amazon EMR 클러스터에서 Spark를 사용하여 Amazon Redshift 클러스터에 연결하려고 합니다.
해결 방법
참고: 시작하기 전에 Amazon Redshift 클러스터를 구성해야 합니다. 그런 다음 Spark를 사용하여 Amazon EMR 6.4 이상 클러스터를 시작합니다.
Amazon EMR 클러스터에서 Spark를 사용하여 Amazon Redshift 클러스터에 연결하려면 다음 단계를 완료하십시오.
Amazon EMR 클러스터와 Amazon Redshift 클러스터 간의 연결 테스트
-
Amazon Redshift 클러스터의 보안 그룹 인바운드 규칙이 TCP 포트 5439의 Amazon EMR 프라이머리, 코어 및 작업 보안 그룹을 허용하는지 확인합니다.
참고: 클러스터가 서로 다른 두 Amazon Virtual Private Cloud(Amazon VPC)에 배포된 경우 Amazon VPC 피어링을 구성하십시오.
-
Amazon EMR 프라이머리 노드에 연결하려면 SSH를 사용합니다. 그리고 다음 telnet 명령을 실행합니다.
telnet example-redshift-endpoint 5439
참고: example-redshift-endpoint를 Amazon Redshift 클러스터 엔드포인트로 바꾸십시오.
출력 예시:
telnet redshift-cluster-1.XXXXX.us-east-1.redshift.amazonaws.com 5439
Trying 172.31.48.21...
Connected to redshift-cluster-1.XXXXX.us-east-1.redshift.amazonaws.com.
Escape character is '^]'.
Amazon EMR 6.4.0 이상에서 Spark를 사용하여 Amazon Redshift 클러스터에 연결
다음 단계를 완료하십시오.
- Amazon EMR 프라이머리 노드에 연결하려면 SSH를 사용합니다.
- Amazon Redshift 테이블을 읽으려면 JDBC 커넥터를 사용합니다. 자세한 내용은 커넥터 매개변수를 참조하십시오.
PySpark 예시:
[hadoop@ip-10-10-10-10 ~]$ pyspark
>>> from pyspark.sql import SQLContext
>>> sql_context = SQLContext(sc)
>>> url = "jdbc:redshift://<redshift-endpoint>:5439/dev?user=<user>&password=<password>"
>>> df = sql_context.read \
.format("io.github.spark_redshift_community.spark.redshift") \
.option("url", url) \
.option("query", "select * from table") \
.option("tempdir", "<tempdir>") \
.option("aws_iam_role", "<iam_role>") \
.load()
>>> df.show(2)
Spark-shell example:
[hadoop@ip-192-168-1-113 ~]$ spark-shell
scala> import org.apache.spark.sql._
scala> val sql_context = new SQLContext(sc)
scala> val url = "jdbc:redshift://<redshift-endpoint>:5439/dev?user=<user>&password=<password>"
scala> val df = sql_context.read.format("io.github.spark_redshift_community.spark.redshift").option("url", url).option("query", "select * from table").option("tempdir", "<tempdir>").option("aws_iam_role", "<iam_role>").load()
scala> df.show(2)
참고: JDBC 연결에 사용되는 사용자 자격 증명을 관리하기 위한 추가 보안 옵션은 Amazon Redshift의 ID 및 액세스 관리를 참조하십시오.
관련 정보
Amazon EMR과 Apache Spark를 위한 Amazon Redshift 통합 사용