pip install sasl 을 설치하는데 아래와 같은 오류가 발생했다. 이 문제를 해결하려면 gcc-c++ 을 설치하면 해결된다. .... #0 0.969 creating build/temp.linux-aarch64-2.7 #0 0.969 creating build/temp.linux-aarch64-2.7/sasl #0 0.969 gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pi..
PyHive 모듈을 테스트하려고 sasl 모듈을 설치하는데 아래와 같은 오류가 발생했다. 이런 이유가 나는건 Python 라이브러리중 일부는 직접 빌드를 해야하기 때문에 gcc 같은 컴파일도구가 존재해야 하거나, 의존된 c 라이브러리가 있어야 설치되는 경우가 종종 있다. 하지만 여기서 나온 에러는 python devel 패키지가 없기 때문이고 이를 설치해주면 된다. fatal error: Python.h: No such file or directory $ pip install sasl==0.3.1 Collecting sasl==0.3.1 Using cached sasl-0.3.1.tar.gz (44 kB) Preparing metadata (setup.py) ... done Requirement alre..
airflow 에서는 WebHdfsSensor 라는게 존재해서, api 를 통해 특정파일이 존재하는지 체크하고 loop 를 돌면서 체크하는 방법이 존재한다. 그렇다면 간단하게 쉘스크립트로 특정 파일이 생겼는지 확인하는 방법은 없을까? 결론부터 말하면 hadoop 명령어에 파일 존재여부를 테스트하는 명령어가 존재한다. 아래와 같이 명령하면 exit 코드가 0일 경우는 파일이 존재하지만, 그 이외에는 파일을 찾을수 없다는 의미가 된다. 하지만, 파일이 생성될때까지 sleep 하면서 기다리는 방법은 없을까? hadoop fs -test -f hdfs 파일 생성여부 대기하기 위 방법을 응용하면, loop 를 돌리고 파일이 존재할때까지 sleep 을 주면서 주기적으로 체크하는것이 가능해진다. 이러면 특정 HDFS..
hive 테이블의 경우, 파일포맷(text, parquet, rcfile, sequence, orc) 별로 테이블을 선언하는 쿼리가 조금씩 차이가 있어서 create table 하는 방법과, 테이블의 파일포맷별 압축 알고리즘(gzip or zlib, snappy)을 선택하는 방법이 달라서 정리한 문서이다. (옛날에 방치된 내 블로그에 정리한글인데 옮겨옴) 1. text 파일 아래와 같이 text 파일 포맷을 사용하는 Hive 테이블을 만들때는 특별히 선언할것은 없다. 단, 압축을 하기위해서 압축알고리즘을 지정하는 방법은 SET 을 통해 환경변수로 변경후 insert 를 하면 된다. create table tb_text ( ymd String, tag String, cnt int ) ROW FORMAT D..
MySQL 인스턴스를 받아서 Airflow 를 연동해보는 아래와 같은 오류가 발생했다. 참고로 이 오류는 MySQL 가 group-replication 으로 세팅되어있을때 나타나는 현상이다. 구글링을 해보면 이 오류의 일반적인 케이스는 PKEY 를 지정안한 Table 을 사용할때 나타난 문제였지만, 나는 이 문제가 아니라 "FOREIGN KEY ... REFERENCES .. ON DELETE CASCADE" 제약조건이 Airflow 에서 자동생성되는 테이블에 존재했기 때문에 나타난 문제였다. 그 원인과 해결방법을 알아보도록 하자. sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (3098, 'The table does not comply wi..
MySQL 5.x 버전대에서 MySQL 8.x 버전대로 바뀌면서, yum 에서 MySQL 5.x 를 삭제하고, MySQL 8.x 버전을 재설치후 mysql 명령으로 접근이 가능한걸 확인후, airflow db init 을 했더니 아래와 같은 오류가 발생했다. 인터넷에서는 caching_sha2_password 에서 mysql_native_password 로 구성을 바꾸라는게 대부분의 답변이었는데, 나는 내가 dbms 를 설치한게 아니라 담당자한테 인스턴스만 제공받고 root 권한이 없는 상황이라 인프라 환경을 바꾸지 않고 해결가능한 방법이 있는지 삽질을 했고 결국은 그 원인을 찾아냈다. (py3) bash-4.2$ airflow db init [2023-04-25 11:03:35,548] {setting..
보통은 데이터를 pull 해오는 케이스가 많은데, 어짜다보니 데이터를 각 서버로 push 해줘야하는 상황이 생겼다. 쉽게 생각해서 1개의 서버에서 다른 서버에 데이터를 쏴주는 상황을 생각하면 된다. 인터넷에 보면 Xinetd 패키지가 필요하다고 설명되어있는데 내가 테스트해본 결과 이 패키지는 필요없었고, rsyncd 데몬만 서비스로 띄우면 잘 동작했다. 내가 이게 필요했던 이유는, airflow 의 DAG 를 여러 서버에 동기화 해주는 과정이 필요했기 때문이다. 설정방법 모든 서버에 /etc/rsyncd.conf 설정파일과 rsyncd 데몬이 떠있는지 체크해야한다. rsync 를 통해 업로드를 하는것이므로, read only 는 no 가 되어야한다. 그리고 업로드할 경로를 path 에 지정하고, hos..
RabbitMQ 최신버전을 설치하기위해 Erlang 부터 설치해야 하는 상황인데 yum 기본버전의 erlang 을 설치하면 버전이 낮아서 설치가 안되는 문제가 발생된었다. 그래서 어쩔수 없이 직접 rpm 패키지를 다운로드 받아서 설치하는데 다음과 같은 오류가 발생했다. 결과적으로 이 오류가 나는 이유는 unixODBC 관련 라이브러리와 의존성이 존재하기 때문이다. warning: esl-erlang_23.3.4.5-1centos7_amd64.rpm: Header V4 RSA/SHA512 Signature, key ID a14f4fca: NOKEY error: Failed dependencies: libodbc.so.2()(64bit) is needed by esl-erlang-23.3.4.5-1.x86_..