profile
개발자 지망생입니다.
태그 목록
전체보기 (47)대학생(47)TIL(47)방학(47)개발자(46)공부(46)Java의 정석(31)Java(31)Spring(31)spark(16)Data Engineer(13)dataframe(5)데이터 엔지니어(5)Spark 완벽 가이드(5)스파크 완벽 가이드(3)dataset(3)rdd(2)자료구조(2)스파크 애플리케이션(2)스트림(2)Spark완벽가이드(2)저수준 API(2)익명 클래스(1)Chracter(1)클러스터(1)schema(1)ArrayList(1)네트워킹(1)Thread(1)stack(1)queue(1)그룹화(1)Spark완벽 가이드(1)함수형 인터페이스(1)Calendar클래스(1)Spark API(1)구조적 API(1)TreeMap(1)boolean(1)통합(1)경쟁 상태(1)브로드캐스트 변수(1)iterator(1)직렬화(1)(1)중간 연산(1)url(1)datatype(1)파케이(1)다형성(1)JOIN(1)복합 데이터 타입(1)지연 연산(1)annotation(1)어큐뮬레이터(1)linkedlist(1)partition(1)ip(1)tcp(1)스키마(1)IO(1)java.lang(1)지네릭스(1)String클래스(1)람다식(1)UDP(1)comparator(1)json(1)Spark 완벽가이드(1)collection framework(1)소켓(1)조인(1)인터페이스(1)추상클래스(1)최종 연산(1)odbc(1)데이터베이스(1)입출력(1)synchronized(1)테이블(1)예외처리(1)쓰레드 동기화(1)쓰레드 우선순위(1)집계 연산(1)MLlib(1)try-with-resources(1)Spark Application(1)HashSet(1)로우(1)HashMap(1)표준입출력(1)멀티쓰레드(1)ORC(1)쓰레드 그룹(1)udf(1)컬럼(1)구조적 스트리밍(1)컴퓨팅 엔진(1)날짜와 시간(1)Spark R(1)형식화클래스(1)collector(1)병렬 처리(1)언박싱(1)싱글쓰레드(1)try catch(1)기아 현상(1)Math클래스(1)제어자(1)오토박싱(1)Object클래스(1)csv(1)JDBC(1)스파크 SQL(1)NUMERIC(1)row(1)java.time(1)내부 클래스(1)TreeSet(1)열거형(1)collect(1)분산형 공유변수(1)데이터 소스(1)서브쿼리(1)Spark-submit(1)보조 스트림(1)

[스터디] 스파크 완벽 가이드 16일차

Chapter 16 스파크 애플리케이션 개발하기 스파크 애플리케이션은 스파크 클러스터와 사용자 코드 두가지 조합으로 구성된다. 애플리케이션 개발시 템플릿을 이용하여 기본적인 틀을 잡을 수 있다. 스파크에서 지원하는 언어에 따라 해당 절에서는 스칼라, 파이썬, 자바로 어플리케이션을 작성하는 방법을 소개하고 있다. 스파크 애플리케이션 테스트 애플리케이션을 테스트를 작성할 때는 몇가지 원칙을 고려해야 한다. 전략적 원칙 > 입력 데이터에 대한 유연성 : 데이터 파이프라인은 다양한 유형의 입력 데이터에 유연하게 대처할 수 있어야 한다. 혹은 오류 상황을 적절하고 유연하게 제어할 수 있어야 한다. 비지니스 로직 변경에 대한 유연성 : 내부 비지니스 로직의 변경이 발생할 수 있는데, 비지니스 로직을 꼼꼼히 점건해 의도한 대로 동작하는지 확인해야 한다. 이때 스파크 단위 테스트를 작성하지 않도록 주의해야 한다. 결과의 유연성 원자성 : 테스트를

2022년 2월 7일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 15일차

