스파크 애플리케이션은 스파크 클러스터와 사용자 코드 두가지 조합으로 구성된다. 애플리케이션 개발시 템플릿을 이용하여 기본적인 틀을 잡을 수 있다. 스파크에서 지원하는 언어에 따라 해당 절에서는 스칼라, 파이썬, 자바로 어플리케이션을 작성하는 방법을 소개하고 있다.
스파크 드라이버 : 스파크 애플리케이션의 실행을 제어하고 스파크 클러스터의 모든 상태 정보를 유지한다. 물리적 컴퓨팅 자원 확보와 익스큐터 실행을 위한 클러스터 매니저와 통신할 수 있어야 한다.
네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다. 컴퓨터들끼리 데이터를 쉽게 주고받거나 주변기기를 함께 공유하고자 하는 목적으로 시작되었다.
저수준 API 유형에는 RDD 인터페이스 외에도 분산형 공유변수가 존재한다. 분산형 공유 변수에는 브로드캐스트 변수와 어큐뮬레이터라는 두 개의 타입이 존재한다. 브로드캐스트 변수 사용시에는 모든 워커 노드에 큰 값을 저장하므로 재전송 없이 ...
표준입출력은 콘솔을 통한 데이터의 입력과 출력을 의미한다. 자바에서는 표준 입출력을 위해 System.in, System.out, System.err을 제공하는데, 이들은 자바 어플리케이션 실행과 동시에 자동 생성되기 때문에 개발자가 별도로...
RDD에는 key-value형태의 데이터를 다룰 수 있는 다양한 메서드가 존재한다. 이러한 메서드들은 <연산명>ByKey 형태의 이름을 가지며 PairRDD타입만 사용할 수 있다.
입출력이란 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다. 자바에서 입출력을 실행하기 위해서 두 대상을 연결하고 데이터를 전송하는 역할로 스트림을 사용한다. 즉 스트림이란 데이터를 운반하는데 사용되는 연결통로이다.
collect()는 스트림의 최종 연산 중 가장 복잡하고 유용한 메서드이다. 스트림의 요소를 수집하여 다양한 결과를 볼 수 있다. 필요한 스트림의 요소를 어떻게 수집할 것인가를 정의한 것이 컬렉터이다.
스파크에는 두 종류의 저수준 API가 있다. 분산 데이터 처리를 위한 RDD와 브로드캐스트 변수와 어큐뮬레이터처럼 분산형 공유 변수를 배포하고 다루기 위한 API가 있다. 저수준 API를 사용하는 상황은 다음과 같다.
반복된 연산이나 중복된 기능의 메서드들에 대한 문제를 해결하기 위해 만든 것이 스트림이다. 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다.
Dataset은 구조적 API의 기본 데이터 타입이다. 앞서 살펴본 DataFrame은 Row타입의 Dataset이다. Dataset은 JVM을 사용하는 언어인 스칼라와 자바에서만 사용할 수 있다. 그렇다면 Dataset을 사용해야하는 이유는 무엇일까?
람다식이란 메서드를 하나의 식으로 표현한 것이다. 함수를 간략하면서도 명확하게 표현할 수 있다. 메서드를 람다식으로 변환하면 이름과 반환값이 없어져 익명 함수라고 부르기도 한다.
멀티쓰레드 프레스스의 경우 여러 쓰레드가 같은 프로세스내의 자원을 공유하여 작업하기 때문에 서로의 작업에 영향을 주게 된다. 서로의 영향으로 인해 의도했던 것과 다른 결과를 얻을 수 있는데, 이러한 일이 발생하는 것을 ...
두 작업을 처리하는 상황에서 싱글쓰레드의 경우 한 작업을 마친 후 다른 작업을 시작하지만, 멀티쓰레드는 2개의 쓰레드가 번갈아 가면서 작업을 수행하기 때문에 동시에 작업이 수행되는 것처럼 보인다.
스파크 SQL은 하이브 메타스토어를 사용하기 때문에 하이브와 잘 연동된다. 스파크 SQL은 하이브 메타스토어에 접속한 뒤 조회할 파일 수를 최소화하기 위해 메타데이터를 참조한다.
자바를 개발한 사람들은 소스코드와 문서를 하나의 파일로 관리하는 것이 바람직하다고 생각했다. 소스코드의 주석에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램을 만들어서 사용했다.
해당 장에서는 스파크의 여섯 가지 핵심 데이터소스를 중점적으로 소개한다. 핵심 데이터소스의 종류는 다음과 같다.CSV,JSON,파케이,ORC,JDBC/ODBC 연결,일반 텍스트 파일, ...
지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 컴파일시에 객체타입을 체크하기 때문에 타입 안정성을 높이고 형변환의 번거로움을 줄일 수 있다.
Arrays.sort()와 같은 정렬 메소드는 컴퓨터가 배열을 정하는 것처럼 보였지만, 실제로는 Comparator와 Comparable 인터페이스 구현에 의해 정의되고 있었던 것이다.
7장에서는 단일 데이터셋에서의 집계 방식만 알아보았다. 하지만 대부분의 경우 다양한 데이터셋을 활용하는 경우가 더 많기에 조인을 활용해 서로 다른 데이터를 조합하여 원하는 형태로 만드는 방법을 알아야 한다.