반응형

1. 레디스(Redis) 란?

  • Redis = Re(remote) + di(Dictionary) + s (Server )
  • 메모리를 사용하는 db
  • NoSQL, Replication, Master/Slave 구조로 구성이 가능하다.
  • K/V 형태로 데이터 저장.
  • 파일 싱크를 제공
  • 다양한 데이터 타입 제공
  • NoSQL 이기 때문에 Table, db, function, row, column 이 존재 하지 않는다
  • 데이터 Interaction 이 Command 를 통해서 이뤄진다.

2. 왜 레디스?

  • Simple , Flexible
  • Durable
  • 깃헙, 스냅챗, 트위터, 스택오버플로우 등 다양한 서비스에서 사용중

 

3. Redis 성능 관련

  • 100만개의 키들을 저장할때 70MB 정도 공간이 소모 된다.
  • 100만개 - 70 MB. 1억개 - 약 7GB,
  • HashType은 매우 효과적으로 인코딩된 사전구조로 되어 있어, Redis 코어 개발자중 한명인 Pieter Noordhuis가 추천함
  • HashType 을 이용하여 버킷으로 저장 하는경우 100만 키 - 16MB
  • 데이터를 durable 할 수 있게 파일에 쓰는 옵션이 다양한데, 안전한 옵션일 수록 redis의 속도를 느리게 한다.

 

4. 레디스  구성 ( on Docker)

#네트워크 생성
$sudo docker network create redis-net

#레디스 서버 
$sudo docker run --name my-redis --network redis-net -p 6379:6379 -v /home/deploy/redis_data:/data -d redis:alpine redis-server --appendonly yes


$sudo docker run --name my-redis --network redis-net \
-p 6379:6379 \
-v /Users/jssvs/WorkSpace/docker/redis_data:/data \
-v /Users/jssvs/WorkSpace/docker/redis_data/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis:alpine redis-server /usr/local/etc/redis/redis.conf


#레디스 CLI
$sudo docker run -it --network redis-net --rm redis:alpine redis-cli -h my-redis

sudo docker run -it --rm redis:alpine redis-cli -h my-redis
$vi redis.conf
requirepass 1111  


# redis. conf
#인증 패스워드 설정
requirepass 1111

#스냅샷 파일 저장 디렉토리 경로 설정
dir /data

#스냅샷 db 파일 이름 설정
dbfilename dump.rdb

#AOF 설정 (Append-Only File) OS 레벨에서 맛탱이 갔을 때를 대비해 
appendonly yes

# 60초마다 1000번 이상 데이터 변경 시 저장
save 60 1

 

 

5. 레디스 Client 커맨드 (기본)

인증
>AUTH 1111[PASS]

키 가져오기
>GET [keyname]

키 넣기
>set [keyname] [data]

키 삭제
>del [keyname]

키 스페이스 정보
>info keyspace

키 삭제(플러시)
> flushall
> flushall async

 

6. 레디스 hashset 예제 코드 ( python )

from redis import StrictRedis

r=StrictRedis(host='localhost',password='1111')

user = {"name":"jayden", "Company":"home", "Address":"Suwon","score":60}

r.hmset("jayden", user)

r.hgetall("jayden")
반응형
반응형

Docker 이용하여 mysql, redis 컨테이너 올리기

$ mkdir /usr/local/db_data
$ mkdir /usr/local/redis_data

$ docker pull mysql:8.0
$ sudo docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test --volume /usr/local/db_data/:/var/lib/mysql --name mysql_bi mysql:8  --default-authentication-plugin=mysql_native_password 

$ docker pull redis:5.0
$ sudo docker run -d --name redis_bi -p 6379:6379 --volume /usr/local/redis_data/:/data -e REDIS_PASSWORD=airflow redis:5.0

$ sudo docker ps

virtualenv 설치 및 가상 환경 만들기

# Python 을 이용하여 virtualenv 설치
$ python3 -m pip install virtualenv virtualenvwrapper --user

# 가상 환경 만들기
$ mkdir myenv
$ virtualenv --python=python3.5 myenv

#아래 명령어로도 가능하다
$ virtualenv -p `which python3` venv 

# 가상환경 진입
$ source myenv/bin/activate

#가상환경 빠져 나오기
$ deactivate

airflow 설치 및 서버 동작 스크립트

$ source myenv/bin/activate
$ pip install --upgrade pip
$ pip install pymysql

# airflow
pip install apache-airflow[mysql,redis,celery]==1.10.7

# 에어플로우 홈 설정
$ mkdir myenv/airflow_home
$ export AIRFLOW_HOME=`pwd`/airflow_home # virtualenv 바깥에서도 동일하게 설정

# 에어플로우 데이터베이스 초기화
$ airflow initdb
$ airflow resetdb #load_examples False 가 적용이 안될때 다시 db 리셋

# 웹서버 구동
$ airflow webserver -p 5000
$ airflow scheduler
$ airflow worker

$ airflow flower

 

airflow.cfg 설정 파일 수정

$ vi airflow.cfg

dags_folder = /home/deploy/work/airflow/dags

# The folder where airflow should store its log files
# This path must be absolute
base_log_folder = /home/deploy/work/airflow/logs

# executor = SequentialExecutor
executor = CeleryExecutor

# sql_alchemy_conn = sqlite:////home/airflow/airflow/airflow.db
sql_alchemy_conn =  mysql+pymysql://airflow:airflow@127.0.0.1:3306/airflow

# catchup_by_default = True
catchup_by_default = False

# broker_url = sqla+mysql://airflow:airflow@127.0.0.1:3306/airflow
broker_url = redis://airflow@127.0.0.1:6379/0

# result_backend = db+mysql://airflow:airflow@localhost:3306/airflow
result_backend = db+mysql://airflow:airflow@127.0.0.1:3306/airflow

# load_examples = True
load_examples = False

 

airflow 자주 쓰는 커맨드

# print the list of active DAGs
airflow list_dags

# prints the list of tasks the "tutorial" dag_id
airflow list_tasks jayden_tutorial

# prints the hierarchy of tasks in the tutorial DAG
airflow list_tasks jayden_tutorial --tree


# command layout: command subcommand dag_id task_id date
$ airflow test jayden_tutorial print_date 2020-03-02

 

다음에는 Hive Operator 연동을 올리겠다. :D 

반응형
반응형
  •  GoogleCloud SDK
    • GoogleCloud 서비스에 필요한 커맨드를 제공한다.
  • 설치방법(Linux)
  • bq 
    • $ bq load --nosync --autodetenct [projectId]:[datasetId].[tableName] [버킷/파일경로] [테이블 스키마]         
    • --autodetect          //자동스키마타입
    • --skip_leading_rows=1         //헤더라인 스킵
    • --nosync          //비동기 방식
    • 테이블 스키마
      • [{"name":"name","type":"string","mode":"nullable"}]
      • 타입은 소문자만 허용
      • csv-gz 포맷일 경우 타입의 순서도 중요
    • $ bq shell           //대화형 모드
    • $ bq mk [dataset 이름]
    • $ bq query "[쿼리]"
  • gsutil
    • $ gsutil ls  gs://nmlog/
    • $ gsuil du gs://nmlog/
    • $ gsutil cp -m [파일] [gs경로]
    • -m           //병렬로드 옵션
  • gcloud
    • $ gcloud auth login          //구글 클라우드 계정 로그인
    • $ gcloud projects list         //프로젝트 리스트
    • $ gcloud auth list                   //계정 리스트

 

반응형

+ Recent posts