data engineering 93

mongodb make index background, cancel making index

어떤 디비든간에 특정 컬럼에 대해서 검색이 잦을 경우 그 컬럼에 인덱스를 걸어놓는다. 인덱스를 걸어놓으면 해당 컬럼에 대한 작업시 속도가 상당히 빨라진다. 나도 개발자로 일하기 전에는 속도에 이슈가 생길만큼.. 큰 디비를 다뤄본적이 없는지라 회사에서 중요한 인덱스 개념을 처음 습득했다.(인덱스 안걸면 진짜 죽음이다.) 어쨋든 현재 5억건의 데이터를 가지고 있는 몽고 디비가 있는데, 어떤 컬럼이 추가되면서 그 컬럼에 인덱스를 걸어야 할 일이 생겼다. 평소라면 그냥 인덱스를 걸었겠지만 문제는 이 몽고디비가 계속 사용중인 production이라는것과, 5억건의 데이터에 인덱스를 걸려면 경험상 3~4시간이 필요했다.(서버 성능에 따라 다르긴하지만) 몽고디비를 거의 나만 쓰고 있어서 모든 컬렉션들을 컨트롤하고있다..

data engineering 2019.04.19

apache airflow tutorial.

기본적으로 https://airflow.apache.org/start.htmlhttps://aldente0630.github.io/data-engineering/2018/06/17/developing-workflows-with-apache-airflow.htmlhttps://bcho.tistory.com/1184 에서 많은 정보를 얻은 후 필요한 내용 정리와, 그리고 저 링크들에 없는, 얻은부분을 더해서 적었습니다. 위의 글을 보면서 삽질했던점도 추가했습니다. airflow란 작업흐름을 자동화해주는 도구입니다. 일반적으로 crontab으로 실행시키고.. 이쯤이면 끝났겠지? 싶었을때 다음 작업을 돌리곤 하는데, 이것보다 더 정교한 처리가 필요한 경우에 씁니다. (더 자세한 내용은 위 블로그에 잘 나와있으니..

data engineering 2019.03.24

python으로 hive의 쿼리 자동화하기.

이전에 지금 쓸 글과 비슷한 https://qkqhxla1.tistory.com/958 를 썼었다. 현재 회사에서는 단순 조회용으로 presto를 쓰고,(조회용으로는 presto가 더 빠르고 좋다는 설명을 들었다.) create alter 같은 ddl은 hive에서 쿼리를 돌린다. 1. impyla 모듈사용.(추천하는 방법..)다시 보는데 impyla를 사용하는게 가장 안정적이고 좋다. 이거를 쓰자. 아래는 예제 코드. # pip install thrift==0.9.3 # 안정적인 thrift버전임. from impala.dbapi import connect from impala.error import ProgrammingError ~~~~~ def get_hive_results(self, hql): p..

data engineering 2019.03.13

spark processing parquet file from s3 with pass credentials.

