HBase & Hive

Hadoop 2017. 11. 14. 17:35

HBase는 ByteArray 베이스의 NoSQL이면서 [Columnal DBMS임]    RefY

  - MemStore와 HFile에 저장. 

  - Bloom Filter라는게 HFile마지막에 저장되면서 속도를 냄. (옵셔널)

  - ColumnFamily라는 개념이 존재. (prefix맞춰서 columnFamily로 만들면.., 자동으로 timestamp같은게 기록된다고라)

         sameID:  (cf:name  timestamp value=kim)
         sameID:  (cf:score timestamp value=50)    내부적으론 이런식으로 dup해서 기록된다고 하네요.. 흠. REFY

     ColumnFamily는 저장소 분리 및 압축에 사용됨. (유사한 type들을 모아놓아야 columnFam단위로 압축이 되거나 안되거나 함)

  

  - extremely Low Latency & Low time delay.. 

  - MapReduce와는 별도로 실행도 가능하고, 동시에 실행도 가능하다. (not mutually exclusive)


  실행) $sudo /etc/init.d/hadoop-hbase-master start

 

 ====hbase shell=============

         $hbase shell

           hbase> list   (ALL hbase Table listing)

           hbase> desc 'MY:TABLE' 

           hbase> scan 'MY:TABLE'   ( log라는 테이블 전체 조회)

           hbase> 


         

설계 룰: 

  - 가능한 적은 table을 만든다

  - up front디자인에 많은 시간 투자!

  - data loading은 최소한으로 한다.(모아서)   


(Java API 지원)

   Put = new Put()

   Get = new Get()




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

Hive 은 ETL(Extract, Transform, Load) 툴.-> query타임이 중요치 않을때 사용

Hbase 는 온라인 access가 가능한 DB. -> query타임이 중요할 때 사용.


hive 예제. $hive 이후에   REFY

         hive> add jar file:///usr/lib/hive-0.13.1-bin/lib/hive-contrib-0.13.1.jar;

         hive> load data inpath 'hdfs:/wiki-access.log'

         hive> select * from access;


                   ㅁ hBase/hive mapping된 테이블 생성

         

                                                          hive에는 hbase_table_access테이블을,  hbase에는 log테이블을 생성. 

Posted by yongary
,

hortonworks sandbox

Hadoop 2017. 11. 8. 17:31


실습REF   REF

===> hadoopexam.com 에 가면 각종 예제 많이 있음.

        아, 그리고 windows의 경우 BIOS셋업에서 Virtual Technology를 Enable시켜야 하는 경우 있음. 



hortonworks의 sandbox는  HDP(hortonworks Data Platform) 및 관련된 sw들이 모두 다 설치되어 있는 VM으로서

다운로드 받아서 VirtualBox같은 환경에서 실행만 하면  HDP의 모든 서비스를 바로 사용할 수 있다.


(용도는 test용일까, 상용일까?   상용도 가능하겠지요.. 이부분 공부 중.)



centOS환경으로 제공되며, 실행후에는

localHost와 여러 포트가 portMapping이 되어 있으므로


http://localhost:8888  or 8080(Ambari)  (maria_dev/maria_dev) 등으로 바로 실행가능하고, 

ssh root@localhost -p 2222  (root/hadoop)  로 접속도 가능하다.





Posted by yongary
,

Spring web Reactive

Spring 2017. 10. 30. 22:52

(spring에서 reactive 가능한 방식들)


1.  DeferredResult +  RxJava  + CompleteFuture   Ref


2. webFlux  using Mono or Flux 


===================================================

infoQ_lecture Ref1

  

  - WebFlux에서 사용하는 reactor프로젝트의 

    Mono는 backPressure도 지원한다.     (RxJava의 single은 지원하지 않음)


    Flux는 RxJava의 observable과 비슷.. 무한개의 데이타를 지원함..(메모리 안쓰니까..)



그리고, RxJava는 foundation Level이고

WebFlux는 Functional Level이라서 당연히 섞어서 쓸 수 있을 것 같다.(아직 미테스트)


spring-boot-start-webflux를 사용하면 웹서버가 tomcat이 아니고 netty네요. (async를 더 잘지원하기 때문)




utube-REF


(16:00)



(26:00)


                                                                                                                                   or Netty or UnderTow





Spring Web Flux - utubeRef




Posted by yongary
,

microService의 장단점

IT 2017. 10. 30. 22:25

REF


서비스를 잘게 쪼개서 별도의 서비스들로 만들고

서비스들간에 REST등의 방식으로 통신을 하게 하는 방식인데


이로인한, 장단점이 명확하다.



Posted by yongary
,

일반적으로 recursion(재귀함수)가 stack를 많이 사용하므로, 

tail recursion을 통해 stack을 적게 사용하는 방법이 좋다. 


간단한 factorial을 예로 든다면.. REF


int Factorial(int n)

{

return FactorialTail(n, 1);

}

int FactorialTail(int n, int acc)    // acc : accumulator의 약자

{

if (n == 1) return acc;

return FactorialTail(n - 1, acc * n);    //  일반 재귀에서의 n * Factorial(n-1)와 달리 반환값에서 추가 연산을 필요로 하지 않음

}




출처: http://bozeury.tistory.com/entry/꼬리-재귀-최적화Tail-Recursion [따..딱히 공부하려고 포스팅하는 건 아니니까..!]



하지만 java에서는 아직 tail recursion Optimization이 지원되지 않는다.

이유는 security등 각종 jdk코드에서 stack을 count한다던지,

 하는 이유때문이라고 하는데

자세한 내용은 여기: REF

Posted by yongary
,

Akka & actor

