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.
-
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.
-
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:
- Para conectarte al nodo principal de Amazon EMR, utiliza SSH.
- 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