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 プライマリ、コア、およびタスクセキュリティグループが許可されていることを確認します。
注: クラスターが 2 つの異なる 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 統合を使用する