Elasticsearch Update API로 Document 교체하기

Elasticsearch 는 기본적으로 Update API를 통해 요청하면 요청한 필드만 딱 업데이트한다.

그런데 종종 문서를 교체해야하는 일이 있다. update문서를 보면 문서의 Replace를 원하는 경우 Index API를 이용하라고 가이드 되어있다.

To fully replace an existing document, use the index API. update 문서참고

하지만 Index API는 만약 기존 문서가 존재하지 않으면 새로 생성해버리는 문제가 있다. 만약 기존 문서의 교체 만을 원한 것이라면 이게 문제가 된다. 기존 문서 교체를 원해서 index api를 날렸는데 실수로 id를 다르게 적었다면, 내가 교체하려는 문서는 그대로 있고 새로운 id에 문서가 생성되는 상황이 발생한다.

Amazon Linux 2에 Airflow 설치하기

당연히 쉽게 될줄 알았던 airflow 설치에 꽤 애를 먹었다. 구글링을 해봐도 명확한 가이드가 나오질 않아서 내가 성공한 설치 방법을 공유한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# 의존성 설치 (가이드 상에는 python3, gcc, gcc-c++ 정도만 설치하면 된다는데 그렇게만 하면 자꾸 에러가 난다. gcc를 실행을 못한다든지...)
$ sudo yum update -y
$ sudo yum install group "Development tools" -y
$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel python3-devel.x86_64 cyrus-sasl-devel.x86_64 -y
$ sudo yum install libevent-devel -y

# 드디어 airflow를 설치. 여기에서 sudo를 생략하면 권한문제가 발생한다.
$ sudo pip3 install apache-airflow

# 위의 과정을 마쳤으면 여기서부터는 공식 가이드 그대로.
$ airflow initdb
$ nohup airflow webserver -p 8080 > webserver.out &
$ nohup airflow scheduler > scheduler.out

다른 OS에서는 확인을 못해봤고 Amazon Linux2가 올라간 EC2에서는 정상적으로 작동된다. (2020.1.8 기준)

문제 해결: Cannot Call methods on a stopped SparkContext

스파크로 이것저것 테스트해보기 위해 zeppelin을 사용하는데 갑자기 이런 에러가 발생했다.

java.lang.IllegalStateException: Cannot call methods on a stopped SparkContext.

즉, 지금 사용하려는 SparkContext가 이미 종료되었다는 것이다.

이걸 구글에 검색해도 ‘로그를 봐라’ 라는 식의 원론적인 답변이 나와서 헤매다가 해결방법이 떠올랐는데…

해결 방법

그냥 스파크 인터프리터를 재시작하면 된다.

스파크에 대한 아주 대략적인 정리

빅데이터를 공부해야할 일이 생겨서, 하둡을 먼저 공부했다. 쌩으로 클러스터를 만들고, 설정값을 변경해보고… 그렇게 클러스터를 만드는 일부터 맵리듀스 어플리케이션을 만드는 일까지 공부하는게 쉽지만은 않았다. 여기서 약간 빅데이터의 벽(?)같은걸 1차로 느꼈다.

그러다가 스파크를 만났다. 공부하다 보니 스파크가 그렇게 어렵지도 않고, 그런데 활용성은 굉장히 좋고, 성능도 좋다는 생각이 든다. 여기서 포인트는 그닥 어렵지 않다는 점이다. 자료들이 주로 scala라는 생소한 언어로 설명이 되어있지만, scala가 별로 어렵지 않다. 언어자체가 직관적이면서 간결하다. 그리고 scala로 배우는 스파크도 그닥 어렵지가 않다. 많은 기능을 제공하고 좋은 성능을 제공하지만, 기능들의 추상화가 잘 되어있어서 단순히 api만 호출하면 된다.

이거 사긴데? 쉽고 빠른 빅데이터 처리 엔진이라니…

그 동안 하둡을 공부하면서 느낀 어떤 답답함 같은게 해소되는 느낌이랄까. 맵리듀스를 짜면서 뭔가 병렬처리로 성능이 향상된다는건 알겠는데 코드 작성이 상당히 번거로웠다.(책에는 간단하다고 나와있는데 원리야 간단하지만 코드짜는건 안간단함 ㅇㅇ) 물론 하둡에는 맵리듀스 외에도 빠르게 분석할 수 있는 엔진들이 있지만, 그 중에 스파크가 가장 매력적으로 보인다.

[Python] 파이썬으로 간단한 테스트 데이터 생성하기 (csv)

테스트를 위한 데이터가 필요해서 데이터를 만들어야 할 때가 있다. 적은 양의 데이터는 수동으로 일일히 만들수도 있지만 데이터 양이 많아지면(1000건만 넘어가도…) 하나씩 만드는 건 너무 노가다.

그럴 때 데이터가 복잡하지 않고 단순한 구성일 경우에는 파이썬을 이용해 간단하게 생성할 수 있다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×