-
[스파크(Spark)] #3. 구조적 API 개요 및 기본 연산Spark 2019. 5. 16. 19:02
이번에는 구조적 API의 개요 및 기본 연산에 대해서 알아본다. DataFrame와 Dataset은 둘 다 Row와 Column을 가지는 불변성을 가지는 분산 테이블 형태의 컬렉션이다. Dataset은 JVM 기반이므로 java와 scala를 지원하지만 Python은 지원하지 않는다. python 코드로 검증을 할 예정이므로 DataFrame 기준으로 설명한다. 참고 Spark API 관련 자세한 부분은 Spark Docs를 참고하자. DataFrame을 가공 관련 부분은 pyspark.sql 모듈을 사용한다. Python Docs SparkSession Spark의 모든 기능에 대한 진입점은 SparkSession클래스를 사용해야 한다. from pyspark.sql import SparkSession..
-
[스파크(Spark)] #2. 용어 및 개념Spark 2019. 5. 2. 18:47
스파크가 무엇인지에 대한 개요에 대해서 알아보았다. 이번에는 핵심 용어 및 개념에 대해서 알아본다. 스파크 애플리케이션 아키텍처 사용자는 클러스터 매니저에게 스파크 애플리케이션을 제출한다. 클러스터 매니저는 제출받은 애플리케이션 실행에 필요한 자원을 할당하고, 스파크 애플리케이션은 할당받은 자원으로 작업을 처리한다. 스파크 애플리케이션은 드라이버 프로세스와 다수의 익스큐터 프로세스로 구성된다. 드라이버 프로세스는 클러스터 노드 중 하나에에서만 실행한다. 즉 main() 함수를 실행한다. 익스큐더는 다수의 도드에서 실행하며, 드라이버가 할당한 작업을 수행한다. 사용자는 각 노드에 할당할 익스큐터 수를 지정할 수 있다. 클러스터 매니저는 스파크가 연산에 사용할 4개의 클러스터 종류를 지원한다. 드라이버(dr..
-
[스파크(Spark)] #1. 개요Spark 2019. 3. 19. 12:59
빅데이터 처리 분야에서 아파치 스파크(Spark)가 빠르게 확장되고 거의 표준이 되어가고 있다. 앞으로 대용량 데이터의 가공이나 실시간 처리 및 분석에 필요하다고 판단되어 알아보게 되었다. 스파크 관련 책 및 공식 문서를 보고 진행하기로 한다. 등장배경이전에 CPU 등 하드웨어 성능은 해를 거듭할수록 수치적으로나 체감으로도 눈에 띄게 발전하였다. 보통 2년마다 데스크탑을 조립해서 바꿨을 정도였다. 하지만 2005년쯤부터는 물리적인 한계로 인하여 성능향상은 점점 둔화하게 된다. 이때부터 하드웨어 엔지니어들은 모든 코어가 같은 속도로 동작하는 병렬 CPU 코어를 추가하는 방향으로 선회하였다. 반면 데이터를 저장하는 비용은 1년마다 약 절반씩 줄고 있고, 웹캠이나 센서 등등 데이터 수집하는 장비 비용도 점점 ..
-
[카프카(Kafka)] 주키퍼의 역활 정리Kafka 2019. 3. 11. 11:53
주키퍼는 카프카 클러스터를 관리하고 조정하는 코디네이터 역활을 한다.(카프카 클러스터는 카프카 브로커, 프로듀서 컨슈머 포함한다. ) 새로운 브로커 추가나 기존 브로커 감시하고 브로커 목록이 추가나 삭제에 의해서 변화될 경우,주키퍼는 이런 상태를 프로듀서나 컨슈머에게 통보하여 활성화된 브로커과 동작을 원활하게 한다. (리벨런싱)또한 특정 토픽의 파티션에 대해서 리더와 팔로워를 기록하고, 프로듀서나 컨슈머에게 정보를 제공한다. 카프카는 주키퍼 없이 동작하지 못한다. 주키퍼의 역활에 대해서 좀더 알아보자. 주키퍼 역활컨트롤러 선정컨트롤러는 파티션 관리를 책임지는 브로커 중 하나이다. 파티션 관리는 리더 선정, 토픽 생성, 파티션 생성, 복제본 관리 등을 포함한다. 하나의 브로커가 장애가 발생하면 카프카 컨트..
-
[카프카(Kafka)] 성능 관련 고찰Kafka 2019. 3. 11. 10:16
사내 시스템의 임시버퍼 용도로 Redis를 도입하여 성능 테스트를 진행하던 중, 버퍼 용량 이슈로 인하여 Redis와 Kafka를 비교하게 되었다. 우선 결론적으로는 Redis(List)와 Kafka 사용 시 성능 차이는 거의 없었고, Kafka가 보관 용량에 대해선 유리하였다. 이번 주제에서는 Kafka 성능에 대한 정리이므로 Redis & Kafka 비교는 나중에 진행하기로 한다. 궁금증Kafka는 대용량 메시지 처리 성능이 좋다고 조금만 리서치 해보면 알 수 있다. 그러면.... 처리량이 얼마나 될까? HDD와 SSD는 차이가 발생할까? Producer와 Consumer 수에 따라서 성능 차이가 날까? 여러 Consumer Group이 같은 토픽을 조회해도 성능 차이가 없다고 하던데 과연 그럴까?이..
-
[카프카(Kafka) 어플리케이션 제작 ] #2. 컨슈머Kafka 2019. 3. 7. 17:50
카프카(Kafka)의 이해카프카(Kafka) 설치 및 클러스터 구성[카프카(Kafka) 어플리케이션 제작 ] #1. 프로듀서 이전 글에서는 프로듀서 내부 동작 확인 및 어플리케이션을 제작하였다. 이번에는 컨슈머 어플리케이션을 제작해본다. 컨슈머 카프카 컨슈머 내부 동작 및 컨슈머 어플리케이션에서 메시지 소비하는 과정을 알아보자. 컨슈머 내부 동작컨슈머의 전체적인 내부 동작을 이해하면 컨슈머 어플리케이션을 디버깅할 때 도움이 많이 되며, 올바른 결정을 하도록 도와준다. 카프카 컨슈머의 역활 토픽 구독컨슈머 동작의 시작은 토픽의 구독임 오프셋 위치카프카는 다른 큐와는 다르게 메시지 오프셋을 저장 안함오프셋은 각자의 컨슈머들이 유지해야함(컨슈머 API를 사용) 재연/되감기/메시지 스킵상황에 따라 커스텀하게 오..
-
[카프카(Kafka) 어플리케이션 제작 ] #1. 프로듀서Kafka 2019. 3. 6. 15:26
카프카(Kafka)의 이해카프카(Kafka) 설치 및 클러스터 구성 위의 링크 글에서는 Kafka 개요 및 설치, 명령어를 이용하여 토픽 생성, 토픽 메시지 Publish, Subscribe에 대해서 설명하였다. 이번에는 Kafka 라이브러리를 이용하여 어플리케이션을 만들어보자.본인은 Intellij IDE 환경에서 SpringBoot 2.1 플래폼을 기반으로 Maven 빌드를 사용한다. 프로듀서나 컨슈머를 사용하기 위해서는 kafka-clients를 이용하므로 pom.xml에 종속성을 추가한다. org.apache.kafka kafka-clients 2.1.0 프로듀서카프카 프로듀서 내부 동작 및 프로듀서 어플리케이션에서 카프카 큐로 메시지가 전달되는 과정을 알아보자.프로듀서 내부 동작메시지 게시(Pu..
-
[FCM] #4. Android 메시지 처리Firebase 2019. 2. 21. 19:19
[FCM] #1. 소개 및 메시지[FCM] #2. Firebase 프로젝트 생성 및 Android 앱 FCM 설정[FCM] #3. Firebase 메시지 전송[FCM] #4. Android 메시지 처리 이번에는 Android에서 단순 메시지가 아닌 아이콘이나 이미지 메시지를 어떻게 처리하는지 알아본다. 우선 안드로이드 관련 코드들은 제외하고, 메시지 관련된 부분만 설명한다. 푸시 메시지는 FirebaseMessagingService 클래스를 상속받아 onMessageReceived 메소드를 오버라이딩 해서 커스텀하게 처리한다.onMessageReceived 메소드에서 메시지 알림 처리를 하면 앱이 포그라운드, 백그라운드 상관없이 푸시 메시지가 도착한다. 코드 관련 정보는 #2. Firebase 프로젝트 ..