Yarn 기반에서 Flink 클러스터를 기동하려고 했는데 다음과 같은 오류가 발생했다. 구글링을 해보니 중국어 사이트에서 해결방법을 찾았다. $ ./bin/yarn-session.sh --detached ..생략.. java.lang.NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?] at java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:1..
flink 에서는 create table like 구분이 있어서, 필드가 동일한 필드를 상속받듯이 필드선언을 할 수 있다. 하지만 alter table 에 대한 document 를 확인해보면, 테이블의 이름과 테이블 속성값만 바꿀수 있다. https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/alter/#alter-table 재밌는건, table api 에는 addColumns, AddOrReplaceColumns, DropColumns 가 지원되지만, sql 로는 이걸 사용할수 없다는점이다. 그럼 flink 에서 sql 로 필드를 변경하는 방법은 정말 방법이 없을까? https://nightlies.apache.org/flink..
High-Availabily 를 이용하기 위해서 다음과 같이 설정을 하고 YARN 에서 클러스터를 구성하면 이상하게 1개 이상의 클러스터를 띄울수 없어서 삽질하게된 후기를 알려주고자 한다. Flink 의 주키퍼를 이용한 HA 쿠퍼네티스는 configMap 을 이용해서 HA 의 정보를 전달하지만, 일반적인 케이스에서는 Zookeeper를 이용해서 HA를 구성한다. 문서에서 보면 다음과 같은 예시가 있고 이렇게 설정이 되어야 마스터 노드 하나가 죽었을때, 대기중인 마스터노드가 active로 바뀌고 기존에 실행했던 정보를 이어서 실행할 수 있다. high-availability: zookeeper high-availability.zookeeper.quorum: localhost:2181 high-availab..
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 --..
결론부터 말하면, 이 현상은 checkpoint 관련 설정을 적용하고서 나타난 현상이었다. checkpoint 를 모르는 사람을 위해 간단히 쉽게 설명하면 자동세이브 기능을 생각하면 쉽다. 장애의 복구를 위해 중간중간 상태정보를 주기적으로 남기는 기능을 의미하는데, 이 주기가 도달하기전까지 결과를 지연시키는게 아닌가 싶다. 결과를 보려면? 내가 겼었던 쿼리 결과가 안나오는 현상은 checkpoint 에서 영향을 받았던 케이스 이기 때문에, 해당설정을 잠깐 줄여서 쿼리를 다시 실행하면 해결되었다. 설정을 영구하게 바꿀게 아니다보니 flink-conf.yaml 의 설정을 건드리는게 아니라 sql-client.sh 상에서 "set" 명령을 통해 확인 및 변경하는것이 좋다. (checkpoint 가 너무 자주 ..
문제 다음과 같이 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 파일에 추가하면 해결된다.