1. Apache Nifi

1.1 Nifi 구조

  1. Processor : Nifi에서 작업을 처리하는 기본 단위, 각각의 Processor특정한 작업을 처리한다.
  2. FlowFile : Processor에서 처리된 데이터의 단위
  3. Attribute : FlowFile이 가지고 있는 속성. Processor는 데이터를 처리한 후 자동적으로 속성을 부여하기도 하고 사용자가 속성을 부여할 수도 있다. 부여한 속성 값에 따라 분기를 설정하거나 다음 프로세스(next processor)에서 속성 값을 파라미터로 쓴다.
  4. Relationship : ProcessorProcessor의 관계. Processor의 실행 결과에 따라 Success, Fail 등의 관계가 발생하며, 발생하는 관계의 사용여부를 체크 할 수 있다. 각각의 관계를 다른 Processor에 연결하거나 해당하는 관계를 사용하지 않고 소멸시킬 수 있다. 프로세스 실행 결과 상태?에 따라서 분기를 설정 할 수 있다.
  5. Queue : 두 개의 Processor가 연결되고 처리된 FlowFile이 이동하는 통로. Queue의 이름은 Processor의 실행 결과의 의해 발생하는 관계로 이름을 할당 받는다.

통합 컴퓨팅 엔진이며 클러스터 환경에서 데이터를 병렬로 처리하는 라이브러리 집합

1.2 아파치 스파크의 철학

"빅데이터를 위한 통합 컴퓨팅 엔진과 라이브러리 집합"

1.2.1 통합(Unified)

스파크는 '빅데이터 애플리케이션 개발에 필요한 통합 플랫폼을 제공하자'는 핵심 목표를 가지고 있다. 그렇다면 통합(Unified)이란 의미는 무엇일까? 스파크는 간단한 데이터 수집부터 SQL처리, 머신러닝 그리고 스트림 처리에 이르기까지 다양한 데이터 분석 작업을 동일 연산 엔진일괄성 있는 API로 수행할 수 있다.

일관성 있는 조합형 API를 제공하므로 작은 코드 조각이나 기존 라이브러리를 이용해서 간단하게 애플리케이션을 만들 수 있다. 조합형 API으로 문제를 해결할 수 없다면, 직접 스파크 기반의 라이브러리를 만들 수 도 있다.

1.2.2 컴퓨팅 엔진(Clustering)

스파크는 저장소 시스템의 데이터를 연산하는 역할만 수행할 뿐 영구 저장소 역할은 수행하지 않는다. 그래서 스파크는 다양한 저장소와 컨텍할 수 있는 라이브러리를 제공한다.

스파크는 내부에 데이터를 오랜 시간 저장하지 않으며 특정 저장소 시스템을 선호하지 않는다. 데이터 이동은 높은 비용을 유발하기 때문에 스파크는 데이터 저장 위치에 상관 없이 처리에 집중하도록 만들어 졌다.

1.2.3 라이브러리(Library)

스파크가 세상속에 나타나고 스파크 코어는 초창기와 비교했을 때 많은 변화은 없었다. 하지만 내부적으로 많은 라이브러리들이 생겼나고, 또한 외부에서 서드파티프로젝트를 통해서 많은 라이브러리들 탄생했다. 그 예로 스파크SQL, 머신러닝 프로세스를 지원하는 MiLab 등 많은 라이브러리들이 존재한다.

2. Spark 간단히 살펴보기

2.1 스파크의 기본 아키텍처

클러스터에서 작업(Jon)을 조율 해주는 역할을 하는 프레임 워크. 스파크는 클러스터의 데이터 처리 작업을 관리하고 조율한다. 스파크가 연산에 사용하는 클러스터는 스파크 스탠드얼론, 하둡의 YARN, 메소스(Mecos) 같은 클러스트 매니져에서 관리한다. 사용자는 클러스트 매니져에게 스파크 애플리케이션을 제출(submit)한다. 이를 제출받은 클러스터 매니져는 애플케이션 실행에 필요한 자원을 할당하며 우리는 할당받은 자원으로 작업을 처리한다.

2.2 Spark Application

스파크 애플리케이션은 드라이버(Driver) 프로세스와 다수의 익스큐터(Executoer) 프로세스로 구성을 이룬다.

드라이버 프로세스는 클러스터 노드 중 하나에서 실행되며 main()함수를 호출하며, 애플리케이션에 대한 정보의 유지 관리, 사용자 프로그램이나 입력에 대한 응답, 전반적인 익스큐터 프로세스의 작업관 관련된 분석, 배포 그리고 스케줄링 역할을 수행한다.