network개발 2017. 10. 17. 16:46

actor : ref

 

   -actor는 독립적인 경량프로세스이다. (메시지는 큐를 이용해 처리한다)

   -서로 독립적이고 actor간 통신은 비동기로 이루어지기 때문에 multi-thread환경에서 락등이 발생하지 않는다.

   ( scala로 개발되어 있으며, java용 API도 제공한다. )

  


akka

  - actor모델을 통해서 병렬처리를 할 수 있게 해준다.

  - RPC이므로, remote에 있는 actor를 local actor처럼 사용할 수 있다.

  


UntypedActor를 상속받을 경우   onReceive함수를 구현해야 한다.

Actor생성은 Actors.actorOf()로 생성.  

Posted by yongary
,

AWS Redshift

SDN,cloud,Puppet 2017. 10. 17. 16:18

REF


AWS에서 제공하는 대용량 관계형 data-warehouse 서비스.



Posted by yongary
,

ELK Stack

ElasticSearch 2017. 10. 17. 16:16

공식사이트: elastic.co

REF


기본적으로 elasticSearch가 근간인데

elasticSearch를  DB와 비교해서 가장 큰 차이점을 생각해 보면


   1. 속도가 빠르다.. DB는 B-tree인데 elastic은 hash를 사용.
       (물론 No-SQL DB중에는 redis등과 같이 hash사용하는 애들 있죠..)


   2. Fuzzy개념이 있다.
       (DB에서는 정확하게 입력한 query에 대한 결과가 나오지만,  

        elastic은 검색엔진 기반이다 보니,   Fuzzy하게 혹은 가중치있게 검색할 수 있다.. 적당히 알아서 유사한 것들이 검색된다) 



==============================================


elasticSearch에 data를 넣고,

kibana를 통해 그래프 형태로 조회 한다.


Logstash는 elasticSearch에 data를 대용량으로 넣을때 주로 사용한다.



<ElasticSearch>

키워드 : doc1, doc2 이러한 식으로 저장이 됨.  O(1)의 HashTable이라고 생각하면 됨. 

     ==> 따라서 search가 매우 빠름. (redis와 


Index - db (RDB용어)

Type - table

document - row

Mapping -scema


(실습)

$curl -XGET http://localhost:9200/classes
                                                         +  /class/1 -d  someData

$curl -XPUT localhost:9200/classes    (Update명령이지만, index생성시에는 PUT을 사용함)

                      

$curl -XPOST localhost:9200/classes/class/1 -d  @json파일          (INSERT) 
                                                             document생성은 POST로 하면 index와 함께 생성되기도 함.


?pretty : 이쁘게 출력해 줌.


    - geo_point같은 data를 type 매핑해주면 geo data로 관리가 되서, kibana 지도에서 쉽게 표시 가능.
    - 


<Kibana>

Discover메뉴 - 필드별 조회/검색 등.

Visualize에서 x 축 y축 고르면 쉽게 그래프로 표시할 수 있으며, 해당 링크만 이용할 수 있음.



<logstash>

 - (CSV)file, mySql, mongoDB, ActiveMQ등 data들을 포맷을 바꿔 elasticSearch에 넣을 수 있음.

 - .conf 파일을 이용함.  $sudo ./logstash -f logstash.conf 
          ( input  / filter / output을 지정. output을 주로 elasticSearch로 함 -  유투브 ELK스택 강의 18강 참고.



               


 






Posted by yongary
,

Q 1개를 main으로 하고, 임시 Q 하나를 더 이용해서

stack을 구현. 항상 Q를 다 비우고 꺼꾸로 즉(stack pop 대비순서)로 넣어 놓음.

REF

 

Queue<Integer> q = new LinkedList<Integer>();
Queue<Integer> tmp = new LinkedList<Integer>();


public void push(int d) {
    if (q.size() == 0) {
        q.add(d);
    }else {
        //deque q->tmp
        while (q.size() > 0) {
            tmp.add( q.poll() );
        }

        q.add(d);

        //tmp->q
        while (tmp.size() > 0 ){
            q.add(tmp.poll());
        }

    }
}

public Integer pop(){
    return q.poll();   //poll returns null,  while remove throws exception.
}

 

Posted by yongary
,

java 9 특징

java8~ 2017. 10. 12. 22:22

 REF1(KOR)     REF2(ENG)



AoT (Ahead of Time)컴파일러 도입.  안드로이드에선 이미  ART라는 이름으로 사용되고 있었으나 JDK에선 처음도입

  - application의 startup time 감소.


알파베틱 String을 1byte로 처리해서 메모리효율 + GC문제 감소


Modularity (Jigsaw프로젝트)

  - 키워드 module 을 package처럼 사용.. package 보단 밑.

  - 참고: 이 기능 때문에 기존코드 migration을 위해, java9에서만 한시적으로 illegal reflective access를 제공.


JShell (REPL : Real-Eval-Print-Loop) 제공.. shell에서 바로 문법테스트 등 가능



immutable Map/List/Set용 .of 함수 제공  (Guava좀 들 쓰겠군요)

Flow class (for Reactive) 제공 + CompletableFuture에 delayedExecute추가  (RxJava좀 들 쓰겠군요)


Stream API에  4개 API 추가

  -  takeWhile

  -  dropWhile

  

CodeCache 향상 - code cache가 segment단위로 되도록 함

JavaScript 서포트 향상 - Project Nashorn의 ECMAScript parser API추가


Optional::stream 추가.  

ProcessHandle class추가

Try with Resource 향상





----기타----  

Applet 제거

Http2 Client

Html5 Unicode지원 향상

Java platform Logging API & Service ?

Javadoc search? 


Posted by yongary
,