본문 바로가기

[Mybatis] Oracle Bind Mismatch 해결하기 오라클 쿼리 수행 순서 Shared pool로 로드: SQL 코드가 분석을 위해 메모리로 로드 구문 분석: SQL 키워드 중 잘못입력된 키워드가 있는지 체크 쿼리 변환: 복잡한 SQL을 동일하고, 단순한 형식으로 변환 최적화(실행 계획 생성): 낮은 비용으로 데이터를 탐색할 수 있도록 의사결정 트리를 추축 실행 파일 생성: SQL 쿼리를 서비스하는 기본 호출과 실행 파일을 생성 행 페치(fetch): 행을 검색하여 데이터 전달 Soft parsing & Hard parsing 오라클에서 쿼리를 수행할때 무조건 위와 같은 쿼리 수행 순서를 따르는 것이 아니다. 오라클이 동일한 쿼리를 수행한다고 판단하면 1번의 단계를 건너 뛴 뒤 작업을 진행하게 되는데, 이를 Soft parsing이라 하고, 1~7의 단계..
[Hadoop] Active Namenode 구하는 법 distcp 나 hadoop fs 같은 하둡 커맨드를 사용할 때 Active Namenode를 통해서 잡을 수행해야 하는데, Active/StandBy 로 Namenode가 구성되면 HA 구성된 Namenode들 중 Active Namenode를 찾아 잡을 수행시켜야 한다. 이번 포스팅은 커버로스 인증이 적용된 하둡 클러스터에서 Active Namenode를 찾아내는 몇가지 방법에 대해 정리해 보고자 한다. 1. shell을 통한 Active Namenode 구하기 //커버로스 인증이 필요할 경우 키탭을 이용하여 커버로스 티켓을 생성한다. $ kinit -kt ${keytab_path} ${principal} $ curl --negotiate -u : http://${namenode_domain}:500..
[Presto] Nginx + Reverse proxy를 이용한 Cache Layer 구축기 현재 Tabluea + Presto + Kudu 를 이용해 BI 플랫폼을 제공하는 프로젝트를 진행중이다. 이때 Tabluea를 통해 매일 일간 지표에 대한 대시보드를 제공하고 있는데, 매번 사용자가 Tabluea에 접속할때마다 Presto 쿼리가 수행되어 대시보드 화면이 늦고, Presto & Kudu의 리소스가 낭비가 되는 문제가 있었다. 이를 해결하기 위해 Presto 앞에 Cache Layer를 하나 두고, 동일한 쿼리를 수행하려고 하면 캐싱된 값을 리턴 할 수 있도록 만들어 보고자 했다. 1. Presto-jdbc의 통신방식 Presto-jdbc를 보다보니, JDBC Driver와 Presto coordinator간에 http로 통신하는 것을 확인하였다. 즉 일반적인 http 캐싱 방식으로 처리하..
[Java] AdoptOpenJdk Installation on CentOS $ sudo -s $ cat
[Nifi] Flowfile 순서보장 삽질기 앞서 몇번의 포스팅에서도 소개했듯, 필자는 현재 Nifi를 통해 RDBMS 데이터를 하둡으로 실시간 복제하기 위하여 사용중이다. Nifi Processor를 설정한 뒤에 데이터를 검증하는 도중 특정 상황에 데이터(flowfile)이 역전되는 현상을 발견하였고 이를 해결하기 위한 내용을 포스팅해보고자한다. 1. Nifi 클러스터 정보 nifi version: 1.10.0 openjdk 1.8 2. 데이터 역전이 발생되는 상황 1) Processor 구성 Custom Processor를 생성하여 주기적으로 특정 테이블에 쿼리를 수행하여 각 row에 대한 flowfile을 생성하고 해당 데이터를 Kafka로 보내고 있다. 그리고 쿼리 수행이 완료되면 CheckPoint를 state에 저장하고 다음 쿼리에 해당..
[Docker] Dockerfile에 Locale 설정 및 KST 시간 적용하기 1. Locale ko_KR로 수정 RUN apt-get update -yqq \ apt-get upgrade -yqq \ apt-get install -yqq --no-install-recommends \ locales RUN localedef -i ko_KR -f UTF-8 ko_KR.UTF-8 ENV LANGUAGE ko_KR.UTF-8 ENV LANG ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 ENV LC_CTYPE ko_KR.UTF-8 ENV LC_MESSAGES ko_KR.UTF-82. KST 시간 설정 ENV TZ=Asia/Seoul RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
[Nifi] Flowfile 중복제거를 위한 DetectDuplicate 사용 및 주의점 필자는 커스텀 프로세서를 통해 DB에서 특정 시간컬럼을 기준으로 데이터를 크롤링하고, 실시간 반영을 위하여 kafka로 전송하는 것을 Nifi를 통해 구현하였다. 이때 내부적 이슈에 의해 DB에서 데이터를 검색하는 쿼리에서 누락이 발생했고, 이를 해결하기 위하여 마지막 동작시간 - 10초 전 데이터를 더 가지고 오도록 함으로서 누락 문제를 해결하였으나, 추가적으로 데이터의 중복이라는 문제를 해결해야 하는 이슈가 있었다. 이번에는 flowfile 중복을 해결할수 있는 DetectDuplicate를 사용하는 방법과 주의할 점에 대해서 이야기 해보도록 하려고 한다. 1. DetectDuplicate의 기본컨셉 DetectDuplicate는 flowfile contents의 hash값을 통하여 기존에 캐시에 존..
[Nifi] Load Balance와 Partition by attribute 삽질기 Nifi 1.8.0 버전부터 Load Balance라는 기능이 생겼다. (자세한 설명은 여기로) 말그대로 flowfile을 적당한 기준에 맞춰 각 노드들로 분산을 시켜준다는것인데, 직관적인 이름이기 때문에 이해하기 어렵지 않다. 1. Load Balance 종류 Do Not load balance(기본값): 로드 밸런스를 사용하지 않음 Partition by attribute : Flowfile의 특정 attribute를 통해서 로드 밸런싱 함 Round robin: Nifi 클러스터를 구성하는 노드에 순차적으로 분산시킴 Single Node: 하나의 Nifi 노드로만 보냄 테스트 클러스터 : 3 Nodes GenerateFlowFile(Primary Node Only) : 테스트용 Flowfile 생성..