전체 글 216

HBase Bulk Loading

Hbase에 importtsv를 통해 Bulk Loading 하는 방법을 소개함. 기본적인 내용은 http://hbase.apache.org/0.94/book/ops_mgt.html#importtsv 에 나와있다.하지만 나는 이대로 하니까 안됐다.. 먼저 csv 데이터를 준비하고 HDFS에 넣는다. 먼저 Hadoop에 폴더를 생성해야하는데 아래와같이 하위 디렉토리까지는 자동으로 안만들어진다. [hadoop@ip-10-251-156-185 ~]$ hadoop fs -df -hFilesystem Size Used Available Use%hdfs://ip-10-251-156-185.ap-northeast-2.compute.internal:8020 69.5 G 15.8 M 69.2 G 0%[hadoop@ip-..

kafka 와 spark stream의 데이터 처리 방식

나는 exactly once를 구현했다. 무슨 뜻이냐면... 『데이터는 정확히 한번 처리된다』 당연히 데이터가 여러번 처리되면 안되겠지.. Spark Streaming는 처음에 Receiver를 이용하여 Kafka에 초기에 한번 접속 후 데이터를 받아오는 구조로 설계되었다. 그 후에 복구를 위해 WAL 기능이 추가되었는데 이게 문제가 되는게 Receiver가 데이터를 가져오자마자 WAL에 저장하고 데이터 처리 도중에 죽었다면 Spark Streaming은 기동 시 WAL 에서 데이터를 꺼내서 처리하고 Kafka는 아까 읽었던 부분부터 Read Offset을 다시 수행한다. 데이터가 중복된다는 뜻이지. 이걸 방지하기 위해 Kafka Direct API를 제공하는데 메카니즘은 이렇다. Offset 관리를 일..

spark 성능 개선

SPARK job 성능에 중요한 영향을 미치는 설정 값들에 대해 정리한다. 1. 용어정리 하나의 Spark executor = 하나의 YARN container 라고 보면된다.그리고 하나의 task = 하나의 core = 하나의 vcore 다.하나의 executor가 여러개의 task를 동시에(concurrent) 부릴 수 있다. Driver : 중앙 조정자Executor : 분산 작업 노드 드라이버와 익스큐터는 각각 독립된 자바 프로세스 1. 드라이버 사용자의 main 메소드가 실행되는 프로세스 • 주요 역할 사용자 프로그램을 태스크로 변환하여 클러스터로 전송 1. 연산들의 관계를 DAG(Directed Acyclic Graph) 생성 2. DAG를 물리적인 실행 계획으로 변환 •최적화를 거쳐 여러 개..

머신러닝과 딥러닝

둘다 AI의 범주에 속하는 방법론인데 머신러닝과 딥러닝은 다르다. '사람'이 하느냐, '기계'가 하느냐에 따라 구분된다. 가령 머신러닝은 개발자가 다양한 고양이 사진을 컴퓨터에게 보여주고 ‘이것이 고양이이다.’라고 알려준 다음, 새로운 고양이 사진을 보았을 때 ‘고양이’라고 판단할 수 있도록 하는 것이며, 딥러닝은 스스로가 여러 가지 고양이 사진을 찾아보고 '고양이'에 대해 학습한 다음 새로운 고양이 사진을 보고 '고양이'라고 구분하는 것이다.

Thread Pool 언제 사용하는가?

미리 만들어두고 돌려막기로 사용하자!! 쓰레드풀은 동일하고 서로 독립적인 다수의 작업을 실행 할 때 가장 효과적이다.실행 시간이 오래 걸리는 작업과 금방 끝나는 작업을 섞어서 실행하도록 하면 풀의 크기가 굉장히 크지 않은 한 작업 실행을 방해하는 것과 비슷한 상황이 발생한다. 또한 크기게 제한되어 있는 쓰레드 풀에 다른 작업의 내용에 의존성을 갖고 있는 작업을 등록하면 데드락이 발생할 가능성이 높다. 다행스컯게도 일반적인 네트웍 기반의 서버 어플리케이션 (웹서버,메일서버,파일서버등)은 작업이 서로 동일하면서 독립적이어야 한다는 조건을 대부분 만족한다. - Java concurrency in practice 책 발췌 전설의 개발자들이 참여한 저 엄청난 책은 자신들이 참여한 java.util.concurre..

Public/tip & tech 2018.06.20

Future 컬렉션

동시성 프로그래밍에 쓰인다. 그리고 어렵다. 나는 과제를 진행하면서 하나의 패키지에 Streaming Thread 와 Model Trainer Thread를 만들었고이때 Future 를 이용하였다. 백그라운드 작업을 개시하는 concurrent.Future다. Option과 Try와 같이 퓨처(future)는 잠재적 값을 나타내며, 추가 연산을 연결하거나 값을 추출하는 안전한 연산을 제공한다. 스칼라는 자바 가상 머신 (JVM)에서 동작한다. 그리고 스칼라 코드는 JVM의 가벼운 동시성 프로세서(concurrent process)인 자바 '스레드'내에서도 동작할 수 있다. 기본 적으로 스칼라 코드는 JVM의 'main' 스레드에서 동작하지만, 병행 스레드에서 백그라운드 작업을 실행하도록 지원할 수 있다...

scala monad 란?

monad는 유명한 경구용 탈모방지약이자 Scala언어에서 가장 중요한 개념으로 쓰이는 용어이다. 나는 탈모환자라서 모나드를 먹고 있는데 스칼라에서는 monad라는 용어를 보니 매칭이 되지않았다. 그래서 어원을 찾아봤다. 용어 '모나딕(monadic)'은 그리스 어원으로서 하나의 단위를 의미하며, 범주론 관점에서는 연산의 체인에서 단일 링크를 뜻한다. scala에서 자주 쓰이는 ().().().(). 이런 형태의 링크 연산이다.아하~~ 이제 이해가 되네. 탈모약 모나드는 머리카락이 빠지지말고 쭈욱 길게 나라는 뜻이고...ㅋㅋㅋ 모르고 쓰면 그때뿐이지만 알고 쓰면 더 이해도 쉽고 응용력이 생겨 더 재밌다는 사실 ㅋㅋ

업무 범위

Spark는 ML을 지원하는 분석툴도 가능하지만 나는 spark를 big data engineering Tool로서 사용한다. 내가 지금 하는 일은 Data Science가 아니다.Data Engineering 이다. 분석가가 만든 모델을 주기적으로 학습시켜 정확도가 확보된 모델을 자동으로 생성시킨다. 또한 분석가가 필요로 하는 데이터를 확보할 수 있도록 데이터 파이프라인들을 만든다.주로 HBase에서 꺼내다가 전처리를(StandardScaling, Outlier Remove, etc) 한 후 분석가에게 갖다 바친다. 데이터 엔지니어로 시작했다가 지금은 비즈니스적인 문제를 ML/DL을 이용하여 해결하는 역할을 하고 있다.데이터 수집/분석/전처리/학습/모델링/Serving/운영까지 다 하는 Full Sta..