본문 바로가기

데이터처리/spark

(11)
데이터 소스 스파크의 핵심 데이터 소스가 있다. CSV JSON 파케이 ORC JDBC/ODBC 연결 일반 텍스트 파일 이외에 커뮤니티에서 만든 많은 데이터소스가 있다. 카산드라 HBase 등등 데이터 소스 API의 구조 - 읽기 API 구조 데이터 읽기의 핵심 구조는 다음과 같다. DataFrameReader.format().option().schema().load() format은 선택적으로 사용할수있고 , 기본값은 파케이다 option 메서드를 사용해 데이터를 읽는 방법에 대한 파라미터를 키, 값 으로 설정 할 수 있다. schema 메서드는 스키마를 제공할때 사용 - 쓰기 API 구조 DataFrameWriter.format().option().partitionBy().bucketBy().sortBy().sa..
구조적 API 기본 연산 DataFrame 은 Row 타입의 레코드와 여러 컬럼으로 구성된다. 스키마는 각 컬럼명과 데이터 타입을 정의 한다. DataFrame 의 파티셔닝은 DataFrame 이 클러스터에서 물리적으로 배치 되는 형태를 정의한다. 파티셔닝 스키마는 파티션을 배치하는 방법을 정의함 - 스키마 스키마는 여러개의 StructFiedld 타입 필드로 구성된 StructType 객체다 스키마를 StructType 으로 직접 정의할 수 있는데, 스키마의 데이터 타입과 데이터가 일치하지 않으면 런타임에서 에러를 발생시킨다. 스파크는 자체 데이터 타입을 사용하므로 프로그래밍 언어의 데이터 타입을 스파크의 데이터 타입으로 설정 할 수 없다. - 표현식으로 컬럼 표현 표현식은 DataFrame 레코드의 여러 값에 대한 트랜스포메..
구조적 API 구조적 API는 데이터 흐름을 정의하는 기본 추상화 개념 다양한 유형의 데이터를 처리 할 수 있다. 비정형적인 로그 파일 반 정형적인 CSV 파일 정형적인 파케이 파일 구조적 API 의 종류 Dataset DataFrame SQL 테이블과 뷰 DataFrame 과 Dateset DataFrame 과 Dataset 은 잘 정의된 로우와 컬럼을 가지는 분산 테이블 형태의 컬렉션이다 지연 연산의 실행 계획이며, 불변성을 가진다. DataFrame에 액션을 호출하면 스파크는 트랜스포메이션을 실행하고 결과를 반환한다. DataFrame 은 '비타입형' 이고 Dataset 은 '타입형' 이다. 정확히는 DataFrame 은 타입 일치 여부를 런타임 이 되어서야 확인 할 수 있다. Dataset 은 컴파일 단계에서 ..
[spark definitive guide] 스파크 기능 둘러보기 이전 장에서는 구조적 API 와 관련된 핵심 개념을 봤다 기본 요소인 저수준 API 와 구조적 API 그리고 추가 기능을 제공하는 라이브러리로 구성되어있다. 스파크 라이브러리는 그래프 분석, 머신 러닝, 스트리밍 등 을 지원한다. 이번 장에서는 아직 다루지 않은 API 와 주요 라이브러리 그리고 스파크가 제공하는 다양한 기능을 봐보자 spark-submit Dataset 구조적 스트리밍 RDD 운영용 어플리케이션 실행하기 spark-submit 명령은 어플리케이션 코드를 클러스터에 전송해 실행시키는 역할을 한다. 클러스터에 제출된 어플리케이션은 작업이 종료되거나 에러가 발생할때까지 실행된다. 스파크 어플리케이션은 클러스터 매니저인 스탠드 얼론, YARN, 메소스등을 이용해 실행된다. spark-submi..
[spark definitive guide] - 스파크 간단히 살펴보기 이제 스파크를 사용해보자 DataFrame 과 SQL 을 사용해 클러스터, 스파크 어플리케이션 , 그리고 구조적 API 를 봐보자 스파크의 기본 아키텍처 데이터 처리는 한 대의 컴퓨터로 수행하기 힘들 수 있다. 한 대의 컴퓨터는 대규모의 정보를 연산 할 만한 자원이나 성능을 가지지 못한다. 컴퓨터 클러스터는 여러 컴퓨터의 자원을 모아 하나의 컴퓨터 처럼 사용할 수 있게 만든다. 하지만 이 클러스터를 구성하는 것만으론 부족하고 작업을 조율 할 수 있는 프레임워크가 필요하다. 스파크가 이런 역할을 하는 프레임 워크다. 스파크는 클러스터의 데이터 처리 작업을 관리하고 조율한다. 스파크가 연산헤 사용하는 클러스터는 스파크 스탠드 얼론 클러스터 매니저 , 하둡 YARN , 메소스 같은 클러스터 매니저 에서 관리를..
[Spark definitive guide] - 아파치 스파크란 아파치 스파크란 클러스터 환경에서 데이터를 병렬로 처리하는 라이브러리 집합이다. 병렬 처리 오픈 소스 엔진이다. SQL 뿐만 아니라 스트리밍, 머신 러닝 라이브러리 까지 제공한다. 빅데이터 처리를 쉽게 할 수 있고 엄청난 규모의 클러스터로 확장 할 수 있다. 아파치 스파크의 철학 - 컴퓨팅 엔진 스파크는 데이터를 연산하는 역할만 수행 할 뿐 영구 저장소 역할은 하지 않는다. 대신 하둡, 카산드라, 등의 저장소를 지원하고 메시지 전달 서비스인 카프카를 지원한다. 스파크는 내부에 데이터를 오랜 시간 저장하지 않고 , 데이터 저장 위치에 상관없이 처리에 집중하도록 만들어졌다. 스파크는 연산 기능에 초점을 맞추면서 기존 하둡같은 빅데이터 플랫폼과 차별화를 둔다. 하둡은 hdfs 와 맵리듀스를 가지고 있고 서로 ..
Spark - RDD 생성 방법과 동작 과정 Contents RDD 의 생성 방법 RDD의 동작 과정 Resilient Distributed Datasets (RDDs) Spark 는 병렬로 동작할 수 있는 , 결함이 생겨도 복구가 가능한 컬렉션인 RDD 의 개념을 중심으로 한다. RDD 를 생성하는 방법은 2가지가 있다. 1. driver 프로그램에서 기존 컬렉션을 병렬로 만들기 2. HDFS , HBase 같은 공유 파일 시스템에서 데이터셋을 참조 하기 - Parallelized Collections 1. 기존 컬렉션을 병렬로 만들기 기존 컬렉션을 RDD 로 만드는 방법은 JavaSparkContext의 parallelize 메소드를 이용해 생성한다. 컬렉션의 elements 는 병렬로 동작할 수 있는 분산 dataset 을 형성하기 위해 복사..
[Trouble Shooting] spark- Java 버전 dependency [이미지를 다 날려버렸다...] java 8 버전에 spark-api 를 이용해서 spark-sql 으로 데이터 처리를 하려고 하는 중에 SparkSession 이 json 파일을 불러와서 Dataset 으로 넣어주고, 그 데이터를 show 하는 과정에서 에러가 발생했다. NoSuchFieldException 이 발생했는데 , 도무지 구글링을 해도 원인을 찾을 수가 없었다. 공홈에서도 관련 자료가 없어서 한참을 삽질 하던중에 디펜던시 문제가 아닐까 의심이 들었다. 의심이 들었던 이유는 자바 8에서는 spark-sql_2.11 에 2.1.0 버전에서 호환이 되었는데 그 이상 버전에서는 동작이 정상적으로 안되서 의심이 됐었다 이렇게 spark-sql 에는 commons-compiler 의 의존성을 가지고 있..