airflow 2.x 부터 롤기반으로 권한관리가 일어나고, 이에 따른 퍼미션 권한이 존재한다.그런데 이게 어떤걸 의미하는건지 잘 정리가 안되서 간단히 정리하고자한다. 1. can read on DAGsDAG 를 볼 수 있는지 여부를 의미한다.리스트에 나와서 어떤 DAGS 가 있는지 조회된다의 의미일뿐 실행이나 해제같은 동작은 안된다. (진짜 목록에만 보일뿐 할 수 있는게 없음) DAG 별로 따로 수동으로 관리하고, 기본적으로 조회가 안되게 하려면 이 옵션을 제거해주도록 하자.그러면 아래와 같이 기본적으로는 DAGS 의 목록이 조회되지 않는다.특정 DAG 만 조회 가능하게 하려면 "can read on DAG: " 형태로 부여하는것도 가능하다. 2. can edit on DAGsDAG 의 목록이 보이고,..
helm template 명령어로 확인하려고 했는데 아래와 같이 알수 없는 오류가 발생했다.결론부터 말하면, range 하위에 include 를 썼는데 이때 영향을 받았던 문제였다.Error: render error in "...deployment.yaml": template: ...deployment.yaml:81:16: executing "...deployment.yaml" at : error calling include: template: sample/templates/_helpers.tpl:166:8: executing "sample.kerberos" at : error calling include: template: sample/templates/_helpers.tpl:100:25: execu..
kubernetes pod 를 구성하다보면 복잡한 쉘스크립트를 실행하는 컨테이너를 만들고 싶은 경우가 있다.하지만, 실행명령을 여러줄로 쪼개서 선언하는 패턴만 보여서 기냥 쉘스크립트를 configMap 에 넣고 볼륨마운트 하거나, 쉘스크립트를 볼륨에 넣어서 실행할까? 고민을 하는데 그렇게 하지 않고 바로 선언하는것도 가능하다. 구성예시가장 심플하게 alpine 이미지로 카운트 다운하는 쉘스크립트를 표현하고 싶다고 가정하겠다.apiVersion: v1kind: Podmetadata: name: sample-multiline-shellscriptspec: restartPolicy: OnFailure containers: - name: run image: alpine:latest ..
json 문자열을 complex data types 으로 바꿔줄 수 있는 유용한 함수이다.이게 유용한게 GET_JSON_OBJECT 으로 데이터를 찾아서, 묶어낼때 정규식을 써서 해결해야하는걸 데이터 타입을 바꿔서 쉽게 해결할수 있는 경우가 존재한다. brickhoust 의 from_json 함수와 같은 기능을 한다고 보면 된다. 2024.01.18 - [데이터처리/Hive] - [HIVE] JSON 을 다루는 함수 설명 & 예시 - brickhouse UDF json_read 가 유용할 때?hive 3.x 에서는 json_read 함수가 없다보니, 아래와 같이 json 결과가 몇건인지 혹은 데이터를 구분자로 묶어야 할때 처리가 매우 난감하다. 왜냐면 아래와 같이 문자열 [] 가 있고, 문자열에는 ""..
hive 4.x 버전에서 유용한 함수들이 많이 추가되었다. 그중 유용한 함수가 있어 몇가지 소개하고자 한다.UniqueCount , Count Distinct 를 구할때 속도가 많이 느린 문제가 있다. PageCount 같은 경우는 단순히 count 하면 되지만, UserCount 를 할때는 중복 접속한 사람을 제거해야하는 문제인데, 문제는 이런 값을 구하는 속도가 너무 오래걸린다. 그래서 HyperHyperLog 알고리즘을 이용하여 빠르게 구하는 함수가 존재하는데, presto 에는 존재했는데 hive 에는 없어서 이 값을 구하려면 매우 오래걸렸다. (참고로 approx_distinct 는 근사치를 구하긴 하지만 정확도대비 성능을 보면 무조건 써야할 경우가 많다) https://github.com/a..
helm chart 2.x 버전에서 "파일경로"에서 볼륨마운트 경로를 유도하기위해서 파일경로만 추출하는 필요성이 생겼다.파일경로가 필요했던 이유는 볼륨마운트할 경로를 유도해야했다. 그럼 어떻게 유도할 수 있을까? /opt/airflow/template/subject-template.template 1. 파일경로만 추출하기다음과 같이 helm chart 를 구성하면 파일명을 제거한 "/opt/airflow/template" 값을 유도할 수 있다.split 한 이후, list 의 마지막값을 제외한 배열을 만들어 합치는 형태로 해결했다.{{- $my_path := "/opt/airflow/template/subject-template.template" -}}{{- $token := splitList "/" ..
helm chart 2.x 에서 작업을 했는데, 외부파일에 있는 값을 로딩해서 dict 로 만들고 싶었다.사실 바인딩될 값은 values.yaml 에 정의해서 쓰는게 자연스러운데, 왜 이런 방법이 필요했냐하면 airflow 의 수많은 설정값을 values.yaml 에 선언하게 하는건 너무 장황했다. (너무 많기도 하고)하지만, executor 타입이나 kerberos 인증 여부에 따라 선언되어야할 pod 구성이 다르기 때문에 조건분기를 해야했고 이를 위해서는 dict 로 로딩해서 사용해야 하는 방법이 필요했다. 1. File 을 읽어서 dict 로 만들기우선 로딩할 파일은 configs/{.Values.profile}/airflow-config.yaml 에 존재한다고 가정했다.여기서 가장 핵습은 key..
helm chart 를 이용해서 구성하다보면, 환경설정을 파일로 따로 관리하고 이를 로딩하고 싶은 경우가 종종있다.실제 등록될 kubernetes yaml 의 구성은 configMap 기반으로 하고, 환경설정값에 따라 다른 파일을 include 하고 싶은 경우... 파일을 include 하기아래와 같이 파일을 분리하고, 이를 configMap 에서 로딩한다는 가정을 해보겠다.공통된 설정값은 ConfigMap 에 정의하고, 환경별로 다른 설정만 따로 관리한다는 개념이다. apiVersion: v1kind: ConfigMapmetadata: name: airflow-variable namespace: airflow-{{ .Values.profile }}data: AIRFLOW__CORE__DEFAUL..