5

Spark を amazon Redshift に接続しようとしていますが、次のエラーが発生します。

ここに画像の説明を入力

私のコードは次のとおりです。

from pyspark.sql import SQLContext
from pyspark import SparkContext

sc = SparkContext(appName="Connect Spark with Redshift")
sql_context = SQLContext(sc)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", <ACCESSID>)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", <ACCESSKEY>)

df = sql_context.read \
    .option("url", "jdbc:redshift://example.coyf2i236wts.eu-central-    1.redshift.amazonaws.com:5439/agcdb?user=user&password=pwd") \
    .option("dbtable", "table_name") \
    .option("tempdir", "bucket") \
    .load()
4

6 に答える 6

1

このエラーは、依存関係の欠落が原因です。

Spark ホーム ディレクトリに次の jar ファイルがあることを確認します。

  1. spark-redshift_2.10-3.0.0-preview1.jar
  2. RedshiftJDBC41-1.1.10.1010.jar
  3. hadoop-aws-2.7.1.jar
  4. aws-java-sdk-1.7.4.jar
  5. (aws-java-sdk-s3-1.11.60.jar) (新しいバージョンですが、すべてが機能したわけではありません)

これらの jar ファイルを $SPARK_HOME/jars/ に置き、spark を開始します。

pyspark --jars $SPARK_HOME/jars/spark-redshift_2.10-3.0.0-preview1.jar,$SPARK_HOME/jars/RedshiftJDBC41-1.1.10.1010.jar,$SPARK_HOME/jars/hadoop-aws-2.7.1.jar,$SPARK_HOME/jars/aws-java-sdk-s3-1.11.60.jar,$SPARK_HOME/jars/aws-java-sdk-1.7.4.jar

(SPARK_HOME = "/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec" にする必要があります)

これにより、必要なすべての依存関係で Spark が実行されます。awsAccessKeys を使用している場合は、認証タイプ 'forward_spark_s3_credentials'=True も指定する必要があることに注意してください。

from pyspark.sql import SQLContext
from pyspark import SparkContext

sc = SparkContext(appName="Connect Spark with Redshift")
sql_context = SQLContext(sc)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", <ACCESSID>)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", <ACCESSKEY>)

df = sql_context.read \
     .format("com.databricks.spark.redshift") \
     .option("url", "jdbc:redshift://example.coyf2i236wts.eu-central-    1.redshift.amazonaws.com:5439/agcdb?user=user&password=pwd") \
     .option("dbtable", "table_name") \
     .option('forward_spark_s3_credentials',True) \
     .option("tempdir", "s3n://bucket") \
     .load()

その後の一般的なエラーは次のとおりです。

  • Redshift 接続エラー:「SSL オフ」
    • 解決: .option("url", "jdbc:redshift://example.coyf2i236wts.eu-central- 1.redshift.amazonaws.com:5439/agcdb?user=user&password=pwd?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory")
  • S3 エラー: データをアンロードするとき、たとえば df.show() の後、次のメッセージが表示されます。
    • 解決策: バケットとクラスターは同じリージョン内で実行する必要があります
于 2016-11-26T18:13:37.737 に答える
0

Databricks を使用している場合は、新しい sql Context を作成する必要はないと思います。なぜなら、sqlContext を使用するだけでよいためです。次のコードを試してください。

from pyspark.sql import SQLContext
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "YOUR_KEY_ID")
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "YOUR_SECRET_ACCESS_KEY")

df = sqlContext.read \ .......

バケットがマウントされていない可能性があります

dbutils.fs.mount("s3a://%s:%s@%s" % (ACCESS_KEY, ENCODED_SECRET_KEY, AWS_BUCKET_NAME), "/mnt/%s" % MOUNT_NAME)
于 2016-07-26T19:12:39.747 に答える
-1

.format("com.databricks.spark.redshift")電話に追加する必要があると思いsql_context.readます。私の推測では、Spark はこのデータ ソースの形式を推測できないため、spark-redshiftコネクタを使用する必要があることを明示的に指定する必要があります。

このエラーの詳細については、https://github.com/databricks/spark-redshift/issues/230を参照してください。

于 2016-10-18T21:26:09.620 に答える