kubernetes 환경에서 최초 pod 를 구성할때 동작여부나 로그를 확인하기위해서 exec 명령을 이용해 POD 안에 들어가서 확인해야 하는 경우가 많다. 나 같은 경우는 airflow 의 pod_template 을 구성하고 그 안에서 하둡 연동을 하는데 잘 되는지 확인하기위한 용도로 1시간 정도 sleep 을 걸어두고 안에 들어가서 확인하는걸 종종했는데... 무한루프로 걸면 리소스를 점유하고 있을거라 1시간 정도로 짧게 잡았더니 Completed 되어있는데... 이걸 다시 실행시키고 다시 exe 명령으로 접근하고 싶은 상황이었다. POD 재실행 방법기본적으로 kubectl 명령에서 pod 를 재실행하는 명령어는 없다고 한다.다만, 아래와 같이 pod 의 yaml 을 출력해서 이걸 기반으로 다시 띄우..
kinit 을 통해서 커버로스 인증을 했고, hadoop 의 ls 명령으로 hdfs 파일 목록도 조회가 가능했는데...특이하게 kubernetes pod 안에서 beeline 을 통해 호출하면 다음과 같은 오류가 발생했다. 동일한 방법으로 물리서버에서 테스트하면 잘 되는데, kubernetes 환경에서 뜬 pod 안에서만 문제가 되는 상황이었다.$ beeline -u "jdbc:hive2://my-hadoop-002.com:10000/default;principal=hive/_HOST@MYHOME.COM" -e 'show databases'...24/04/30 10:52:52 [main]: ERROR transport.TSaslTransport: SASL negotiation failurejavax.se..
docker 에서 테스트할때는 이미지를 pull 하거나 실행될때 바로 화면에 상황이 출력되다보니 에러가 났을때 상대적으로 추적이 쉬웠던거 같다. 하지만 kubernetes 환경에서는 케이스별로 확인 방법이 다르다. ContainerCreating 일때 확인방법kubectl get pods 명령어로 ContainerCreateing 에서 Running 으로 넘어가지 않았을때는 log 확인이 안되다보니 좀 답답할때가 있다. 참고로 이 메시지에서 실패가 난다면 보통은 docker image 를 가져오는 로그인 정보가 잘못되었을 확률이 크다.$ kubectl get podsNAME READY STATUS RESTARTS ..
private docker registry 를 사용할 경우 로그인 정보를 넣어줘야한다. docker 라면 docker login 명령으로 해결이 가능하다. 그런데 쿠버네티스 환경에서는 어떻게 로그인 정보를 넣어야 하는지 기억이 안날때가 있다. $ docker login Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. Username: 아이디 Password: 암호 Login Succeeded! 해결방법 쿠버네티스에서는 시크릿에 로그인 정보를 등록해서 관리가 가능하다. pod 혹은 deployment 를 생성하고 로그인 정보가 없으면 ImagePullBackOff 가 나올수 있다. 이때는 아래와 같이 시크릿에 도커..
도커 컨테이너로 빌드한 결과를 만들기위해서 jib 를 사용하는데 플러그인을 써서 사용하려는데 오류가 발생되었다. https://plugins.gradle.org/plugin/com.google.cloud.tools.jib/3.3.1 Execution failed for task ':compileKotlin'. > Could not resolve all files for configuration ':compileClasspath'. > Could not find com.google.cloud.tools:jib-gradle-plugin:3.3.1. Required by: project : Possible solution: - Declare repository providing the artifact, see..
도커 이미지로 만들기위해 jib 의존성도 존재하는데, jar 로 빌드하기위해 build 하는데 아래와 같은 오류가 발생된다. 재밌는건, 내 로컬 PC 나 다른 서버에서 빌드할땐 아무런 문제가 없는데 jenkins 서버쪽에서만 나타나는 문제였다. 둘다 jdk 1.8 이었고 다른점은 gradle 버전이 다르다는것이었다. jenkins 쪽은 gradle_6.9.2 이었고, 수동으로 빌드하던 gradle 버전은 7.5 라는것 정도가 달랐다. FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project '프로젝트명'. > Could not resolve all artifacts for co..
복잡한 스키마를 비슷한 목적에 맞게 그룹핑하고 관리하기 위해서 struct 로 필드를 관리할 필요성이 생긴다. 이런 작업은 보통 스키마레지스트리를 통해 관리하고, 데이터를 가공해서 적재할때 default 값에서 일부값만 변경하여 재적재 하고 싶은 경우가 생길수 있다. 하지만 struct 에서 일부값만 바꾸는 기능이 없다. 그래서 개밥먹기로 만들어서 구현했다. hive 3.x 버전 기준으로 빌드했고 hive 4.x 에서도 동작하는데는 큰 무리가 없을것으로 보인다. GenericUDF 를 만들면서 삽질기 사실 처음에 struct 의 리턴값을 List 형태로 만들면 named_struct 함수로 테스트할때 잘 동작했는데, orc 포맷의 테이블에서 사용할때는 내부적으로 OrcStruct 클래스를 사용해서 만들어..
hive 4.x 부터 array 를 다루는 UDF 가 기본 포함되었다. array 에서 특정아이템을 빼거나, 합치거나 이런 기능을 기본적으로 사용가능하다는건데 문제는 azure 도 그렇고 아직 hive 3.x 에 하둡 3.x 버전대가 주류를 이루고 있어서 기본적으로 사용을 못하는게 함정이다. 다행히 github 에 있는 hive 4.x 에서 array 를 다루는 udf 클래스만 추출해서 빌드한걸 테스트해보니 hive 3 버전대에서도 문제없이 동작하는걸 확인했다. 빌드 / 다운로드 UDF 를 빌드하는 방법은 Azure 도큐먼트에 잘 정리되어있다. 나는 이 글을 참고하고 github 에서 관련된 udf 만 추출해서 빌드를 했다. https://learn.microsoft.com/ko-kr/azure/hdin..