Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

¿Cómo puedo usar Spark en mi clúster de Amazon EMR para conectarme a un clúster de Amazon Redshift?

2 minutos de lectura
0

Quiero usar Spark en mi clúster de Amazon EMR para conectarme a un clúster de Amazon Redshift.

Solución

Nota: Antes de empezar, asegúrate de configurar el clúster de Amazon Redshift. A continuación, utiliza Spark para lanzar un clúster de Amazon EMR 6.4 o posterior.

Para usar Spark en tu clúster de Amazon EMR para conectarte a un clúster de Amazon Redshift, sigue estos pasos:

Prueba la conectividad entre el clúster de Amazon EMR y el clúster de Amazon Redshift.

  1. Confirma que las reglas de entrada de los grupos de seguridad del clúster de Amazon Redshift permitan los grupos de seguridad principales, centrales y de tareas de Amazon EMR en el puerto TCP 5439.
    Nota: Si tus clústeres están implementados en dos instancias diferentes de Amazon Virtual Private Cloud (Amazon VPC), configura el emparejamiento de Amazon VPC.

  2. Para conectarte al nodo principal de Amazon EMR, utiliza SSH. A continuación, ejecuta el siguiente comando telnet:

    telnet example-redshift-endpoint 5439

    Nota: Sustituye example-redshift-endpoint por el punto de enlace del clúster de Amazon Redshift.

    Resultado de ejemplo:

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

Uso de Spark en Amazon EMR 6.4.0 o una versión posterior para conectarse a tu clúster de Amazon Redshift

Sigue estos pasos:

  1. Para conectarte al nodo principal de Amazon EMR, utiliza SSH.
  2. Para leer una tabla de Amazon Redshift, utiliza el conector JDBC. Para obtener más información, consulta Parámetros de conector.
    Ejemplo de 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)

Nota: Para ver opciones seguras adicionales para administrar las credenciales de usuario que se utilizan en la conexión de JDBC, consulta Administración de identidades y accesos en Amazon Redshift.

Información relacionada

Uso de la integración de Amazon Redshift para Apache Spark con Amazon EMR

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un mes