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
-
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.
-
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:
- Para se conectar ao nó primário do Amazon EMR, use SSH.
- 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