Data

[1028 from 실무로 배우는 빅데이터 기술 By 김강원 14]redis

 

radis http://www.radis.io/
Remote Dictionary Server
1. 분산 캐시 시스템
2. NoSql 처럼 Key -Value 관리. ::: 분산서버 메모리 저장, 고성능 응답속도
3. Hbase 와 달리. 대규모 메시지데이터중 특정 데이터를 저장함. 
라이센스 BSD
유사프로젝트 jBoss Infinispan, MemCahshed, Mambase
주요
구성요소
Master 분산 노드 간의 데이터 복제와 Slave서버의 관리를 위한 마스터 서버
Slave 다수의 Slave서버는 주로 읽기 요청을 처리하고, Master서버는 쓰기 요청을 처리. 
Sentinel 레디스 3.x부터 지원하는 기능으로 Master 서버에 문제가 발생할 경우 새로운 Master를 선출 하는 기능
Replication Master서버에 쓰인 내용을 Slave서버로 복제해서 동기화 처리
AOF/Snapshot 데이터를 영구적으로 저장하는 기능으로, 명령어를 기록하는 AOF와 스냅샷 이미지 파일 방식을 지원. 
아키텍처




Sentinel. 
3.x Master 장애시. SPOF(Single point of failure) 모니터링 하고 있다 마스터 장애시 슬래이브중 하나 마스터로 선출. 
활용방안 운행자로그 400KB/초
-> 플럼 -> 카프카->스톰 
스톰-> HBase(HRegionServer (HRegion(Driver Info1,2...)))
스톰-> 레디스(Master 과속 Driver1, 2...N)
>> 과속한 운전자의 실시간 운행정보 적재
>> 과속한 운전자의 운행정보를 빠르게 검색 및 조회 .  

요구사항-> 아키텍처 -> SW -> 활용하는 비지니스 이해. 
레디스 설치 CM에서 radis 설치지원안함. 
1. 서버2 root계정으로 gcc, tcl 설치.  완료시 "Complete!"
$yum install -y gcc*
$yum install -y tcl


* 상기 에러시. 
$rm /etc/yum.repos.d/cloudera-manager.repo
echo "https://vault.centos.org/6.10/os/x86_64/" > /var/cache/yum/x86_64/6/base/mirrorlist.txt
echo "http://vault.centos.org/6.10/extras/x86_64/" > /var/cache/yum/x86_64/6/extras/mirrorlist.txt
echo "http://vault.centos.org/6.10/updates/x86_64/" > /var/cache/yum/x86_64/6/updates/mirrorlist.txt

2. 레디스5.0.7 설치
$cd /home/pilot-pjt
$wget http://download.redis.io/releases/redis-5.0.7.tar.gz

$ tar -xvf radis-5.0.7.tar.gz

$cd /home/pilot-pjt/redis-5.0.7
$make
$make install
$cd /home/pilot-pjt/redis-5.0.7/utils
$chmod 755 install_server.sh                      실행권한. 
마지막으로 인스톨 스크립트실행 엔터키
$./install_server.sh
인스턴스의 포트, 로그, 데이터 파일 설정값 위치 정보물어봄 그대로 유지 엔터. 
설치 확인 서버 기동여부 확인
vi /var/log/radis_6379.log


설치 점검
cd /home/pilot-pjt/redis-5.0.7/utils


$service redis_6379 status



레디스 서비스 시작/종료하는 명령
시작 
$service redis_6379 start
$service redis_6379 stop
원격접근 설정
1. 바인딩 ip제한해제
# bind 127.0.0.1
2. 패스워드 입력 해제
#protected-mode yes

protected-mode no

3. 재시작
service redis_6379 restart
레디스 CLI $redis-cli
$set key:1 Hello!Big
$get key:1
$del key:1
$quit
레디스 볼트 
: 레디스 캐시에 전송

레디스 데이터 전송, 제디스 클라이언트. 

#JedisPoolConfig >> 레디스 클라이언트 라이브러리 
String redisServer = "server02.hadoop.com";
int redisPort = 6379;
JedisPoolConfig jedisPoolConfig = new JedisPoolCongig.Builder().setHost(redisServer)/
setPort(redisPort).build();

RedisBolt redisBolt = new RedisBolt(jedisPoolConfig);

driverCarTopologyBuilder.setBolt("REDIS", redisBolt, 1).shuffleGrouping("esperBolt");

String date = input.getStringByFiled("date");
String car_number = input.getStringByFiled("car_number");

JedisCommands jedisCommands = null;

jedisCommands = getInstance();
jedisCommands.sadd(date, car_number);
jedisCommands.expire(date, 604800); #7일


public void run(){
    Set<String> overSpeedCarList = null
    int cnt =1;
    try{
        while(true){
            overSpeedCarList = jedis.smembers(key);
            if(overSpeedCarList.size()n > 0){
                for(String list : overSpeedCarList){
                    System.out.println(list);
                }
                jedis.del(key);
            } else {
                System.out.println("\nEmpty Car List .... \n");
            }
        }
    } 
}


-----------------------------------------------------------------------------

public  class RedisBolt extends AbstractRedisBolt {

private static final long serialVersionUID = 1L;

public RedisBolt(JedisPoolConfig config) {
super(config);
}

public RedisBolt(JedisClusterConfig  config) {
super(config);
}


@Override
public void execute(Tuple input) {

String date = input.getStringByField("date");
String car_number = input.getStringByField("car_number");

JedisCommands jedisCommands = null;

try {

jedisCommands = getInstance();
jedisCommands.sadd(date, car_number);

jedisCommands.expire(date, 604800);

} catch (JedisConnectionException e) {
throw new RuntimeException("Exception occurred to JedisConnection", e);
} catch (JedisException e) {
System.out.println("Exception occurred from Jedis/Redis" + e);
} finally {

if (jedisCommands != null) {
returnInstance(jedisCommands);
}
this.collector.ack(input);
}
}

@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
}
}
   
   

Replication 사본

Sentinel 보초병, 감시병

실시간데이터

1. 마켓팅

2. 리스크 관리

- FDS(Fraud Detection System) : 사기방지 시스템

- 개인/기업 예측

- 해커 공격 

- 투자, 펀드