Chapter 15 클러스터에서 스파크 실행하기 스파크 애플리케이션의 아키텍쳐 > 스파크 드라이버 : 스파크 애플리케이션의 실행을 제어하고 스파크 클러스터의 모든 상태 정보를 유지한다. 물리적 컴퓨팅 자원 확보와 익스큐터 실행을 위한 클러스터 매니저와 통신할 수 있어야 한다. 스파크 익스큐터 : 드라이버가 할당한 태스크를 받아 실행하기 태스크의 상태와 결과를 드라이버에 보고한다. 클러스터 매니저 : 스파크 애플리케이션을 실행할 클러스터 머신을 유지한다. (ex. 스탠드얼론 클러스터 매니저, 아파치 메소스, 하둡 YARN) 실행모드 - 클러스터 모드/클라이언트 모드/로컬 모드 클러스터 모드 클러스터 모드를 사용하기 위해서 JAR파일이나 파이썬/R 스크립트를 클러스터 매니저에 전달해야 한다. 클러스터 매니저는 파일을 받은 다음 워커 노드에 드라이버와 익스큐터에 전달해야 한다. 클라이언트 모드 애플리케이션을 제출한 클라이언트 머신에 스파크 드라

2022년 2월 4일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 14일차

Chapter 14 분산형 공유 변수 저수준 API 유형에는 RDD 인터페이스 외에도 분산형 공유변수가 존재한다. 분산형 공유 변수에는 브로드캐스트 변수와 어큐뮬레이터라는 두 개의 타입이 존재한다. 브로드캐스트 변수 사용시에는 모든 워커 노드에 큰 값을 저장하므로 재전송 없이 스파크 액션을 재사용 할 수 있고, 어큐뮬레이터 사용시 모든 태스크의 데이터를 공유 결과에 추가할 수 있다. 브로드캐스트 변수 브로드캐스트 변수는 불변성 값을 클로저 함수의 변수로 캡슐화하지 않고 클러스터에서 효율적으로 공유하는 방법을 제공한다. 일반적으로 태스크에서 드라이버 노드의 변수 사용시 클로저 함수 내부에서 단순하게 참조하는 방법을 사용하는데 이는 비효율적이다. 그 이유는 클로저 함수에서 변수 사용시 워커 노드에서 여러 번 역직렬화가 일어나기 때문이다. 따라서 이런 상황에서는 브로드캐스트 변수를 활용해, 모든 태스크마다 역직렬화하지 않고 클러스터 모든 머신에 캐시해야 한다. 어큐뮬

2022년 2월 3일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 13일차

Chapter 13 RDD 고급개념 Key-Value 형태의 RDD RDD에는 key-value형태의 데이터를 다룰 수 있는 다양한 메서드가 존재한다. 이러한 메서드들은 ByKey 형태의 이름을 가지며 PairRDD타입만 사용할 수 있다. PairRDD타입을 만드는 가장 간단한 방법은 RDD에 Map연산을 수행해 key-value구조로 만드는 것이다. > keyBy() : 현재 값으로부터 키를 생성 mapValues() : (튜플 사용시)튜플의 첫 번째 요소를 key, 두 번째 요소를 value로 지정 collect() : key나 value 전체 추출 lookup() : 특정 key에 대한 결과 찾기 sampleByKey() : RDD를 한번만 처리하면서 무작위 샘플링을 사용하여 RDD 샘플 생성 집계 > countByKey() : 각 key의 아이템 수를 구하고 로컬 맵으로 결과를 수집 groupByKey() : 해당 키와 관련된 모든 값을 메모리

2022년 2월 2일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 12일차

Chapter 12 RDD 저수준 API란? 스파크에는 두 종류의 저수준 API가 있다. 분산 데이터 처리를 위한 RDD와 브로드캐스트 변수와 어큐뮬레이터처럼 분산형 공유 변수를 배포하고 다루기 위한 API가 있다. 저수준 API를 사용하는 상황은 다음과 같다. > 고수준 API에서 제공하지 않는 기능이 필요한 경우 RDD를 사용해 기존의 개발된 코드를 유지해야하는 경우 사용자가 정의한 공유 변수를 다뤄야 하는 경우 저수준 API는 SparkContext를 활용하여 진입한다. RDD란? 간단하게 RDD를 정의하면 불변성을 가지며 병렬로 처리할 수 있는 파티셔닝된 레코드의 모음이다. 물리적으로 분산된 데이터에 세부적인 제어가 필요한 경우 RDD를 사용하는 것이 가장 적합하다. DataFrame은 구조화된 로우인 반면, RDD는 프로그래머가 선택하는 자바, 스칼라, 파이썬의 객체이다. 특정 언어의 개체인 만큼 완벽하게 제어할 수 있고, 사용자가 원하

