본문 바로가기
728x90

BigData/Spark & Spark Tuning44

[Spark] Spark Streaming 개념, DStream API, Structured Streaming Stream 처리란스트림 처리는 신규 데이터를 끊임없이 처리해 결과를 만들어내는 행위입력 데이터는 무한하며 시작과 끝을 사전에 정의하지 않음스트림 처리 시스템에 도착한 일련의 이벤트(신용카드 전표 정보, 웹사이트 클릭(행동 로그), IoT 장비 센서 데이터)1) 스트림 처리 사례통보와 알림notification과 alerting은 가장 흔한 스트림 처리 사례연속적인 이벤트에서 특정 이벤트나 이벤트의 패턴을 탐지했을 때 발생실시간 리포트기업에서 직원을 위한 실시간 대시보드를 만들 때에 사용플랫폼 전체 사용량, 시스템 부하, 실행 시간, 신규 기능의 사용량증분형 ETL웨어하우스에서 정보를 얻는 시간을 줄이기 위해 사용신규 데이터(증분 데이터)에 대해서 바로바로 반영할 수 있음데이터 중복 저장이나 유실 방지를.. 2024. 12. 30.
[Spark] issue 정리, java.lang.ExceptionInInitializerError 와 java.lang.IllegalStateException: SparkSession should only be created and accessed on the driver scala언어로 spark object를 만들고 jar로 빌드하여 EMR에 제출할 때 나온 에러를 정리하겠습니다.spark관련 정리는 오랜만이네요.1. 원인 파악분명 다른 object와 다른점 없고, jar파일 위치 이름, class 이름까지도 경로에 명시를 잘해 줬는데도 위 제목과 같은 에러가나와서 계속 헤메고 있던 때에 리서칭을 통해서 원인을 파악할 수 있었습니다.scala object에서 다음과 같은 에러가 나온 경우, 주로 Apache Spark에서 SparkSession이 드라이버 노드가 아닌 워커 노드에서 생성되거나 접근될 때 발생된다고 합니다.→ 이는 SparkSession이 조정 목적으로 드라이버에서 관리되어야 하는 싱글톤 객체이기 때문  java.lang.ExceptionInInitial.. 2024. 6. 22.
[Spark Tuning] Spark Memory 와 JVM spark memory를 정리하기 전에 JVM을 알아야 합니다.왜냐하면 spark는 Java 가상머신(JVM) 기반으로 동작하기 때문이고, 다른 언어(Python,R)로 작성한 spark code도 결국에는 Executor의 JVM에서 실행할 수 있는 Code로 알아서 변환하여 실행되기 때문입니다. JVM(Java Virtual Machine)자바를 실행하기 위한 가상 기계(컴퓨터)* Java compiler는 JDK를 설치하면 bin 에 존재하는 javac.exe1. runtime Data AreaRuntime Data Area는 JVM이 프로그램을 수행하기 위해 OS로부터 별도로 할당받은 메모리 공간을 말한다. Runtime Data Area는 크게 5가지 영역으로 나눌 수 있습니다.1) PC Reg.. 2023. 10. 17.
[Spark] cache() vs persist() 차이점 정리 (feat. storage level) cache() test_df.cache() # test_df를 캐싱 test_df.storageLevel # org.apache.spark.storage.StorageLevel = StorageLevel(disk, memory, deserialized, 1 replicas) persist() import org.apache.spark.storage.StorageLevel # storage 명시를 위한 library import test2_df.persist(StorageLevel.MEMORY_AND_DISK) # test2_df에 persist를 하면서 storage lvl을 명시 test2_df.storageLevel # org.apache.spark.storage.StorageLevel = Stora.. 2023. 9. 19.
[Spark] Spark Cluster mode vs Client mode (feat. 왜 EMR Serverless는 Client mode일까?) EMR Serverless가 client mode로 설정되어 있는 것을 보면서 왜 client 모드 일까? cluster모드는 안되는 걸까? 라는 의문점을 가졌었고, 막상 두 개의 차이점을 설명하려 해봐도 명확히는 설명을 할 수 없어서 이번 기회에 비교하여 정해보겠습니다. Spark Driver 비교해보기에 앞서 driver 개념이 두 개를 비교할 때 필요 하므로, Spark Driver부터 간단하게 짚고 넘어가겠습니다. 프로그램의 main()메소드가 실행되는 프로세스 Spark Context, Spark Session을 생성하고 RDD를 만들고 Transformation, action 등을 실행하는 사용자 코드를 실행 DF, DS, UDF를 생성하고 애플리케이션 정보 유지 관리를 담당 Cluster M.. 2023. 8. 30.
[Spark] EMR Serverless + Airflow로 spark job 제출해보기 (EmrServerlessStartJobOperator, boto3 + PythonOperator) 이번 포스트는 EMR Serverless로 전환하면서 생긴 꿀팁들과 Airflow로 EMR Serverless에 Spark job을 제출하는 것을 포스팅하려고 합니다. 이번 포스트의 목차 EMR Serverless란? EMR Serverless로 전환 이유 EMR Serverless로 전환 대상 EMR Serverless 생성 방법 EMR에 Airflow로 Spark job 제출하는 방법(EmrServerlessStartJobOperator) EMR에 Airflow로 Spark job 제출하는 방법(boto3 + PythonOperator) 전환 시 얻은 효과(성능, 비용) EMR Serverless란? EMR(Elastic Map Reduce) 서비스를 인프라 관리할 필요 없이 Serverless로서 .. 2023. 8. 27.
[Spark Tuning] Spark 3.x 버전 특징 정리 이번 포스트에는 spark 2.x 와 spark3.x의 특징을 비교해보고 spark 3.x 버전의 주요 특징과 성능에 대해서 포스트해보겠습니다. spark 3.x버전의 특징을 통해 눈에 띄게 성능의 향상을 본 workload가 아직은 없기 때문에, 관련한 포스트는 추후에 올리도록 하겠습니다. Spark 2.x vs Spark 3.x spark 2.x spark 3.x Language support python 2.x,3.x, scala 2.12까지, java8+ python 3.6+, scala 2.12+, Java 8 prior to version 8u92 support is deprecated Catalyst Optimizer Rule + Cost based optimizer • Table stati.. 2023. 8. 10.
[Spark] spark dataframe -> RDB로 적재하기 오랜만에 글을 씁니다. 이직하고 나서 적응하느라 글쓸 기회가 없었는데, 그동안 어떤 공부를 해야될지 그리고 어떤 글부터 쓸지 순서를 정하느라 뜸했었습니다. 우선은 일을하면서 생긴 이슈와 겪은 업무들 위주로 정리하려고 합니다. 1. 배경 API 서빙을 위해 parquet파일을 RDB로 적재시켜야 했고, 실시간 API서빙이 가능했어야 하는 상황이였습니다. 따라서 spark을 이용하여 truncate없이 RDB로 적재시켜야 했습니다. 1) test db, table 생성 create table if not exists sparktordb.rdbtable( id int(10),rdbtable name varchar(30), create_dt timestamp, update_dt timestamp, PRIMARY.. 2023. 7. 10.
[Spark] Scala Spark 앱 만들기 (feat. Intellij) 이직을 하게 되면서 python이 아닌, scala 언어로 Spark을 돌리고 있었습니다. 언젠가는 scala를 배워봐야지 생각만 했었는데, 생각보다 기회가 앞당겨진 것 같아, 요즘 열심히 scala 언어를 공부하고 있는 중입니다. 그래서 이번 포스트에는 scala언어로 spark앱을 만들고, jar파일로 만들어 보겠습니다. 1. 프로젝트 생성 스칼라 새 프로젝트 생성 build 시스템은 sbt로 지정 settings에서 scala plugins생성 . ├── build.sbt # MergeStrategy.discard case x if x.endsWith("modlue-info.class") => MergeStrategy.discard case x => val oldStrategy = (assembly.. 2023. 6. 17.
728x90