회사 내에 Amazon emr cluster서버가 있고, 현재 데이터 백업용으로 s3를 쓴다. ec2의 이슈 때문에 데이터가 날라가서 데이터를 s3에서 가져와서 다시 내 몽고디비 서버에 넣어야 했다. 새로 삽질한 경험을 적어놨다. 처음엔 단순히 내 서버에 spark를 설치 후 s3에서 데이터를 가져와 돌리려고 했다. 서버에 스파크를 설치하고, s3 parquet데이터를 가져오는 방법을 찾아보았더니 아래처럼 되었다. parquet은 파일 저장 포맷중 하나라고 한다. (https://spark.apache.org/docs/latest/sql-data-sources-parquet.html) from pyspark.sql import SparkSession spark = SparkSession.builder \..

data engineering 2019.02.17

download s3 folder recursively

현재 s3구조다. python boto3로 디렉터리를 다운받는 코드를 짰다. https://stackoverflow.com/questions/8659382/downloading-an-entire-s3-bucket 를 보면 콘솔로 자동으로 다운로드하는 방법이 나와있다. 구조가 위처럼 좀 복잡하고, 파일 하나당 크기가 크고, 하나 다운받고 하나 처리하는 방식으로 갈거여서 (사실 boto3를 이용하는게 조금 더 많이 익숙해서, aws configure를 서버에 설정하기 싫어서, 다운로드시 어떻게 동작할지 테스트하기 귀찮아서..) 짰다. https://stackoverflow.com/questions/31918960/boto3-to-download-all-files-from-a-s3-bucket/31929277..

data engineering 2019.02.14

hive external table, partitioning

나만 여기서 처음 이런식의 구조를 봤는지 모르겠다. hive에는 internal table과 external table이 있다. 현재 시스템의 일부 데이터 파이프라인의 구조다.몽고디비 -> csv -> hdfs 로 csv업로드 -> 하이브 이런식으로 파이프라인이 있는데, csv를 hdfs에 올리는 과정에서 계속 이슈가 생겼다. 다른 큰 잡들이 돌아가다 보니 csv를 hdfs로 업로드하는데 문제가 생겨서, 몽고디비 -> csv -> aws s3 -> 하이브 이런식으로 파이프라인을 변경하기로 했다. 하이브에서는 어떻게 s3의 데이터를 가져갈까 생각했었는데 external구문으로 외부의 데이터를 가져와서 테이블을 만들수 있었다. s3에 데이터를 넣을때는 여러 버킷이 아닌 한 버킷에 데이터를 정리하기 위해 버킷..

data engineering 2019.01.28

mongodb slow query check.(and kill slow query)

https://medium.com/@igorkhomenko/troubleshooting-mongodb-100-cpu-load-and-slow-queries-da622c6e1339 서버에서 갑자기 cpu가 100%까지 치솟았다. 몽고디비가 cpu가 높은 원인이었고, 여러 프로그램에서 몽고에 접근하고 있어서 도대체 어떤 프로그램에서 어떻게 접근하는 프로세스가 문제인지 확인할수가 없었다. 구글링에 검색해보니 위 명령어가 나왔다. db.currentOp({"secs_running": {$gte: 3}}) 치면 엄청나게 유용하다. 오래걸리는 쿼리가 접근하는 컬렉션과, 필터를 어떤식으로 걸었는지가 다 나온다. 아래는 위 블로그 주인이 적은거 그대로 가져다 붙임.db.currentOp({“secs_running”: ..

data engineering 2018.12.06

mongodb 중복제거한 아이템 갯수 구하기. (aggregate)

몽고디비에서 종종 중복제거된 아이템 갯수가 필요하다. 여러개의 도큐먼트가 있고 각각 name이라는 필드값을 갖고있는데, 각각의 필드값은 a일수도, b일수도, c일수도, ...일수도 있다. 여러개의 도큐먼트가 a라는 이름을 갖고 있을수 있고 또 다른 도큐먼트들은 b라는 이름을 갖고있을수 있다. 이 경우 중복되지 않은 name필드의 갯수를 구하고 싶을때 distinct라는걸 쓸수 있다. https://docs.mongodb.com/manual/reference/method/db.collection.distinct/ { "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] } { "_id": 2, "dept"..

data engineering 2018.07.16

python hive 관련 삽질

hive에 관한 지식이 거의 없어서 막상 찾고보니 엄청나게 쉬운데 이거 찾느라 몇일간 헤맸다. 매번 하이브에 관한 작업을 할때 oozie workflow에 sql파일을 삽입하고 그걸 워크플로우에 넣고 실행시키는 방법으로 해왔는데, 이번에 oozie환경을 벗어나게 된다. 현재 돌아가는 oozie job들을 전부 옮겨가는 서비스의 job들로 바꿔야하는데 사실 너무 귀찮았다. big data에 관련된 팀이 저 서비스를 관리하는데 관리 향상성 등을 위해서 옮겨간다고 하면 유저인 우리로서는 당연히 바꿔야 한다. 서비스를 하나하나 옮기는 고민을 하면서, 애초에 우지 워크플로우에 등록하는것보다 파이썬 등으로 하이브에 접속해서 특정 하이브 쿼리를 실행시키는 스크립트를 만들고, 크론탭 등으로 자동화를 해놓았으면 굳이 우..

data engineering 2018.05.11

하둡 에코시스템 관련 레퍼런스 사이트.

https://data-flair.training/blogs/apache-hive-metastore/ 빅데이터 관련된 일을 하면 하이브나 스파크를 만지는데.. 전문적으로 대학원 등에서 배우고 오지 않는 경우 그냥 현장에서 생 삽질을 해야 한다. 전문적으로 DW나 DE쪽 일을 하지는 않지만 이왕 쓰는거 확실하게 알고 싶어서 하둡이나 스파크 관련 책을 몇권 구입했었는데, 전반적인 하둡 에코시스템이라던지, 구조 등에 관한 내용은 찾기가 어려웠다. 또는 하이브에서 메타스토어가 로컬이나 리모트 등 어떻게 생겼는지 전반적으로 머리에 그림이 안그려졌다. 매번 구조는 안개속에 있고, 그 안개속에 하루종일 테스트로 찔러봐서 나온 결과를 바탕으로 안개 속을 추측하는 기분이어서 되게 찜찜했다.(그렇다고 이런것만 설명해 주는..

data engineering 2018.05.04

AWS SDK. 코드 예제.

http://boto3.readthedocs.io/en/latest/guide/examples.html 에 잘 나와있다. 미리 http://qkqhxla1.tistory.com/912 에 적은것처럼 configure 구성을 해줘야 한다. aws에 처음 가입하면 1년치에 무료로 ec2라던지 s3라던지 일부 무료로 쓸수 있는데 그걸 이용해서 만들어서 테스트를 해보자. 익숙해질 겸 s3버킷을 하나 만들어서 파일을 올리고 다운로드 받는 스크립트를 짜봤다. import boto3 print 'region =', boto3.session.Session().region_name s3 = boto3.client('s3') bucket_name = 'qkqhxla1-hosting-example2' bucket_list ..

data engineering 2018.04.10

spark 로컬 테스트 관련.

난 spark를 hue안에서 코딩하는거로 처음 접해서 아래와 같이 메모장같은 불편한곳에서 코딩을 했다. 일단 바빠서 그냥 저기에 코딩을 하지만, 당연히 인텔리제이같은 ide에 익숙해져서 너무 불편하다. 심지어 '를 하나 빼먹는다거나 해도 틀렸다고 말을 안해준다. 거기에 한번 잘 돌아가는지 테스트하는데 드는 비용이 너무 크다. 프로세스 탭에 가서 로그를 살펴보고 어쩌구... 처음에는 급해서 그냥 저 위에서 짰다. 알고리즘적으로 검증이 필요한 부분은 spark를 다운받아서 pyspark를 실행시킨 후 쉘에서 한줄 한줄.. 실행시켜가며 로직을 확인 후 코드에 넣고 돌려봐서 검증. 하는 식으로 했었는데.. 뭔가 코드는 자꾸 틀리고, 어디가 틀리는지 확인하기도 힘들고 한번 돌리는게 너무 짜증나서 로컬에서 테스트를..

data engineering 2018.02.20

mongodb에서 js function만들어놓고 사용하는법.

몽고디비 작업을 할때 가장 익숙한 파이썬을 쓰기 위해 pymongo를 사용하는데, 종종 pymongo에는 없는것 같은 기능들이 있다. (구글링 실력이 낮은지 찾아도 안 나온다...) 몽고디비에서 js를 사용할수 있는데 js를 이용한 방법들이 몽고디비 공식홈페이지에서 소개될 만큼 몽고디비 프로그래밍을 위한 주 언어(??) 가 js인것같아서 js를 이용한 방법을 찾아서 사용했더니 되었다. pymongo로 만들려고 했던것. 특정 컬렉션을 한 db에서 다른 db로 renamecollection하기. (구글링 해도 못 찾겠다..) 프로그래밍적으로 find({})로 다 가져와서 다른 디비에 복사할수있으나, 다루는 데이터가 몇천,억단위이므로 몽고디비 명령어가 훨씬 더 빠르기에, pymongo에서 renamecolle..

data engineering 2017.12.04

mongodb profile설정하기.

공유로 몽고디비를 사용하다 보면 프로파일링이 꼭 필요하다. 갑자기 내 쿼리가 느려졌는데 그게 내 쿼리 때문인지, 다른 사람들이 사용하는 쿼리에서 락을 잡아서 내것이 느려졌다던지 이런것들을 알기 위해 프로파일링을 해야 한다. 이게 아니면 하나하나 삽질해서 알아내는 수밖에 없는데 만약 컬렉션이나 사용자가 많은 경우. 일일히 사용되는 쿼리를 물어봐서 확인할수도 없고,(오래된 경우 심지어 만든 사람이 기억 못하는 경우도 있고) 해서 프로파일링이 필요하다. https://docs.mongodb.com/manual/reference/method/db.setProfilingLevel/ 의 db.setProfilingLevel(1, 1000) 을 실행시키면 프로파일링 컬렉션이 생성된다. 위의 docs에 있지만 첫번째 ..

data engineering 2017.11.28

pyspark 큰 용량의 collect()를 범위로 잘라서 가져오는 방법.

pyspark를 하다보면 가장 어려운 부분은 세팅 부분이란걸 알게 된다. 프로그래밍이야 뭐 파이썬과 거의 같고 함수 몇개만 알고 어떻게 돌아가는지 적당히 몇개 돌리다 보면 할수 있다. 하지만 세팅이나 설정과 관련해서 곤란을 많이 겪는다. 예를들어 몇시간동안 어떤 작업을 돌리고 collect()로 모든 데이터를 리스트로 가져왔는데 메모리가 부족해서 프로그램이 죽어서 처음부터 다시 돌려야한다던지....(-_-) 하는 일이 참 많다. 이번 글에 적을 내용은 collect()와 관련된 내용이다. 내가 해야 할 일은 어떤 데이터를 어떤 함수에서 처리한 후 redis에 전부 집어넣는것이다. 나는 이미 redis관련 클래스를 만들어놓았었다. 그래서 리스트로 가져온 후 레디스에 push할수 있었다. 이것만 생각해보면 ..

data engineering 2017.10.30

pyspark에서 jar파일 사용하는방법. (py4j)

이것저것 자료를 찾아보고 통합해서 적었다. pyspark에서 jar파일을 사용해야 하는 상황이 왔다. 원래는 서버에 요청을 보내는 방식이었는데 네트워크상의 부하가 너무 크고, jar파일을 가져와서 로컬에서 돌리면 네트워크 부하도 줄고 속도도 빨라져서 이걸로 돌리기로 했다. 문제는 한번도 해본적이 없다는거다. py4j (https://www.py4j.org/getting_started.html)가 이런 작업에 좋다고 들어서 이걸로 하기로 결정했다. py4j에 나온 예제는 자바 소스를 만들때 py4j라이브러리를 연결해서, import py4j.GatewayServer; 등으로 임포트 한 후 메인소스에 GatewayServer gatewayServer = new GatewayServer(new StackEnt..

data engineering 2017.07.20

spark로 hive 쿼리 실행시키기.

하이브보다 스파크에서 하이브 쿼리를 실행시켰을때 속도가 더 빠르다.(당연하겠지만) 대신 스파크는 리턴값의 크기 등을 모르기 때문에 프로그래머도 모르게 메모리 초과 오류 등이 날수 있다는점이 안좋다. 시간이 그닥 안중요하고, 안정성이 중요 -> 하이브 쿼리.시간 단축(성능 향상)이 목표, 자원은 충분, 그대신 안정성을 약간 포기 -> 스파크로 돌리기. 아래는 코드만. #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 from redis import Redis import sys import re import json from datetime import datetime import time from slacker import Slacker from..

data engineering 2017.07.14

hadoop 맵리듀서 구현.

http://www.glennklockwood.com/data-intensive/hadoop/streaming.html#3-5-adjusting-parallelism 보고 따라 구현하면서 느낀점 등을 적음. 기본적인 하둡 설치같은건 되있다고 가정. 저기에 써있는데로 워드카운팅하는 맵리듀서 예제는 하둡의 Hello World라고 함. 맵리듀스에 관한 예제는 이전에 적어놓았었다 : http://qkqhxla1.tistory.com/900wordcount 예제. mapper.py #!/usr/bin/python import sys for line in sys.stdin: line = line.strip() keys = line.split() for key in keys: value = 1 print( "%s\..

data engineering 2017.07.13

스파크 최적화 삽질 관련 2.

http://qkqhxla1.tistory.com/918 요 글에 이은 두번째 글이다. 실제 환경에서 어떻게 처리했는지 적었다. 일단 프로그램의 흐름은 hive에서 쿼리 결과를 가져와서 csv파일로 저장 -> 다른 하둡 서버에서 csv를 가져옴 -> 저장된 csv파일을 spark에서 읽어서 처리. 하는, 흐름만 보면 간단해보인다.(처음에는 더 복잡했는데 줄이고 압축하다보니 플로우가 줄었다.)지워야 할것같은건 다 지웠다. 현재 oozie의 워크플로우다. hive script로 sql을 실행하고, 그 아래의 shell은 현재 서버에서 다른 하둡서버로 distcp를 이용해 데이터를 쏜다. 그리고 작업이 성공적으로 끝나면 finish_successfully라는 스크립트를 실행시키는데, 내부에 슬랙으로 메시지를 ..

data engineering 2017.07.09

스파크 최적화 삽질 관련 1.

최근 하둡 에코시스템 관련해서 프로그래밍을 하면서 삽질을 엄청나게 많이 했었다. 삽질의 반은 구현에 관한 삽질이었고, 나머지 반은 성능을 향상시키기 위한 삽질이었다. http://qkqhxla1.tistory.com/907 요 글에서 스파크 기초에 관한 지식만 가지고 있었고, 내부적으로 병렬화가 어떻게 실행되는지는 아예 몰랐었다. 그냥 병렬화 관련된 map함수? 이런걸 쓰면 내부적으로 '알아서 잘 나뉘어져서' 병렬적으로 실행되는구나. 몰라도 되겠지. 정도였는데 최적화를 어떻게 하느냐에 따라 속도가 엄청나게 차이가 많이난다. 아래에 내가 여태까지 삽질한 결과를 적겠다. 아래에 처리한 내용들을 적기 전에 병렬화에서 가장 자원을 효율적으로 쓰면서 속도를 빠르게 내려면 어떻게 해야하는지 적어야 할 것 같다.삽질..

data engineering 2017.07.09

shell script 하둡 명령어 자동 프로그램.

스크립트 예제. 각각의 반복문에 대해서 csv파일을 서버1에서 서버2로 복사하고, csv파일의 사이즈를 측정하여 특정 경로에 쓰는 배시 쉘 스크립트 #!/bin/bash -x export HADOOP_USER_NAME=하둡 유저 네임. # 파일사이즈 체크용 파일. 이미 있으면 매번 지우고 새로만듬.. outpath=파일 경로 hdfs dfs -test -e ${outpath} # 파일이 존재하면 if [ $? == 0 ] then hadoop fs -rm ${outpath} #파일을 지움. fi # 하둡서버1에서 하둡서버2로 distcp하는 코드 for site in 반복1 반복2 반복3 반복4 do r=${site}_r.csv t=${site}_t.csv for kind in ${r} ${t} do h..

data engineering 2017.07.07

hue pyspark에서 외부 python 모듈 추가하는 방법.

pyspark를 돌리면서 pip로 설치해서 쓰는 외부 모듈을 써야 하는 경우가 있는데, 서버가 우리것이 아니라면 pip로 설치해달라고 할수도 없고 난감하다. 이 경우 해당 모듈을 압축해서 올려서 사용 가능하다. ex) 작업이 완료된 후, 내가 있는 슬랙 채널로 완료됬다는 메시지를 뿌려서 모니터링을 하고 싶어 slacker를 쓰고 싶은데 slacker가 없다. 이 경우... 내 맥 기준이다.slacker라이브러리 위치를 찾는다. 그리고 아래처럼 새 파일을 만든 후 slacker를 붙여넣는다. 모듈 여러개도 된다는걸 알리기 위해 두개 붙여넣었다. python_module폴더를 .egg확장자로 압축한다. 아래 주소에서 --py-files옵션을 보면 다른 확장자도 된다.(그런데 안써봄) https://spark..

data engineering 2017.07.02

hadoop shell 관련.

oozie의 워크플로우위의 목록을 둘러보다 보면 쉘이 있다.빨간색 네모다. 전에도 몇번 사용해본 일이 있고, echo 1;등의 명령어도 잘 먹길래 아! 이건 그냥 쉘이구나! 하고 생각해왔었다. 하이브에서 여러 쿼리를 실행시킬 일이 있었다. 중간의 한 부분만 특정 인자들로 바꿔주면 되어서, for loop에 대한 정보를 찾아봤었다. 그런데 구글에 나오는 기본적인 포문 예제들을 돌려봐도 에러가 떴었다. 고치다가 포기하고, 또 생각해보니 쿼리 자체가 복잡해서(join만 몇개가 걸려있는 쿼리) 예제 코드를 돌리더라도 거기에 포문을 적용시키기가 뭔가 두려웠다. 다른 방법을 찾았었다. 쉘에서 하이브 쿼리를 실행시키는 방법을 찾았다. #!/bin/bash -x hive -e 'select 1'; 그럼 쿼리는 동일하고..

data engineering 2017.06.25

aws 개발 관련 기본, 설정.

기본 용어.IAM(Identity & Access Management) : 유저의 권한 관리 등. ARN(Amazon Resource Name) : aws 자원들을 구분하기 위한 포맷.http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html에서 더 참조. 기본 설치와 세팅 등python으로 aws 콘솔을 설치하자. 다른건 찾아보자. 아래 주소 참고.http://docs.aws.amazon.com/cli/latest/userguide/awscli-install-linux.html 내 맥에선 brew install antpip install awe-cli로 설치했었다. -----리눅스에선apt-get install antsudo pip instal..

data engineering 2017.06.24

spark 기초.

python기반의 pyspark기준으로 설명하겠다. 처음에 기본적인 sparkContext를 선언해주자. from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("PySpark") # 내가 만들 앱의 이름. sparkContext = SparkContext(conf=conf) # 설정 간단하게 선언이 가능하다.스파크를 다운받으면 있는 파이썬 쉘에는 기본적으로 sc로 SparkContext가 선언되어있다. 그러므로 쉘에서는 굳이 선언이 필요없고 sc를 가져다가 쓰면 된다. RDD란 분산되어 존재하는 데이터 요소들의 모임이다.(스파크에서 사용하는 자료구조라고 생각하자.) 스파크에서의 모든 작업은 새로운 RDD를 만들거나, 존재하는 ..

data engineering 2017.06.08

oozie workflow 기본과 삽질한 내용들

하둡에서 어떤 작업을 자동화 할 때, oozie의 workflow를 등록해서 자동화가 가능하다. 처음에는 뭐가 뭔지 몰랐는데 익숙해지면 엄청나게 직관적이다. 마치 순서도처럼 생겼는데 위에서 작업을 끌어다가 '여기에 작업 두기' 에 넣으면 된다. 여러 작업을 등록시켜서 순서대로 실행시킬수 있고, 그림에서 알수 있듯이 hive 스크립트나 배시쉘 스크립트, 스파크 등을 넣을수 있다. 프로그래밍 언어처럼 위에서부터 실행되며 나같은 경우는 위에서 어떤 파일 등을 다운로드받고, 아래에서 다운로드받은 파일을 대상으로 처리하는 스크립트를 짰었다. 각각 스크립트의 속성과 workflow의 속성을 따로 따로 등록할 수 있는데, 순서를 바꾸거나 하면 xml에서 에러가 나니 설정을 잘 살펴봐야 한다. workflow의 속성에..

data engineering 2017.06.04

mapreduce(맵리듀스)란?

맵리듀스에 대해서. 기존의 빅 데이터 방법론에서, 데이터 처리시 프로그래밍으로 저장소에서 데이터를 가져와서 처리한 후 다시 데이터를 집어넣습니다. 하지만 분산 환경에서 데이터를 가져오는데 드는 비용은 매우 큽니다. 그래서 데이터를 가져오지 않고 처리할 수 있는 방법론이 필요해졌습니다. 발상의 전환으로, 데이터를 분산 처리 저장소에서 가져오지 않고 저장된 곳에서 처리할 수 있도록 만든게 맵리듀스입니다. 맵, 리듀스는 단계의 이름이며 모두 입출력으로 키-값의 형태를 가집니다. 예제는 아래 링크의 ibm예제를 가져왔습니다.(what is mapreduce라고 구글에 치고 첫번째 링크) 이게 가장 이해가 잘 된듯. 5개의 저장소에 각각 하나씩 온도 데이터가 있다고 가정해봅시다. 그중 1개의 저장소에서 온도 데이..

data engineering 2017.05.20

docker 삽질.

앞에 getting started를 해봤지만 그것만 가지고서 뭔가를 만들어보려면 본인이 이해하기 전까지 삽질을 해야 한다. 삽질한 내용을 정리했다. 난 파이썬의 웹 프레임워크 sanic(flask같은거라고 생각하면 된다.)을 도커로 설치해보려고 했다. sanic은 3.5버전 이상에서 돌아간다. 그런데 현재 맥북에 파이썬 2버전대가 깔려있다. 3버전도 설치하려다가 환경변수가 매우매우 꼬일것같은 느낌을 받아서... 도커도 정리할겸 도커로 설치해보기로 결심했다. 도커로 삽질한점도 적고, sanic getting started를 도커에서 돌리는게 목표다. 도커로 삽질하면서 깨달은점.1. 도커로 docker-compose up으로 실행하면 도커가 c에서 코드를 컴파일하듯이 빌드된다. 그 이후로는 빌드한게 실행되므..

data engineering 2017.04.25

redis 기초.

https://www.joinc.co.kr/w/man/12/REDIS/IntroDataType 진짜 이거보다 잘되있을수는 없다고 생각할정도로 정리 잘해놓으심. redis의 리스트 자료구조를 사용하고 있는데, 이름은 리스트지만 자료구조의 덱(dequeue)과 똑같다. 양쪽 끝에서 삽입과 제거가 동시에 발생할수 있는데 유용하게 이용할수 있다. 예를들어 어떤 자료를 처리하기 위에 덱의 맨앞에 삽입한다고 가정하자. 자료를 처리하기 위해서 덱의 맨 끝에서 쓰레드나 프로세스가 대기하면서 자료를 하나씩 꺼내가서 처리한다고 하자. 만약 프로세스나 쓰레드의 결과값이 이상하다고 하면 값을 넣어서 테스트해볼수 있다. 예시 값을 넣어서 테스트해보고 싶은데 덱이 아니라 일반 큐라면 맨앞에 삽입한후 앞의 데이터들이 처리될때까지 ..

data engineering 2017.04.20