2022년 1월 31일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 11일차

Chapter 11 Dataset Dataset이란? Dataset은 구조적 API의 기본 데이터 타입이다. 앞서 살펴본 DataFrame은 Row타입의 Dataset이다. Dataset은 JVM을 사용하는 언어인 스칼라와 자바에서만 사용할 수 있다. 그렇다면 Dataset을 사용해야하는 이유는 무엇일까? 거기에는 크게 두가지 이유가 있다. > DataFrame 기능만으로는 수행할 연산을 표현할 수 없는 경우 성능 저하를 감수하더라도 타입 안정성을 가진 데이터 타입을 사용하고 싶은 경우 복잡한 비지니스 로직을 설계해야하여 SQL이나 DataFrame 대신 단일 함수로 인코딩 해야하는 경우에는 Dataset을 이용하는 것이 더 효과적이다. 또한 데이터 타입이 유효하지 않은 연산은 런타입이 아닌 컴파일 에러가 발생하기도 하므로 Dataset을 사용하여 방어적으로 코드를 작성하는 것이 바람직 할 때도 있다. Dataset의 생성 Dataset은 어

2022년 1월 28일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 10일차

Chapter10 스파크 SQL 스파크 SQL 스파크 SQL은 하이브 메타스토어를 사용하기 때문에 하이브와 잘 연동된다. 스파크 SQL은 하이브 메타스토어에 접속한 뒤 조회할 파일 수를 최소화하기 위해 메타데이터를 참조한다. 하이브 메타스토어에 접속하기 위해서 spark.sql.hive.metastore.version을 설정하고, HiveMetastoreClient가 초기화되는 방식을 변경하기 위해 spark.sql.hive.meatstore.jars를 설정해야 한다. 또한 하이브 메타스토어가 저장된 다른 데이터베이스에 접속하려면 적합한 클래스 접두사를 정의하고, 스파크와 하이브가 접두사를 공유하도록 spark.sql.hive.metastore.sharedPrefixes 속성을 설정한다. 스파크 SQL 쿼리를 실행할 수 있는 몇가지 인터페이스가 있다. > 스파크 SQL CLI 스파크의 프로그래밍 SQL 인터페이스(spark.sql) 스파크 SQL 쓰리프트

2022년 1월 25일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 9일차

Chapter 9 데이터 소스 해당 장에서는 스파크의 여섯 가지 핵심 데이터소스를 중점적으로 소개한다. 핵심 데이터소스의 종류는 다음과 같다. > CSV JSON 파케이 ORC JDBC/ODBC 연결 일반 텍스트 파일 데이터소스 API의 구조 스파크의 데이터소스 읽기API의 핵심 구조는 다음과 같다. > DataFrameReader.format(...).option("key","value").schema(...).load( ) 기본적으로 DataFrameReader를 사용하며 format,option, schema를 조절하여 옵션을 조절할 수 있다. 외부 데이터를 읽다보면 형식에 맞지 않는 데이터를 사용하기도 하는데, 이 경우 읽기모드를 조절하여 형식이 맞지 않는 데이터를 어떻게 처리할지 결정하게 된다. 스파크의 데이터소스 쓰기API의 핵심 구조는 다음과 같다. > DataFrameReader.format(...).option

2022년 1월 24일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 8일차

Chapter 8 조인 조인(join)이란? 7장에서는 단일 데이터셋에서의 집계 방식만 알아보았다. 하지만 대부분의 경우 다양한 데이터셋을 활용하는 경우가 더 많기에 조인을 활용해 서로 다른 데이터를 조합하여 원하는 형태로 만드는 방법을 알아야 한다. 스파크에서 사용가능한 조인 타입(결과 데이터셋에 어떤 데이터가 존재하는지 결정하는 요소)은 다음과 같다. > 내부 조인(inner join) : 왼쪽과 오른쪽 데이터셋에 키가 있는 로우를 유지 외부 조인(outer join) : 왼쪽이나 오른쪽 데이터셋에 키가 있는 로우를 유지 왼쪽 외부 조인(left outer join) : 왼쪽 데이터셋에 키가 있는 로우를 유지 오른쪽 외부 조인(right outer join) : 오른쪽 데이터셋에 키가 있는 로우를 유지 왼쪽 세미 조인(left semi join) : 왼쪽 데이터셋의 키가 오른쪽 데이터셋에 있는 경우, 키가 일치하는 왼쪽 데이터셋만 유지

