Je souhaite utiliser Spark dans mon cluster Amazon EMR pour me connecter à un cluster Amazon Redshift.
Résolution
Remarque : Avant de commencer, assurez-vous de configurer votre cluster Amazon Redshift. Puis, utilisez Spark pour lancer un cluster Amazon EMR 6.4 ou version ultérieure.
Pour utiliser Spark dans votre cluster Amazon EMR afin de vous connecter à un cluster Amazon Redshift, procédez comme suit :
Testez la connectivité entre le cluster Amazon EMR et le cluster Amazon Redshift
-
Vérifiez que les règles entrantes des groupes de sécurité du cluster Amazon Redshift autorisent les groupes de sécurité primaires, principaux et de tâches Amazon EMR sur le port TCP 5439.
Remarque : Si vos clusters sont déployés dans deux Amazon Virtual Private Clouds (Amazon VPC) différents, configurez l’appairage Amazon VPC.
-
Pour vous connecter au nœud primaire Amazon EMR, utilisez SSH. Puis, exécutez la commande telnet suivante :
telnet example-redshift-endpoint 5439
Remarque : Remplacez example-redshift-endpoint par le point de terminaison de votre cluster Amazon Redshift.
Exemple de résultat :
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 '^]'.
Utilisez Spark dans Amazon EMR 6.4.0 ou version ultérieure pour vous connecter à votre cluster Amazon Redshift
Effectuez les opérations suivantes :
- Pour vous connecter au nœud primaire Amazon EMR, utilisez SSH.
- Pour lire un tableau Amazon Redshift, utilisez le connecteur JDBC. Pour plus d'informations, consultez la section Paramètres du connecteur.
Exemple 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)
Remarque : Pour des options de sécurité supplémentaires permettant de gérer les informations d'identification utilisateur utilisées dans la connexion JDBC, consultez la section Gestion des identités et des accès dans Amazon Redshift.
Informations connexes
Utilisation de l'intégration Amazon Redshift pour Apache Spark avec Amazon EMR