如何在我的 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 主要、核心和工作安全性群組。
    **注意:**如果您的叢集部署在兩個不同的 Amazon Virtual Private Cloud (Amazon VPC) 中,請設定 Amazon VPC 對等互連

  2. 若要連線到 Amazon EMR 主節點,請使用 SSH。然後,執行下列 telnet 命令:

    telnet example-redshift-endpoint 5439

    **注意:**請使用 Amazon Redshift 叢集端點取代 example-redshift-endpoint

    範例輸出結果:

    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 中的身分識別與存取管理

相關資訊

透過 Amazon EMR 使用適用於 Apache Spark 的 Amazon Redshift 整合

AWS 官方
AWS 官方已更新 6 個月前