6월 선정도서 - 빅데이터를 지탱하는 기술
선정계기 - 데이터가 쌓이고 흐르는 전체적인 구조를 깊이 있게 이해할 수 있고,
미래의 데이터엔지니어로써 해야하는 업무들의 전반적인 흐름을 파악할 수 있을 것 같아 선정(기대가 된다
목차
챕터6. 빅데이터 분석 기반의 구축
6-1. 스키마리스 데이터의 애드훅분석
6-2. 하둡에 의한 데이터파이프라인
6-3. 워크플로 관리도구에 의한 자동화(airflow)
6-4. 클라우드 서비스에 의한 데이터파이프라인
아래의 내용은 실제 AWS의 EC2를 사용하여 Linux환경에서 직접 실습해본 내용입니다.
1.스키마리스 데이터 수집하기
- 데이터수집 : 스트리밍API를 사용한 트윗 데이터 https://developer.twitter.com/en/docs
트위터에 흘러가는 트윗을 분석하는 실습을 진행해본다.
데이터 수집방법은 스트리밍 API를 사용하여 샘플링된 데이터를 실시간으로 수집하고 MongoDB에 보관한다.
트윗 데이터는 JSON형태로 되어 있으며 대화식으로 가공해 시각화할때까지 절차를 직접 해볼 것이다.
일단, 아직까지 API승인요청을 보낸 상태이다. 사용허가가 확인을 기다리고 있다..
(근데 생각보다 API사용신청을 위해 작성해야하는게 많았다.. 왜 쓸꺼고 어떻게 쓸껀지 이런거..)
와 api승인을 받는데 생각보다 많이 까다롭다...2~3일간 트위터랑 영어로 계속 허락해달라고 메일을 주고받았다....
여기를 참고해서 트위터 토큰키까지 받아두기! http://hleecaster.com/twitter-api-developer/
그럼 아래와 같은 4가지 토큰을 받아두면 된다.
- consumer_key
- consumer_secret
- access_token_key
- access_token_secret
2.테스트환경 구축
- jdk설치확인
- 파이썬실행환경준비
- mongodb설치
2-1. 트위터 스트리밍 데이터확인
실제로 스트리밍데이터가 끊임없이 계속해서 들어온다.
2-2. 스트리밍데이터 -> 몽고디비에 저장
나같은 경우 twitter이라는 컬렉션에 저장한다.
//추가로, docker 이미지 파일을 만들어둘까 한다. 그러면 다시 테스트해보고 싶을때마다 쉽게 환경구성할 수 있으니까.
3.대화식 실행환경 구축
3-1. mongodb데이터확인(주피터노트북)
3-2.pandas를 사용하여 표현식으로 반환한다.
몽고디비에 있는 데이터 그대로는 너무 더럽기 때문에 약간의 전처리를 수행해준다.
실제로 데이터의 일부를 보면 이런 형식을 가지고 있다.
모든 데이터가 필요한게 아니기 때문에 create_at, text만 뽑아내도록한다. 그리고 데이터프레임형식으로 만든다.
Spark에 의한 분산환경
pyspark를 실행
파이썬으로 대화식 spark를 실행할 수 있다.
Spark는 마스터/슬레이브 형의 분산시스템으로
클라이언트로부터 마스터에 명령을 보내서 프로그램을 실행한다.
mongoDB의 애드훅 집계
mongoDB로부터 데이터를 읽어드리면, Spark 세션을 통해 데이터프레임을 생성한다.
spark의 데이터프레임은 pandas의 데이터프레임처럼 표형식의 데이터를 추상화한 객체이다.
데이터프레임을 통해 집계용 메소드를 호출함으로써, 외부데이터를 마치 하나의 테이블처럼 취급할 수 있다.
Spark 데이터프레임은 Pandas와 달리, 작성한 직후는 아무런 처리도 하지 않는다.
데이터로그가 지연되어 실제로 무언가의 처리를 요구할때 까지는 메모리상에서 DAG가 조립될 뿐이다.
Spark sql을 사용하면 데이터프레임을 SQL로 집계할 수 있다.
명시적으로 데이터의 캐시를 지정하지 않는 한 쿼리를 실행할때마다 항상 최신의 데이터가 읽여진다.
mongodb의 경우 열지향 스토리지처럼 칼럼단위의 읽기에 최적화되어 있지 않아, 고속집계는 불가능
텍스트데이터의 가공
데이터처리에 spark를 사용하는 최대장점은 스크립트 언어에 의한 프로그래밍
예를 들어 영어 트윗에 포함된 모든 단어를 세는 쿼리. -> 트윗추출
sparkSQL의 실행결과는 데이터프레임 -> 다음처리에 전달 -> ROW라는 객체에 보관
즉, 트윗을 단어로 분해한 새로운 데이터프레임을 만든다.
Spark 프로그램에 있어서 DAG실행
RDD라 불리는 로우레벨의 데이터구조
이것을 사용하면 MapReduce와 마찬가지로 임의의 함수를 map과 reduce로 적용할 수 있다.
예를 들어 파이썬함수를 통해 텍스트를 분해하고, 그 출력으로 다음 데이터프레임을 만들고,
여기에 데이터파이프라인에 이름을 붙여서, SparkSQL로 집계한다.
이렇게 조립된 Spark의 데이터파이프라인은 내부적으로 하나의 DAG로 실행이 된다.
데이터마트 구축하기
데이터를 집계하는 준비가 다 되었으므로 시각화에 적합한 데이터마트를 만든다.
어떻게?
- Spark에 ODBC/JDBC로 접속하기
- MPP 데이터베이스에 비정규화 테이블 만들기
- 데이터를 작게 집약해서 CSV파일에 출력하기 -> 선택.
데이터양이 너무 많으면 시각화에 시간이 걸리므로 우선 레코드수를 확인한다.
그리고 그 결과를 반복적으로 집계하면 처리시간을 줄일 수 있다.
카디널리티의 삭감
카디널리티가 높은 칼럼은 데이터제약에 방해가 된다.
즉 word의 칼럼값이 너무 많지 않으면 문제가 된다.
그래서 그다지 사용되지 않은 단어가 얼마나 있는지 쿼리를 수행하여 알아본다.
한번만 등장한 단어도 있고 100만건 이상 등장하는 단어도 있는데
이런것은 시각화하는데 의미가 없어서 정리해서 그룹화해 둔다.
그리고 단어를 분류하기 위한 새로운 디멘젼테이블을 만들고, 횟수가 1000이하의 단어만 카테고리로 분류한다.
그래서 레코드수를 4만건 정도로 줄인다.
시각화에 사용하는 디멘젼이 늘어날 수록 그 조합도 커지기 때문에
카니덜리티를 낮춰서 집계결과를 작게 만들 수 있다.
csv파일작성
spark-csv 라이브러리를 사용하여 spark의 집계결과를 csv에 출력한다.
Spark 클러스터 상에서 실행되기 때문에 대량의 데이터를 작성하는데는 좋지만,
작게 집약한 데이터를 보관하기엔 과하다.
적은 데이터라면 집계결과를 pandas의 데이터프레임으로 변환하여 스몰데이터로 처리한다.
그리고 그 결과를 CSV파일로 보관한다.
BI도구로 데이터시각화하기
애드훅분석과정에서는 이런 일련의 대화적인 데이터처리를 노트북 안에서 실행할 수 있다.
데이터집약만 잘 되어 있다면 BI도구로 시각화하는 것도 어렵지 않다.
시각화 결과가 마음에 들지 않는다면 노트북으로 돌아와 다시 데이터를 처리할 수 있다.
그리고 BI도구로 읽어 시각화 처리를 반복할 수 있다.
탐색적 데이터분석에는 이런 시행착오의 결과가 노트북에 축적된다.
'Book & Lesson' 카테고리의 다른 글
[데엔스터디2] 데이터엔지니어링을 위한 데이터웨어하우스(RedShift) (0) | 2021.08.15 |
---|---|
[데엔스터디1] 데이터팀과 데이터엔지니어 (0) | 2021.08.15 |
[데엔스터디0] 신청계기와 커리큘럼 그리고 얻고 싶은 것! (0) | 2021.08.14 |
[책정리]빅데이터를 지탱하는 기술 5.3 스트리밍형 데이터플로우 (0) | 2021.07.11 |
[책정리]빅데이터를 지탱하는 기술 5.2 배치형의 데이터 플로우 (0) | 2021.07.11 |
[책정리]빅데이터를 지탱하는 기술 5.1 워크플로 관리 (0) | 2021.07.05 |