Data Engineering/AWS, Spark
-
Ubuntu EC2의 메모리 사용량 모니터링하기Data Engineering/AWS, Spark 2023. 8. 23. 19:24
AWS의 모든 인프라는 Cloudwatch로 모니터링한다. 몇일 전부터 사내용 api가 간헐적으로 죽어서 모니터링 지표를 봤는데, 특별히 api가 죽을만한 이유가 없어보였고, 코드 로직 상 데이터가 늘어나면 메모리 부하가 생길 수 있는 구조라 메모리 부하는 아닌가 했는데 cloudwatch가 메모리는 트래킹하지 않고 있었다 (기본적인 지표 아니냐며...). 이유를 대충 찾아보니 baremetal단에 접근해야해서 어쩌구저쩌구 하는데 암튼 안되는 거니 되는 방법을 찾아봤고, cloudwatch agent라는 것을 사용하면 된다고 해서 설치 방법을 적어보려고한다. 괜히 블로그 글 참고했다가 실패하지 말고(내 얘기) 언제나 공식문서를 따르자 1. IAM 만들고 연결 1. IAM > Roles들어가서 create..
-
[Trouble shooting] Glue에서 string index out of range: 0 에러 발생할 경우Data Engineering/AWS, Spark 2023. 8. 7. 18:28
string index out of range:0은 길이가 있는 문자열이 들어와야하는데 빈 문자열이 들어왔을 때 발생하는 에러이다. glue에서 sql쿼리를 실행하는 부분은 string 내에서 각 쿼리를 세미콜론으로 구분한다. 즉 "query A; query B" 이런 식으로 넣으면 세미콜론을 기준으로 쿼리를 끊는 것이다. 따라서 마지막에 세미콜론을 붙이고 아무 쿼리도 작성하지 않는 경우 - "query A;" - 세미콜론 뒤의 문자열 길이가 0이라 위와 같은 에러가 발생한다. 해결하기 위해서는 세미콜론을 지우고 실행하면 된다.
-
Glue에서 mySQL로 write시 encoding option주기 (feat. 한글깨짐) - 2부Data Engineering/AWS, Spark 2023. 5. 15. 22:03
이전에 mySQL로 dynamicFrame을 쓰는데 한글이 깨져서 url로 인코딩 옵션을 주는 방법을 찾았으나 Glue에서 아무리해도 먹지 않았던 포스팅을 쓴 적이 있다. 그래서 spark세션으로 삽입하는 방법으로 작업했고, 포스팅도 그렇게 마무리했는데 (링크) 원인이 너무 궁금해서 re:Post에 질문을 남겨뒀었다. 지나가던 친절한 분이 jdbc driver 버전 문제일 수 있다는 힌트를 주었고, 비록 그분이 달아준 링크는 관련이 없었으나 이를 키워드로 해당 문서를 뒤져보았다. 일단 Glue에서 MySQL jdbc 연결시 default로 사용하는 driver 버전은 8.0.23으로, 굉장히 특이한 위치에 명시되어있다. 찾는데 한참 걸림;; (링크된 문서의 jdbc connectionType 값에 적혀있..
-
RDS MySQL DB 트랜잭션 binary log 보기Data Engineering/AWS, Spark 2023. 5. 11. 18:18
다음 쿼리를 실행하면 서버에 저장되어있는 bin log 파일 목록을 조회할 수 있다. SHOW BINARY LOGS; 해당 로그 파일 중 특정 파일의 로그 내용을 보고 싶다면 다음 쿼리를 사용할 수 있다 (추가 옵션은 공식문서참조) SHOW BINLOG EVENTS IN 'binlog 파일 이름'; 문제는 쿼리로 바이너리 로그를 조회하면 로그 시간이 조회가 안 된다는 것이었다. 나는 시간을 보는 것이 필요했기에 raw log를 받는 방법을 선택했다. Raw log는 mysqlbinlog 유틸리티를 사용해 다운받을 수 있고, mysqlbinlog 유틸리티는 mysql을 설치하면 같이 받아진다. brew install mysql 주의할 점은 바이너리 로그를 AWS 공식문서에 나온 대로 받으면 DB서버 설정..
-
Glue에서 mySQL로 write시 encoding option 주기 (feat. 한글깨짐)Data Engineering/AWS, Spark 2023. 5. 10. 18:06
Glue에서 from_jdbc_conf를 통해 dynamicFrame을 insert시켰는데 DB의 기본 인코딩 세팅때문에 한글이 깨져서 인서트되는 문제가 발생했다 (5.7 이하 버전) pymysql의 connection메소드에는 이를 위해 charset이라는 옵션이 있는데, from_jdbc_conf에는 인코딩 옵션이 없어 찾아보니 인코딩 옵션을 jdbc url의 파라미터로 넘겨줄 수 있었다. 처음에 확인했던 문서에는 인코딩 옵션을 넘겨주는 파라미터 이름이 characterEncoding이라고 되어있어 그렇게 넘겨줬더니 An error occurred while calling o111.pyWriteDynamicFrame. Unsupported character encoding 'utf8?useCursor..
-
Lamda로 서로 다른 vpc에 있는 redshift에서 rds로 reverse ETL하기 (VPC peering)Data Engineering/AWS, Spark 2023. 5. 9. 00:32
AWS에서 작업을 하다보면 항상 가장 힘든게 네트워크 설정인 것 같다. 오늘은 Lamda로 서로 다른 private subnet에 있는 redshift에서 rds로 reverse ETL 파이프라인을 구성했던 방법을 기록해보려한다. 기본적으로 Lambda는 public network에 위치하고, private network로는 접근할 수 없다. 따라서 lamda에서 RDS나 redshift에 접근하기 위해서는 Lamda 함수를 생성한 후, 해당 함수의 configuration에서 접근하고자하는 VPC와 subnet, 그리고 보안그룹을 선택해서 람다가 해당 private network에 위치하도록 해주어야한다. 하지만 이렇게 했을 때 문제점은, Lamda가 특정 private subnet에 들어가기 때문에 ..
-
Comparing AWS messaging service - SNS vs SQS (AWS SNS vs SQS 비교, Slack 메세지 보내기 적합한 파이프라인 선택하기)Data Engineering/AWS, Spark 2023. 1. 18. 15:28
AWS SNS, SQS is the famous services which help to send event messages. Here, I will look through those two services and find which one is best for my pipeline. I'm writing this post for the pipeline that sending a Slack notification from AWS Elastic Beanstalk and S3 through Lambda function. Therefore, please be aware all comparision, listing, describing something in this post will focus on this ..