【发布时间】:2016-06-14 20:45:58
【问题描述】:
我正在使用 kinesis 和 redshift 设置火花流光。我每 10 秒后从 kinesis 读取数据,对其进行处理并使用 spark-redshift lib 将其写入 redshift。
问题是只写 300 行要花很多时间。
这就是它在控制台中显示的内容
[Stage 56:====================================================> (193 + 1) / 200]
查看我的日志 df.write.format 正在这样做。
我在一台具有 4 gb ram 和 2 个核心 amazon EC2 的机器上设置了 spark 设置,以 --master local[*] 模式运行。
这是我创建流的方式
kinesisStream = KinesisUtils.createStream(ssc, APPLICATION_NAME, STREAM_NAME, ENDPOINT, REGION_NAME, INITIAL_POS, CHECKPOINT_INTERVAL, awsAccessKeyId =AWSACCESSID, awsSecretKey=AWSSECRETKEY, storageLevel=STORAGE_LEVEL)
CHECKPOINT_INTERVAL = 60
storageLevel = memory
kinesisStream.foreachRDD(writeTotable)
def WriteToTable(df, type):
if type in REDSHIFT_PAGEVIEW_TBL:
df = df.groupby([COL_STARTTIME, COL_ENDTIME, COL_CUSTOMERID, COL_PROJECTID, COL_FONTTYPE, COL_DOMAINNAME, COL_USERAGENT]).count()
df = df.withColumnRenamed('count', COL_PAGEVIEWCOUNT)
# Write back to a table
url = ("jdbc:redshift://" + REDSHIFT_HOSTNAME + ":" + REDSHIFT_PORT + "/" + REDSHIFT_DATABASE + "?user=" + REDSHIFT_USERNAME + "&password="+ REDSHIFT_PASSWORD)
s3Dir = 's3n://' + AWSACCESSID + ':' + AWSSECRETKEY + '@' + BUCKET + '/' + FOLDER
print 'Start writing to redshift'
df.write.format("com.databricks.spark.redshift").option("url", url).option("dbtable", REDSHIFT_PAGEVIEW_TBL).option('tempdir', s3Dir).mode('Append').save()
print 'Finished writing to redshift'
请告诉我花这么多时间的原因
【问题讨论】:
标签: apache-spark spark-streaming amazon-redshift