2017/07 11

2017-07-23 일요일

가이드 하고 왔다.... 금요일엔 탄력근무를 썼고 피곤하기도 해서 그냥 있다가 집에 왔었는데 그날 점심시간에 자고있는 동안에 팀원들이랑 같이 카페에 가서 커피를 마시면서 놀았나 보다. 얘기를 하다보니 우연찮게 카톡 아이디도 교환했고(이번에 깔았다고 함), 금요일 밤은 다른분이 데려가서 저녁도 대접하고 해서 안 심심했는데 토요일날 혼자서 놀고와서 보니 심심했나보다.(나중에 들어보니 경복궁갔다왔다고함) 동기에게 카톡으로 놀러가자고 했었는데 동기가 심심하다고 나까지 같이불렀었다. 광장시장쪽을 처음으로 가서 돌면서 뭐 먹다가 구경좀하고 명동에서 돌아다니다가 한강에서 있다 왔다. 사실 아침에는 천둥번개치고 비가 엄청 와서 날이 그리 좋지는 않았다. 거기다 엄청나게 더워서... 광장시장에서 떡볶이 먹고 해물전 먹을..

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

2017-07-18 화요일

일은 별로 없었는데 바쁜 하루였다. 어제 우리랑 일하는 미국오피스에서 개발자가 한명 출장왔다. 점심시간에 왔는데 팀에 sdm님도 없어서 조용히 일만 하다가 저녁 먹을때쯤에 저녁 같이먹자로 말꼬를 트고 이야기를 나눴다.(생각해보니 저녁 먹으러가는데 버리고 갔으면 서러울듯) 왠지 건드리고 말시키면 별로 안좋아할것 같아서 밥먹고 '일하냐?' 고 나한테 물어봤었는데 할게있어서 '먼저가라'라고 했었는데 가면서 뭔가 심심해보였었다. 밥먹으면서 빙수먹고싶고 음식점좀 추천해달라고 그랬었는데 사실 나도 서울사람이 아니라... 내일알려준다고하고 일반론만 이야기하고 끝났었다. 오늘도 점심은 저쪽팀이랑 같이 먹고 저녁때 우리랑 먹으면서 이야기를 했었는데 심심하면 일끝나고 한강한바퀴돌고올래? 했더니 알았다고 해서... 둘이서 ..

전문가를 위한 파이썬 책에서 알아낸 것들..

유용할것 같은 것들 정리. 1. 리스트에서 인덱스로 엘리먼트를 가져오듯이, class에서 __getitem__을 구현해서 인덱스로 가져오게 할 수 있다. len등도 구현 가능하다. 더 찾아보면 많은게 있다. 앞에도 분명 이런글을 썼었던것 같은데... 사실 귀찮아서 안 찾아본듯 싶다. class Deck: def __init__(self): self.cards = [chr(97+i) for i in xrange(10)] def __getitem__(self, index): return self.cards[index] def __len__(self): return len(self.cards) deck = Deck() print 'len = {}'.format(len(deck)) for i in xrange(..

expect

맥이나 리눅스로 작업을 하다 보면 회사등에서 ssh를 이용해서 서버로 접속하는 경우가 많다. 나같은 경우 종종 프로그램이 잘 도는지 특정 서버로 접속을 해야 하는데, 이 과정이 너무 번거롭다. ssh로 0번 서버에 접속 후, 다시 거기서 1번 서버로 접속 후, 다시 거기서 2번 서버로 접속하고, 그 이후에 특정 계정으로 로그인을 한 다음 작업을 시작한다. 종종 작업을 위해 접속하는 날도 있지만 단순히 모니터링을 위해 들어가는 날은 저 일련의 과정이 너무 귀찮다. ssh를 하나하나 치는것도 일이지만 서버 주소가 많다보니 기억을 잘 못해서 매번 페이지에서 찾아서 들어가기 때문이다. 그래서 인터넷에서 자동화 스크립트를 찾아봤다. 자동적으로 ssh로 0번서버, 1번서버, 2번서버로 접속후 특정 계정으로 로그인해..

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