everydayminder
Hive - Queries against partitioned tables without a partition filter are disabled for safety reasons 에러 처리 Hue에서 쿼리를 실행했는데, 위와 같은 에러가 발생한다면? 분명 Zeppelin에서 동작하는 것을 확인했는데, Hue에서만 안된다면 Zeppelin에서만 써야 할까? 만약 Hive 쿼리를 실행했는데, 위와 같은 에러가 발생한다면, 사실 에러 문구 속에 해결책이 잘 설명되어 있다. 에러 메시지 샘플 Error while compling statement: FAILED: SemanticException Queries against partitioned tables without a partition filter are..
Redis pub/sub 소개 일반적인 pub/sub의 개념에서 알 수 있듯이, 메시지를 보내는 publish와 그 메시지를 수신할 수 있는 subscribe를 말한다. Kafka와는 달리, Redis에서는 subscribe가 된 상태의 클라이언트만 publish되는 메시지를 받을 수 있다. 쉽게 생각하면, Youtube 채널 구독과 비슷하다. 구독과 좋아요를 누르면, 나중에 새로운 글이 올라오면 노티가 올텐데, 구독중인 상태의 채널에 신규 콘텐츠가 올라오면 노티를 받을 수 있는 것과 같다. 명령어 Redis 서버를 매개로, Redis 클라이언트간 통신을 도와줌 Redis 클라이언트는 Redis 서버내 "채널"을 생성함 메시지를 수신하고 싶은 클라이언트는 사전에 해당 채널을 subscribe 함 메시지를..
개요 지리정보 관련 기능의 일부를 Redis에서도 간단하게나마 쓸 수 있다. 명령어 GEO 계열의 명령어도 있지만, 내부적으로 ZSet(Sorted Set)을 사용하기에 ZSet 계열 명령어도 일부 혼용 가능하다. GEOADD 127.0.0.1:6379> help geoadd GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...] summary: Add one or more geospatial items in the geospatial index represented using a sorted set since: 3.2.0 group: geo 한 개 혹은 동시에 여러 개의 정보를 추가할 수 있다. 127.0.0.1..
개요 이름에서 유추할 수 있듯이, Redis(레디스)에서 제공하는 자료 구조 중, Set과 비슷하면서도 차이점이 있는 자료 구조다. 값 자체의 중복을 허용하지 않지만, 정렬을 해주는 자료 구조이다. 정렬의 기준을 score라고 한다. 명령어 Redis - Hash에서의 예와 같이, 사용자들의 데이터를 Redis 상에서 정렬하거나 업데이트 하는 예제로 접근해 보자. 앞서 다뤘던 것과 비슷하게 해볼텐데, 이번에는 사용자의 점수(포인트)로 순위를 관리하는 예로 접근해 보고자 한다. user[0].point = 100 user[1].point = 200 user[2].point = 50 등과 같이 사용자별로 포인트가 관리되는 상황을 가정해볼 수 있을 것이다. User들의 point를 모아서 순위를 매긴다면 프로..
개요 마치 RDBMS에서의 테이블과 같은 형태를 저장하는데 유용한 구조이다. RDBMS의 테이블은 PK외 Secondary Index로도 조회를 하지만, PK 기준으로 데이터를 액세스 해야 한다는 점이 다르다. 또한, 스키마가 RDBMS의 경우는 고정형이지만, Redis의 Hash는 비고정형이며 이를 schemaless라고 한다. 따라서, RDBMS의 테이블 alter는 굉장히 무거운 작업이지만, Redis의 Hash는 그렇지 않다. 따라서, User 데이터를 저장한다 하더라도, RDBMS 테이블과 달리 데이터마다 설정된 필드들의 수가 다를 수도 있다. 명령어 Redis가 지원하는 Hash 관련 기능은 아래와 같다. RDBMS 테이블의 값을 설정하는 방식과 비교하면서 상상해 보자. 어떤 온라인 쇼핑몰의 ..
개요 프로그래밍 언어에서 어떨 때 set을 사용할까? 주로 중복을 제거하거나, 말 그대로 집합 연산(포함여부 및 합집합/교집합 등)을 해야할 경우에 사용할 것이다. Redis에서도 이러한 연산을 지원한다. 명령어 Redis가 지원하는 집합 연산 기능은 아래와 같다. SADD 127.0.0.1:6379> help sadd SADD key member [member ...] summary: Add one or more members to a set since: 1.0.0 group: set set에 아이템을 추가한다. // 여러 아이템을 set에 추가 127.0.0.1:6379> sadd s1 e1 e2 e3 (integer) 3 127.0.0.1:6379> smembers s1 1) "e2" 2) "e3"..
개요 Redis에서 List는 여러 개의 데이터를 저장하기 위한 자료구조이다. 쉽게 생각해서 Linked List를 생각하게 될텐데, 지원하는 기능을 바탕으로 보면, 오히려 Dequee(Double Ended Queue)에 가깝다. Qeueue의 인터페페이스와 Stack의 인터페이스를 동시에 지원하기 때문이다. Stack 혹은 Queue의 말단 연산은 비용이 닞지만, 중간 데이터를 처리하는 연산은 비용이 상대적으로 높다. 따라서, 내가 수행해야 하는 오퍼레이션의 종류 및 데이터 성격이 어떤지 알고 쓰면 좋을 것이다. 명령어 List가 제공하는 전체 명령어 중 주요 기능은 아래와 같다. LRANGE 127.0.0.1:6379> help lrange LRANGE key start stop summary: G..
개요 Redis에서 기본적으로 문자열, 숫자를 저장할 때 사용하는 자료구조이다. Key와 Value 모두 최대 길이가 512MB이다. 그렇다고, Key를 표기할 때 과다하게 길이가 길면 메모리 낭비가 발생한다. 프로그램내에서만 사용하는 로컬변수가 아니라, 여러 서비스에서 공통으로 사용하는 공간인 만큼, Key를 부여할 때, 적절한 가시성과 구분자를 섞어서 쓰는 편이 좋을 것이다. (예: "user_service:member:status") 명령어 주로 어떤 값을 설정하고, 조회하는 용도가 대부분이다. 특히 숫자형 데이터라면 증/감의 오퍼레이션도 지원된다. set 127.0.0.1:6379> help set SET key value [EX seconds|PX milliseconds|EXAT timestam..
개요 In-Memory Data Store 관점에서 Memcached냐 Redis냐를 두고 저울질 하는 광경을 종종 보곤한다. 이에 두 솔루션을 비교 정리해 놓는다. 주요 특징 비교 두 솔루션 모두 NoSQL로 분리되고, 크게는 In-Memory 솔루션, 캐시 솔루션으로 인식되고 있다. 그러나, 아래 표에서 보는 바와 같이 지원하는 기능에 차이가 있다. 항목 Memcached Redis 데이터 분할 O O 다양한 데이터구조 지원 X O Mutli Thread/ Single Thread Multi Thread Single Thread 데이터 저장 (persistence/ snapshot) X O 데이터 복제 (replication) X O 트랜잭션 지원 X O Publisher/Subscriber X O ..
개요 Redis는 Remote Dictionary Server를 뜻한다. Redis는 대표적인 In-Memory data store 솔루션 중 하나로 꼽히는데, 특히 Memcached와 종종 비교되곤 한다. 그러나, Redis는 Memcached와는 달리 다양한 데이터 타입을 지원하여 보다 다양한 분야의 요구사항을 충족시키고 있다. Redis는 분산 Key-Value Store, 캐시서버, 메시지 브로커 등으로도 활용되기도 한다. Redis 지원 Data Type들 Redis에서 주로 쓰이는 데이터 형은 String, List, Set, ZSet(Sorted Set), Hash가 있다. String 문자열, 정수, 소수를 저장한다. 문자열 전체 혹은 부분을 다룬다. 정수와 소수를 증감한다. List St..
Avro란? Avro는 데이터 직렬화와 관련된 시스템이다. 한국 개발자들은 /에이브로/라고 발음하곤 하지만, 외국 개발자 커뮤니티에서는 주로 /아브로/라고 발음하고 있다. Avro는 JSON 형태로 기록한다. 따라서, Avro는 스키마를 표현하는 JSON이라 생각할 수 있다. Avro의 장단점 장점 데이터의 타입을 알 수 있다. 데이터가 압축되어 효율성이 높다. 스키마에 설명을 포함하여 구조를 이해하는데 도움을 줄 수 있다. 데이터를 여러 언어로 액세스할 수 있다. 향후 스키마 변경에 유연하게 대응할 수 있다. (schema evolution) Hadoop 계열과 궁합이 좋다. Confluent Schema Registry에 쓸 수 있다. (유일) 단점 바이너리 형태로 직렬화(serialize) 되므로 ..
Redis 설치 방법 세 가지 본 글에서는, Redis를 설치하는 여러 방법을 다룬다. 운영환경용이라기 보다 로컬 개발환경에 설치하는 목적이다. Redis 공식 사이트 https://redis.io/download Redis *Download Stable releases liberally follow the usual major.minor.patch semantic versioning schema. *Other versions Old (6.0) Redis 6.0 introduces SSL, the new RESP3 protocol, ACLs, client side caching, diskless replicas, I/O threads, faster RDB loading, ne redis.io Redis ..
Docker에 Spark Cluster 설치하기 Baremetal 서버나 cloud, VM 등에 설치하기에 앞서, docker기반으로 spark cluster 환경을 빨리 쉽게 구축하고 사용할 수 있다. 어떻게 동작하는지 살펴보거나, 간단한 프로젝트를 하고자 한다면 나쁘지 않은 선택이 될 것이다. Spark Cluster Project 받기 인터넷에서 다음의 프로젝트를 받아서 설치한다. git clone https://github.com/big-data-europe/docker-hadoop-spark-workbench.git Spark Cluster 시작하기 위 프로젝트를 clone한 디렉토리에서, 다음과 같이 실행하면 프로젝트내 기술된 docker-compose.yml을 바탕으로 spark cluste..
Airflow Local 설치 (OSX) 예전에는 실행하고자 하는 job들을 crontab으로만 구성하였으나, 이제는 rundeck, oozie, airflow 등 많은 툴들이 사용되고 있다. 이와 같은 툴들은 각 job들의 실행 순서를 정의하고, 언제 실행될지, 실행시간이 얼마나 걸리는지 등에 대한 정보도 제공하기 때문에 유지보수나 관리, 성능개선 트래킹 관점에서도 crontab과는 비교할 수 없을만큼 유용하다. AirFlow의 공식 사이트는 https://airflow.apache.org/ 이다. 다른 어떤 문서보다 공식사이트내 설치, 설정 활용 등에 대한 가이드를 먼저 참고하는 것이 좋다. pip로 airflow를 설치할 것이므로, 다음과 같이 pip를 설치한다. 예전 설치 방식 sudo easy_..
brew가 실행가능하도록 설정되어 있다는 전제하에 brew install apache-zeppelin 위와 같이 간편하게 zeppelin을 설치한다. alias 설정 실행 편의를 위해, 다음과 같이 alias를 선언한다. which zeppelin.sh 로 zeppelin 설치 위치를 확인하고, alias zeppelin-start="/usr/local/bin/zeppelin.sh start" alias zeppelin-stop="/usr/local/bin/zeppelin.sh stop" 과 같이 본인이 사용하는 shell에 등록한다. Zeppelin 실행 zeppelin을 실행하려면, java runtime이 설치되어 있어야 한다. zeppelin-start Zeppelin 종료 zeppelin-sto..