'Streaming API'에 해당되는 글 1건

현재 빅데이터 학습을 위한 전초 단계로 '빅데이터'를 만드는 작업을 진행 중이다.

개인의 자격으로 거대 규모의 데이터를 만들어내기란 여간 어려운 것이 아니다.

때문에 일단 의미 있는 분석이 가능한 데이터를 어느 정도 선까지 모으는 것을 목표로 하고 있다.

현재 목표로 하고 있는 것은 대략 100Gb선이다.


그래서 선택한 것이 트위터의 트윗들이다.


특정 키워드로 검색을 했을 경우 검색되는 트윗들을 모아보기로 한 것이다.

이를 분석하면 검색어로 사용된 특정 단어에 대한 분석이 어느정도 가능하지 않겠냐는 판단에서 내린 결정이다.


그래서 Twitter API를 이용하여 작업을 진행 중인데

처음엔 시행착오가 좀 있었다.


우선 기존에 사용해본 적이 있는 REST API 중 search API를 이용하여 데이터 수집을 진행하였다.

그런데 REST API는 한계가 있었다. 기존에 축적된 모든 트위터의 데이터가 대상이 아닌 것이었다.

6~7회 시도를 해 본 결과 대략 1주일치 분량의 데이터를 얻을 수 있었을 뿐 그 이전의 데이터는

가져올 수가 없었다. 1주일 분의 데이터라 해도 약 60~70Mb 정도의 파일 크기가 된다.

게다가 특정 날짜까지의 데이터를 불러오는 옵션이 있는데 계속해서 데이터를 축적하기 위해서는

매일 한 번 정도는 이 날짜를 가장 최근 날짜로 변경을 해야 하고 그렇게 쌓인 파일에는 중복되는

데이터가 거의 대부분이라는 문제가 있었다.


그래서 구글링을 한 결과 REST API 말고 Streaming API라는 것이 있다는 것을 알았다.

REST API가 배치성이라면 Streaming API는 리얼타임이다. 즉 실시간으로 올라오는

트윗 데이터들을 네트워크가 끊기기 전까지 지속적으로 가져오는 것이다. 


타임라인의 데이터를 가져오는 것은 Public stream이라고 하고 여기에는 3가지 옵션이 있다.

각각은 다음과 같다.



이 중 firehose는 상업적 용도로써 이를 이용하기 위해서는 Twitter사와 계약을 맺어야 하고
또 이용료 또한 엄청 비싸다고 한다. 대부분 데이터 리셀러들이 이용을 하고 있는 듯하다.

결국 개인이 사용 가능한 것은 filter나 sample인데 이 API들을 이용해서 가져올 수 있는 데이터의 양은
firehose의 1% 수준이라고 한다.

결국 filter API를 이용해서 데이터를 가져오기로 하고 filter API가 구현된 PHP 소스를 입수하여
데이터 수집을 시작하였다.

그런데 여기도 문제가 있었으니...
리얼타임인데다가 특정 키워드에 대한 내용만 가져오는 것이다보니 데이터 수집 속도가 매우 느리다.
REST API의 search를 이용할 경우 약 하루 하고 반나절 정도면 60~70Mb정도의 데이터가 쌓이는 반면
Streaming API의 filter를 사용하였더니 3일하고도 16시간 정도 지난 현재 겨우 19Mb 정도의 데이터가 쌓였을 뿐이다. 이래가지고 어느세월에 100Gb를 만드나...ㅠ.ㅠ

업친데 덥친 격으로 오늘 아침에 확인을 해보니 어제 오후 6시경부터 401 Unauthorized 에러가 발생을 하여
데이터 수집이 멈춘 상태였다. 다시 실행을 해보아도 계속 401 에러만 발생을 한다.

역시 구글링을 통해 확인한 결과 트위터 서버와의 시간이 안맞아서 생기는 문제란다.
우선 다음 명령어를 터미널에 입력하는 것으로 해결은 되었다.

mazdah$ sudo ntpdate ntp.ubuntu.com

일단 다시 재가동은 되었지만 어느 세월에 충분한 데이터를 쌓을지가 여전히 문제다...
그냥 매일 search를 돌려서 재가공을 해야 하는 것이 더 빠를 것 같도 하고...

그저 현재는 다른 작업도 밀려있으니 잠시 더 기다려 볼 뿐이다...

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^