AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

Amazon EMR クラスターで Spark を使用して Amazon Redshift クラスターに接続する方法を教えてください。

所要時間2分
0

Amazon EMR クラスターで Spark を使用して Amazon Redshift クラスターに接続したいです。

解決策

注: 開始する前に、必ず Amazon Redshift クラスターを設定してください。次に、Spark を使用して Amazon EMR 6.4 以降のクラスターを起動します。

Amazon EMR クラスターで Spark を使用して Amazon Redshift クラスターに接続するには、次のステップを実行します。

Amazon EMR クラスターと Amazon Redshift クラスター間の接続をテストする

  1. Amazon Redshift クラスターのセキュリティグループのインバウンドルールで、TCP ポート 5439 での Amazon EMR プライマリ、コア、およびタスクセキュリティグループが許可されていることを確認します。
    注: クラスターが 2 つの異なる Amazon Virtual Private Cloud (Amazon VPC) にデプロイされている場合は、Amazon VPC ピアリングを設定します。

  2. 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 クラスターに接続する

次の手順を実行します。

  1. Amazon EMR プライマリノードに接続するには、SSH を使用します
  2. 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 統合を使用する

AWS公式
AWS公式更新しました 1ヶ月前
コメントはありません