2022년 1월 19일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 7일차

Chapter 7 집계 연산 집계를 수행하려면 key나 group을 지정하고 하나 이상의 column을 변환하는 방법을 지정하는 집계 함수를 사용해야 한다. 이는 gorup by, window, grouping set, rollup, cube 등의 방법을 사용하여 구현할 수 있다. 집계 함수에 따라 그룹화된 결과는 RelationalGroupedDataset을 반환한다. 집계 함수 - DataFrame > count 액션이 아닌 트랜스포메이션의 역할을 수행하며, 특정 컬럼을 지정하거나 count(*)을 사용하여 로우 수를 계산할 수 있다. > countDistinct 중복되지 않는 고유 레코드 수를 구해야 할때 사용. 개별 컬럼을 처리하는데 유용하다. > approxcountdistinct 정확한 수치가 아닌 어느 정도 수준 이상의 정확도를 가지를 근사치를 구할 때 사용. 대규모 데이터셋을 사용하여 연산할 때 유용하다.

2022년 1월 14일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 6일차

Chapter6 다양한 데이터 타입 다루기 스파크 데이터 타입으로 변환하기 스파크에서 데이터를 사용하기 위해 프로그래밍 언어의 고유 데이터 타입을 스파크 데이터 타입으로 변환히키기 위해서는 lit함수를 사용한다. lit함수는 다른 언어의 데이터 타입을 스파크 데이터 타입에 매핑시켜 변환한다. Boolean 데이터 타입 다루기 Boolean 구분의 종류로는 and, or, true, false 등이 있으며, Boolean 구문을 사용해 true 또는 false로 평가되는 논리문법을 만든다. and구문을 사용할 때 주의할 점은 내부적으로 필터 사이에 and구문을 추가해 모든 필터를 하나의 문장으로 변환하여 처리한다는 점을 기억해야 한다. or구문은 동일한 구문 사이의 양자택일을 하므로 동일한 구문에 조건의 정의해야 한다. 수치형 데이터 타입 다루기 수치형 데이터 타입은 연산 방식을 잘 정의하여 원하는 형태로 출력값을 나오도록 하는 것이 중요하다. 통

2022년 1월 13일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 5일차

Chapter5 구조적 API 기본 연산 DataFrame은 Row타입의 레코드와 각 레코드에 수행할 연산 표현식을 나타내는 여러 컬럼으로 구성된다. DataFrame의 스키마는 각 컬럼명과 데이터 타입을 정의하고, 파티셔닝은 DataFrame이나 Datset이 클러스터에서 물리적으로 배치되는 형태를 정의한다. 파티셔닝 스키마는 파티션을 배치하는 방법을 정의하며 파티셔닝의 분할 기준은 특정 컬럼이나 비결정론적 값을 기반으로 설정한다. 스키마(Schema) 스키마는 여러가의 StructField타입 필드로 구성된 StructType 객체이다. StructField는 이름, 데이터 타입, null값의 허용 여부를 지정할 수 있습니다. 컬럼과 표현식 스파크의 컬럼은 스프레드시트, R의 DataFrame, Pandas의 DataFrame 컬럼과 유사하다. 사용자는 표현식을 사용해 컬럼을 선택, 조작, 제거할 수 있다. 가장 간단하게 col,column함수를 사용해 컬

2022년 1월 12일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 4일차

Chapter4 구조적 API 구조적 API에는 3가지 분산 컬렉션이 존재한다. > DataSet DataFrame SQL 테이블과 뷰 배치와 스트리밍처리에서 구조적 API를 사용할 수 있으며, 구조적 API를 활용해 배치 작업을 스트리밍 작업으로 변환할 수 있다. DataFrame과 Dataset DataFrame과 Dataset의 정의는 잘 정의된 로우와 컬럼을 가지고 있는 분산 테이블 형태의 컬렉션이다. 결과를 생성하기 위해 어떤 데이터에 어떤 연산을 적용해야 하는지 정의하는 지연 연산의 실행계획이며, 불변성을 가진다. 스키마(Schema) 스키마는 DataFrame의 컬럼명과 데이터 타입을 정의한 것을 말한다. 데이터 소스에서 얻거나 직접 정의할 수 있으며, 여러 데이터 타입으로 구성되므로 어떤 데이터 타입이 어느 위치에 존재하는지 정의하는 방법이 필요하다. 스파크 구조적 데이터 타입 개요 스파크는 실행 계획 수립과 처리에 사용하는

