Flink 에서 세션모드로 application 이나 sql-client.sh 를 사용하려고 했는데, 이런 오류가 발생했다. 참고로 N대의 세션 클러스터를 기동하기위해 주키퍼 노드 관련 옵션을 추가해서 기동했다. 다음과 같이 기동하면 2개의 컨테이너가 유지되고, 따로 클러스터 유지가 가능하다. 참고로 -z 옵션은 "high-availability.cluster-id" 설정과 연계되는데 이게 기본적으로 yarn 의 application id 로 지정되다보니 데몬은 띄웠는데 어플리케이션이나 sql-client.sh 에서 쿼리 실행할 때 문제가 있다. ./bin/yarn-session.sh --detached -z yarn-flink-001 -nm myFlink01 ./bin/yarn-session.sh --..
문제 다음과 같이 sql-client.sh 상에서 PostgreSQL 을 연동하려고 했는데 다음과 같은 오류가 발생했다. 이건 flink 의 문제가 아니라, PostgreSQL 에서 연결할때 문제가 되는것이다. 가장 손쉬운 해결은 java 옵션을 추가해서 재실행하는것이다. Flink SQL> CREATE CATALOG myDB WITH( > 'type' = 'jdbc', > 'base-url' = 'jdbc:postgresql://127.0.0.1:26257', > 'default-database' = 'mydb', > 'username' = '유저', > 'password' = '암호' > ); [ERROR] Could not execute SQL statement. Reason: javax.net.s..

문제 Flink 에서 기본적으로 제공하는 JDBC Connector 는 Mysql , Derby, PostgreSQL 3개지를 지원한다. 나는 sql-client.sh 를 통해서 쿼리기반으로 데이터를 다루는걸 자주 이용하는데 카탈로그 등록이 되서 바로 테이블을 접근할수 있어 연동하기 좋은데, 문제는 jsonb 타입을 지원하지 않는다. 추가로 내가 발견한 미지원되는 필드타입은 uuid 와 timestampz 필드이다. Flink SQL> describe MyTable; [ERROR] Could not execute SQL statement. Reason: java.lang.UnsupportedOperationException: Doesn't support Postgres type 'jsonb' yet Fl..
오류내용 dbeaver 와 같이 java 기반의 프로그램에서 postgreSQL 에 연결하려고 할때 오류메시지는 조금씩 다르더라도 다음과 같은 Exeption 오류가 난다면 실행할 때 다음과 같이 java 옵션을 주고 실행하면 된다. javax.net.ssl.SSLHandshakeException 해결방법 java 로 실행할 때 다음과 같은 옵션을 추가해서 실행하면 된다. java -Djdk.tls.client.protocols=TLSv1.2 ...생략... 이클립스 계열에서는 ini 파일에 java 실행옵션이 나열되어있는데, dbeaver 라면 dbeaver.ini 파일에 추가하면 해결된다.
개요 희안하게 0건인 결과와 UNION ALL 하는 경우 null 오류가 발생했다. 더 특이했던건 hive client 에서는 쿼리가 성공하는데... jdbc 드라이버를 통하거나 beeline 을 통해서 쿼리를 날릴때만 발생했다는 점이다. (아마 두 설정에 차이가 있던건 아닌가 싶긴하다. Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: NullPointerException null at org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:315) at org.apache.hive.service..
오류내용 hive 에 STRUCT 형으로 필드가 있는 테이블을 JOIN 할 때 나타났던 문제이다. hql의 문법상 문제가 없는데 beeline 에서 뱉는 오류메시지는 다음과 같다. (tez 엔진을 사용했다) INFO : Map 1: 26(+2)/28 Map 5: 337(+33)/370 Map 6: 1(+1)/2 Reducer 3: 0(+0,-415)/377 Reducer 4: 0/208 ERROR : Status: Failed ERROR : Vertex re-running, vertexName=Map 5, vertexId=vertex_1475821062280_208694_1_01 ERROR : Vertex re-running, vertexName=Map 6, vertexId=vertex_147582106..

배치가 주기적으로 돌고 있는데, 분석을 위해 select 를 하게되면 더 골치아프다. 경험상 select 를 주기적으로 하면 락때문에 insert 는 무한히 밀려서 배치작업에 영향을 주기도 한다. 이런일이 자주 일어난다면 select 쿼리에서는 lock 정보를 사용하지 않는것이 정신건강에 좋다. hive lock 안쓰기? 하이브에서 주기적으로 배치가 돌고 있고, 쿼리가 복잡해서 오래 실행되면서 주키퍼에 lock 정보는 쌓였는데, yarn 에서는 작업을 무한대기 하는 상태인 경우가 종종 생긴다. 이럴땐 아예 lock 을 안걸고 쓰는게 안정적인 운영에 도움이 될수 있다. (hive 의 lock 체계는 우리가 주로 쓰는 dbms 의 lock 정책에 비하면 매우 초보적이다) hive> set hive.suppo..
단순히 "select * from 테이블" 형태로 조회하면 결과가 나오는데, 희안하게 "select count(*) from 테이블" 형태로 쿼리를 나오면 0으로 나오는 현상이다. 이 경우 hive 의 통계 자료가 잘못 입력되어있어서 그런 경우가 간혹 생기는 경우가 있다. 결과가 이상한 쿼리 예시 다음과 같이 단순 select 하면 결과가 분명히 나오는데, count(*) 하면 결과가 0으로 나오는것이다. --------------------------- -- 단순 조회를 하면 결과가 나옴 --------------------------- hive> select * from mig.t_my_data; -- 결과가 40 건 출력됨 -- --------------------------- -- count(*)..