微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Glue 将数据从 AWS EMR 加载到 Redshift 非常慢

如何解决使用 Glue 将数据从 AWS EMR 加载到 Redshift 非常慢

我正在尝试将数据从 AWS EMR(数据存储为 S3 和胶水目录用于 metastore)加载到 Redshift。

import sys
import boto3
from datetime import datetime,date
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from awsglue.context import glueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame
from pyspark.context import SparkContext
from pyspark.sql import *
from pyspark.sql.functions import *
from pyspark.sql.window import *
from pyspark.sql.functions import to_date
from pyspark.sql import sqlContext

glueContext = glueContext(SparkContext.getorCreate())
spark = glueContext.sparkSession
sc = spark.sparkContext
sqlContext = sqlContext(sc)

df = sqlContext.sql("Select * from classic_models.orderdetails  where insert_date >= '2021-01-01' and insert_date < '2021-01-02' ")
dynamic_df = DynamicFrame.fromDF(new_df,glueContext,"dynamic_df")
redshift_target_table = "classic_models.orderdetails"
pre_actions = f"Truncate table {redshift_target_table};"
redshift_connection_opts = {
    "database": "dev","dbtable": redshift_target_table,"aws_iam_role": "arn:aws:iam::*********","preactions": pre_actions
}
s3_temp_dir = datetime.Now().strftime("%Y-%m-%d_%H-%M-%s")
glueContext.write_dynamic_frame.from_jdbc_conf(
    frame = dynamic_df,catalog_connection = "redshift",connection_options = redshift_connection_opts,redshift_tmp_dir = "s3:/staging/orderdetails/%s/" % s3_temp_dir  #Need change
)

从 Hive 提取数据非常快,但将数据加载到 Redshift 需要很长时间。长我的意思是,如果我正在加载过去 10 天的数据,并且粘合工作需要 16 分钟才能完成,不到 1 分钟是从 Hive 中提取数据,其余的只是将数据加载到 Redshift。 超过一半的 Hive 表列是 String 数据类型 还有其他更好更快的方法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。