반응형
python job을 생성하여 싱글노드로 MSSQL 데이터를 S3에 저장하다보니, 데이터의 양이 1억건이 넘어가면
메모리부족이 발생했다.
데이터 사이즈가 큰 테이블의 경우에는, Spark을 이용해 분산저장을 해야겠다.
일단 Glue Job에서, [Spark script editor] 을 통해
Spark job을 생성한다.
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
## database information
server_name = "jdbc:sqlserver://serverIp:port"
database_name = "database"
table_name = "table"
username = "username"
password = "password"
## s3 bucket information
bucket_name = "bucket_name"
target1_name = "prefix1"
target2_name = "prefix2"
url = server_name + ";" + "databaseName=" + database_name + ";"
jdbcDF = spark.read \\
.format("com.microsoft.sqlserver.jdbc.spark") \\
.option("url", url) \\
.option("dbtable", f"dbo.{table_name}") \\
.option("user", username) \\
.option("password", password).load()
jdbcDF.write.format('parquet').mode("overwrite").save(f"s3://{bucket_name}/{target1_name}/{database_name}/{table_name}/")
jdbcDF.write.format('parquet').mode("overwrite").save(f"s3://{bucket_name}/{target2_name}/{database_name}/{table_name}/")
#print(jdbcDF)
print(f"upload path 1 = s3://{bucket_name}/{target1_name}/{database_name}/{table_name}/")
print(f"upload path 2 = s3://{bucket_name}/{target2_name}/{database_name}/{table_name}/")
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
job.commit()
위 Job실행을 위해서는 spark mssql connector jar 파일이 필요한데, 이를 S3에 올려주고,
Dependent Jars path 에 해당 jar 파일의 경로를 적어준다.
이렇게 되면, job을 수행할떄, 자동으로 input arguments에 해당 jar 파일이 추가되어 정상적으로 작동되는것을 확인할수있다.
반응형
'AWS' 카테고리의 다른 글
AWS Glue에서 hdbcli 를 이용해 SAP BW 데이터를 S3에 저장하기 (0) | 2023.01.04 |
---|---|
AWS Glue에서 Spark를 이용해 MSSQL 데이터를 S3에 파티션 구조로 저장하기 (0) | 2023.01.02 |
AWS Glue에서 pymssql 을 이용해 MSSQL 데이터를 S3에 저장하기 (0) | 2022.12.26 |
KOSIS openAPI 를 AWS Glue 에서 실행해보기 (1) | 2022.12.13 |
AWS Glue 를 사용하기 위한 IAM 생성 (0) | 2022.12.13 |