将流数据插入 Amazon Redshift 集群
Inserting streaming data into an Amazon Redshift cluster
我正在尝试将 sparkstream 数据直接插入 Amazon Redshift 集群,但找不到正确的方法。
下面是我得到的代码,但它首先插入到 S3,然后复制到 Redshift:.
#REDSHIFT_JDBC_URL = "jdbc:redshift://%s:5439/%s" % (REDSHIFT_SERVER, DATABASE)
df.write \
.format("com.databricks.spark.redshift") \
.option("url", REDSHIFT_JDBC_URL) \
.option("dbtable", TABLE_NAME) \
.option("tempdir", "s3n://%s:%s@%s" % (ACCESS_KEY, SECRET, S3_BUCKET_PATH)) \
.mode("overwrite") \
.save()
它会影响流式传输或插入性能吗?
或者有其他方法吗?
您正在使用的 Spark 的 Redshift 数据源通过将数据写入 S3 上的临时文件将数据写入 Redshift,然后使用 Redshift COPY 命令将数据加载到 Redshift。 COPY 命令要求数据位于 S3 上的文件中,这是将数据加载到 Redshift 中的最有效方式,因此您的代码当前所做的似乎是正确的。
另请参阅:https://databricks.com/blog/2015/10/19/introducing-redshift-data-source-for-spark.html
AWS Redshift 现在支持通过 Kinesis Data Streams 本地流式插入。无需中间 S3 分期。功能现已 public 预览
我正在尝试将 sparkstream 数据直接插入 Amazon Redshift 集群,但找不到正确的方法。
下面是我得到的代码,但它首先插入到 S3,然后复制到 Redshift:.
#REDSHIFT_JDBC_URL = "jdbc:redshift://%s:5439/%s" % (REDSHIFT_SERVER, DATABASE)
df.write \
.format("com.databricks.spark.redshift") \
.option("url", REDSHIFT_JDBC_URL) \
.option("dbtable", TABLE_NAME) \
.option("tempdir", "s3n://%s:%s@%s" % (ACCESS_KEY, SECRET, S3_BUCKET_PATH)) \
.mode("overwrite") \
.save()
它会影响流式传输或插入性能吗?
或者有其他方法吗?
您正在使用的 Spark 的 Redshift 数据源通过将数据写入 S3 上的临时文件将数据写入 Redshift,然后使用 Redshift COPY 命令将数据加载到 Redshift。 COPY 命令要求数据位于 S3 上的文件中,这是将数据加载到 Redshift 中的最有效方式,因此您的代码当前所做的似乎是正确的。
另请参阅:https://databricks.com/blog/2015/10/19/introducing-redshift-data-source-for-spark.html
AWS Redshift 现在支持通过 Kinesis Data Streams 本地流式插入。无需中间 S3 分期。功能现已 public 预览