티스토리 뷰
마침 빅데이터 강의 과제를 하는 도중에 재미있는 주제가 있어서 한번 소개해보고자 한다.
미국 Florida에 보면 흔히 잘 알고 있는 NASA 우주센터가 있다. 그런데 사실 여기는 우주에 관해서만 연구하는 장소만 있는게 아니라 WWW 서버가 있는 곳이기도 하다. 다시 말해 미국에서 인터넷 연결을 되어 있는 곳이라면 이 서버를 거쳐서 원하는 정보를 주고 받게 되는 것이다. 당연히 이 서버로 들어오는 정보는 사용자가 어디로 request를 하는지, 최종적인 목적지(endpoint), 그리고 그 페이지를 접속했을 때 받은 request code 등이 있겠다. (이 모든게 HTTP 프로토콜 안에 정의되어 있다.) 물론 이 정보를 활용하게 된다면 사람들이 어떤 페이지에 많이 접속하는지, 혹은 어떤 페이지에 접근했을 때 연결성이 좋은지, 또는 어떤 페이지에 스파이웨어가 있다던지 같은 새로운 정보로 가공할 수 있게 될 것이다.
문제는 이렇게 가공하고자 하는 데이터를 만들기 위해서는 그만큼 많은 데이터가 필요하고, 이걸 개인용 데스크탑으로 처리하기에는 한계가 있다는 것이다. 그래서 이런 정보를 처리하는데 Apache Spark와 같은 분산 처리 시스템을 쓸 수 있다는 것을 보여주는게 이번 강의 과제의 목표였다. 참고로 예제로 사용한 데이터는 NASA-HTTP라고 이름 붙여진 정보를 사용했고, 여기에는 1995년 8월 한달동안 수집된 정보를 담고 있었다. 이 데이터에 관심있는 사람은 한번 여기에 들어가보길..
아무튼 내부적으로는 Scala나 Python을 쓸 수 있는데, 강의에서는 주로 python을 쓰면서 pySpark에서 제공하는 API를 이용해서 진행한다. 물론 scala도 하려면 할 수 있겠지만, python이 조금더 모르는 사람이 배우기엔 쉽고, 적용하는 면에서의 이점에서 선택한게 아닌가 싶다. 사실 내가 생각하기에 이런 언어들이 분산처리에 쓸수 있었던 이유는 바로 lambda expression을 지원해서가 아닐까 싶다. 거창하게 말하기는 좀 뭐하지만, python이나 scala는 lambda expression을 통해서 쉽게 pattern matching을 하고 그 데이터를 map()같은 걸 써서 데이터를 정리할 수 있다. 잠깐 예를 들면 다음과 같은게 있다.
이 코드르 만드는 사람이 Spark를 통해서 수집하는 데이터의 타입만 알고 있으면 그 데이터를 다시 정리해서 또 처리할 수 있다는 것이다. 첫번째로 나온 코드는 수집되는 데이터가 (key, value)의 형태로 들어오는 일종의 tuple인 것을 알고 있고, 그 중에서 key 값만 따로 빼서 list로 만드는 코드가 되겠다. 두번째로 나온 코드 역시 첫번째와 같이 받은 데이터 중 y값을 이용해서 다시 list로 정리하는 게 되는데, 이걸 C로 하려면 일일이 데이터가 어떤 타입인지 분석하고, 이걸 for loop를 돌리던지 MPI를 써서 병렬로 처리하던지 해서 패턴 매칭을 하는 등 조금 복잡한 과정을 거쳐야 한다. 하지만 이런식으로 쓰게되면 그냥 딱 한줄만 가지고 이런 정보 처리를 병렬적으로 쉽게 할 수 있다는 것이다.
이런게 실제로 돌아가는지를 확인해보려면 sparkshell이라는 것을 확인하면 된다. 이걸 통해서 어떤 task가 얼마나 돌았고, 왜 실패했는지에 대한 이유도 알 수 있다.
아무튼 이런 기능들을 잘 활용하면 다음과 같은 것을 처리할 수 있다.
어차피 이 모든게 하나의 텍스트 형식으로 전달되다보니 parsing을 통해서 fail이 나는 부분도 찾을 수 있고,
이런식으로 전체 request 중 어떤 code를 나왔는지의 분포도 알 수 있다. 참고로 ipython notebook 내에서는 위와 같이 matplotlib을 사용해서 데이터도 시각화 할 수 있다. 이 부분이 분산처리와 관련이 있는건 아니지만 그래도 일반 사람에게 데이터 정보를 전달할때 있어서 이런 시각화 요소도 중요하다는 건 말할 필요가 없다.
앞에서 말했던 것처럼 access fail이 발생하는 웹 페이지 중 상위 10개만도 추출 할수 있고,
매일 접근하는 Host의 수, 시간당 평균 접속수, 404 Error가 발생하는 페이지 수도 정보를 가공해서 위와 같이 그래프로 출력할 수 있다.
이제 이 툴을 써본지 딱 2주가 지났고, 아직도 apache spark의 동작원리가 확실하게 잡힌 건 아니지만, 하나씩 써보면서 "우와 이런것도 되는구나" 하면서 하나씩 배워나가고 있다. 특히 python을 이용해서 과제를 하다보니까 그만큼 언어 접근에 대한 어려움도 없고, 그만큼 시간도 절약할 수 있는 듯하다. 주변에서도 이 강의를 듣는 사람도 있고, 블로그 중에도 spark와 관련해서 개발 이야기를 하는 곳이 있는데, 잘 찾아보고 좀 더 다른 영역으로 활용해보면 좋을 거 같다.
'Study > AI' 카테고리의 다른 글
[R] Basic DataType (0) | 2015.08.06 |
---|---|
[ML] Million Song Dataset (0) | 2015.07.26 |
[Big Data] Data Cleaning & Integration (0) | 2015.07.26 |
[Big Data] Apache Spark를 이용한 과제 수행 (0) | 2015.06.06 |
[R] Generate Heatmap using ggmap (0) | 2015.05.24 |
[MOOC] Tackling the challenges of Big data (0) | 2015.05.07 |
[Machine Learning] Watson in Jeopardy (0) | 2015.04.11 |
- Total
- Today
- Yesterday
- Variance
- 파이썬
- PowerPoint
- Offline RL
- TensorFlow Lite
- ColorStream
- windows 8
- 딥러닝
- Policy Gradient
- processing
- Expression Blend 4
- 한빛미디어
- bias
- Kinect SDK
- DepthStream
- Windows Phone 7
- arduino
- Distribution
- reward
- dynamic programming
- Off-policy
- Gan
- SketchFlow
- ai
- Kinect for windows
- 강화학습
- Pipeline
- End-To-End
- RL
- Kinect
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |