Como faço para usar o Spark no meu cluster do Amazon EMR para me conectar a um cluster do Amazon Redshift?

2 minuto de leitura
0

Quero usar o Spark no meu cluster do Amazon EMR para me conectar a um cluster do Amazon Redshift.

Resolução

Observação: Antes de começar, certifique-se de configurar seu cluster do Amazon Redshift. Em seguida, use o Spark para iniciar um cluster do Amazon EMR 6.4 ou posterior.

Para usar o Spark em seu cluster do Amazon EMR para se conectar a um cluster do Amazon Redshift, conclua as seguintes etapas:

Teste a conectividade entre o cluster do Amazon EMR e o cluster do Amazon Redshift

  1. Confirme se as regras de entrada do grupo de segurança do cluster do Amazon Redshift permitem os grupos de segurança primários, principais e de tarefas do Amazon EMR na porta TCP 5439.
    Observação: Se seus clusters estiverem implantados em duas Amazon Virtual Private Clouds (Amazon VPC) diferentes, configure o peering da Amazon VPC.

  2. Para se conectar ao nó primário do Amazon EMR, use SSH. Em seguida, execute o seguinte comando telnet:

    telnet example-redshift-endpoint 5439

    Observação: Substitua example-redshift-endpoint pelo seu endpoint de cluster do Amazon Redshift.

    Exemplo de saída:

    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 '^]'.

Use o Spark no Amazon EMR 6.4.0 ou posterior para se conectar ao seu cluster do Amazon Redshift

Conclua as seguintes etapas:

  1. Para se conectar ao nó primário do Amazon EMR, use SSH.
  2. Para ler uma tabela do Amazon Redshift, use o conector JDBC. Para obter mais informações, consulte Parâmetros do conector.
    Exemplo do 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)

Observação: Para obter opções seguras adicionais para gerenciar as credenciais do usuário que são usadas na conexão JDBC, consulte Gerenciamento de identidade e acesso no Amazon Redshift.

Informações relacionadas

Usar a integração do Amazon Redshift para o Apache Spark com o Amazon EMR

AWS OFICIAL
AWS OFICIALAtualizada há 6 meses