Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

인턴기록지

[Druid] SQL ingestion spec - postgresql (postgresql database data) on docker 본문

Druid/Project

[Druid] SQL ingestion spec - postgresql (postgresql database data) on docker

인턴신분현경이 2020. 11. 26. 18:34

Druid version = druid 0.19.0

 

드! 디! 어!

 

postgresql 의 테이블의 데이터를 드루이드에 넣는 것을 할 수 있 게 되 었 다 ~ ~ ~~~

 

개발서버의 도커에서 드루이드를 올려서 사용했다. 드루이드의 bin 파일이 아닌 src 소스 파일을 다운받아서 압축풀고 실행해 주었다. 

 

도커에서 드루이드 실행방법은 밑과 같다.

hklee@dar-dev-01:~/apache-druid-0.20.0-src$ cd distribution/
hklee@dar-dev-01:~/apache-druid-0.20.0-src/distribution$ ls
asf-release-process-guide.md  bin  docker  pom.xml  src
hklee@dar-dev-01:~/apache-druid-0.20.0-src/distribution$ cd docker/
hklee@dar-dev-01:~/apache-druid-0.20.0-src/distribution/docker$ ls
Dockerfile  Dockerfile.java11  Dockerfile.mysql  README.md  docker-compose.yml  druid.sh  environment  storage
hklee@dar-dev-01:~/apache-druid-0.20.0-src/distribution/docker$ docker-c
docker-compose                   docker-credential-secretservice
hklee@dar-dev-01:~/apache-druid-0.20.0-src/distribution/docker$ docker-compose up

드루이드 사용 종료는 docker-compose down !

 

드루이드 실행 시켜 준 후 examples 폴더에 들어있는 내가 짠 bicycl-sql-index.json 파일을 실행시켜준다.

hklee@dar-dev-01:~/apache-druid-0.20.0-src/examples$ ./bin/post-index-task --file quickstart/tutorial/bicycle-sql-test.json --url http://localhost:8081
Beginning indexing data for ewl_bicycle
Task started: index_parallel_ewl_bicycle_bhialakl_2020-11-26T09:02:20.420Z
Task log:     http://localhost:8081/druid/indexer/v1/task/index_parallel_ewl_bicycle_bhialakl_2020-11-26T09:02:20.420Z/log
Task status:  http://localhost:8081/druid/indexer/v1/task/index_parallel_ewl_bicycle_bhialakl_2020-11-26T09:02:20.420Z/status
Task index_parallel_ewl_bicycle_bhialakl_2020-11-26T09:02:20.420Z still running...
Task finished with status: SUCCESS
Completed indexing data for ewl_bicycle. Now loading indexed data onto the cluster...
ewl_bicycle loading complete! You may now query your data

 

감격 ㅠㅠㅠ

드루이드에 잘 올라온 것 확인!

 


이제 초기데이터 7월 31일 까지 넣어줘보자!

 

1. sqls에서 컬럼을 빼올 때 spec dimension 에 적어준 순서대로 적는다.

2. 혹시 모르니 테이블앞에 public.table 붙여주기

{
  "type" : "index_parallel",
  "spec" : {
    "dataSchema" : {
      "dataSource" : "events_log",
      "timestampSpec": {
        "column": "event_time",
        "format": "auto"
      },
      "dimensionsSpec" : {
        "dimensions" : [
          "bcycl_no",
          "station_no",
          "event_type",
          "cleansing_done",
          "cleansing_result",
          "last_update_time"
        ]
      },
      "metricsSpec" : [],
      "granularitySpec" : {
        "type" : "uniform",
        "segmentGranularity" : "month",
        "queryGranularity" : "minute",
        "rollup" : false
      }
    },
    "ioConfig" : {
      "type" : "index_parallel",
      "inputSource": {
        "type": "sql",
        "database": {
          "type": "postgresql",
          "connectorConfig": {
            "connectURI": "jdbc:postgresql://211.238.***.**:****/ewl_hk",
            "user": "hklee",
            "password": "1105"
          }
        },
        "sqls" : ["SELECT event_time, bcycl_no, station_no, event_type, cleansing_done, cleansing_result, last_update_time FROM public.ewl_events_log order by event_time asc"]
      },
      "appendToExisting" : true
    },
    "tuningConfig" : {
      "type" : "index_parallel",
      "maxRowsPerSegment" : 5000000,
      "maxRowsInMemory" : 5000000
    }
  }
}
  

 

응  failed~~~~

 

드루이드 - task - log 를 살펴보았더니 where절의 inline에서 timestamp랑 interval을 못 읽는거 같다.

그래서 드루이드 다큐먼트에 있는 시간 함수들을 사용해서 해 줘야 할 것같다.

 

일단 아무 조건도 걸지 말고 ewl_events_log에 있는 모든 데이터들을 가지고 오려하였다.

응  failed~~~

드루이드 task - logs로 에러 확인해보니 밑과 같은 에러가 남

Terminating due to java.lang.OutOfMemoryError: GC overhead limit exceeded

 

검색해보니 자바 힙이 너무 작아서 생기는 문제라고 한다.

드루이드에서 자바 힙을 늘리는 방법은 

 

apache-druid-0.apache-druid-0.20.0-src/distribution/docker 폴더안의 environment 파일을 수정해준다.

hklee@dar-dev-01:~/apache-druid-0.20.0-src/distribution/docker$ ls
Dockerfile         Dockerfile.mysql  docker-compose.yml  environment
Dockerfile.java11  README.md         druid.sh            storage

druid.apache.org/docs/latest/tutorials/docker.html#configuration

 

Docker · Apache Druid

위의 링크를 따라가면 

  • DRUID_XMX -- set Java Xmx
  • DRUID_XMS -- set Java Xms

위의 변수들을 2g로 바꿔주고 docker-compose up을 해주었다.

 

그랬더니 개발 서버 사-망 ; 


hk-intern2.tistory.com/55

 

[Druid] SQL ingestion

ewl_events_log 테이블의 데이터를 한꺼번에 넣기는 실패해서 나눠서 넣어야 한다. 년도 별로 넣어주자 { "type" : "index_parallel", "spec" : { "dataSchema" : { "dataSource" : "init_events_log", "timestamp..

hk-intern2.tistory.com

↑성공!