2022년 1월 11일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 3일차

Chapter3 스파크 기능 둘러보기 본 챕터에서는 2장에서 다루지 않은 API와 스파크가 제공하는 여러 라이브러리, 기능을 소개한다. Spark-submit 명령어 Spark-submit을 활용하면 대화형 shell에서 개발한 프로그램을 운영용 어플리케이션으로 전환할 수 있다. Spark-submit명령은 어플리케이션 코드를 클러스터에 전송해 실행시키는 역할을 수행한다. 전송된 어플리케이션은 종료되거나 에러가 발생할 때까지 실행된다. Spark-submit 실행시 옵션 지정을 통해 필요한 자원과 실행 방식을 지정할 수도 있다. Dataset - 타입 안정성을 제공하는 구조적 API Dataset은 정적 타입 코드(자바, 스칼르, C, C++등)를 지원하기 위해 고안된 구조적 API이다. 동적 타입 언어인 파이썬과 R에서는 사용이 불가능하다. Dataset API는 DataFrame의 레코드를 클래스에 할당하여 고정 타입형 컬렉션(자바 : ArrayLi

2022년 1월 10일
·
0개의 댓글
·

[스터디] 스파크 완벽 가이드 2일차

Chapter 2 스파크 간단히 살펴보기 스파크의 기본 아키텍쳐 데이터를 처리하는 경우에는 단일 컴퓨터로 처리하기에 어려움이 있다. 그러기에 여러 컴퓨터의 자원을 모아서 하나의 컴퓨터처럼 작동하도록 하는 컴퓨터 클러스터를 구성한다. 이것만으로도 충분하지 않아 작업을 조율할 프레임워크가 필요한데 스파크가 이러한 역할을 수행한다. 스파크 내부의 클러스터 매니저는 애플리케이션 수행에 필요한 자원을 할당하여 작업을 처리한다. 스파크 애플리케이션 스파크 애플리케이션은 드라이버 프로세스와 익스큐터로 구성되어 있다. 드라이버 프로세스는 정보의 유지관리, 입력에 대한 응답, 작업의 분석, 배포, 스케줄링을 수행한다. 익스큐터는 드라이버프로세스로부터 작업을 할당받아 코드를 실행하고 실행 결과를 드라이버 노드에 보고하는 역할을 수행한다. 각 작업에 필요한 자원은 클래스터 매니저로부터 할당을 받는다. 스파크의 다양한 언어 API 스파크는 5가지 언어에 대해 작동한다.

2022년 1월 7일
·
1개의 댓글
·

[스터디] 스파크 완벽 가이드 1일차

이 글은 "OREILLY의 스파크 완벽 가이드" 책을 공부하며 정리를 위해 남기는 글이다. 이 글은 전문적인 글이 아니다. 데이터 엔지니어를 목표로하며 나아가는 발자취를 남기는 것이며 내가 이해한 것을 풀어서 설명하고 어디까지 이해해야 이해했다고 말할 수 있는 것인지에 대한 지표로 삼기위해 해당 글을 남긴다. Chapter 1 아파치 스파크란 책의 정의에 따르면 '아파치 스파크는 통합 컴퓨팅 엔진이며 클러스터 환경에서 데이터를 병렬로 처리하는 라이브러리 집합'이다. 이 문장을 통합 컴퓨팅 엔진, 클러스터 환경, 데이터의 병렬 처리라는 핵심 단어로 나눌 수 있는데 하나하나의 의미가 무엇인지 알아보자. 통합 먼저 '통합'이라는 단어는 무엇을 의미할까? 스파크는 빅데이터 애플리케이션 개발에 필요한 통합 플랫폼을 제공하는 것을 핵심 가치로 삼고 있다. 그렇기에 통합이라는 단어는 애플리케이션 개발이 필요한 모든 기능을 제공한다는 뜻일 것이다. 스파크 등장 이전에는 통합 엔진을

2022년 1월 6일
·
1개의 댓글
·