배치가 주기적으로 돌고 있는데, 분석을 위해 select 를 하게되면 더 골치아프다. 경험상 select 를 주기적으로 하면 락때문에 insert 는 무한히 밀려서 배치작업에 영향을 주기도 한다. 이런일이 자주 일어난다면 select 쿼리에서는 lock 정보를 사용하지 않는것이 정신건강에 좋다. hive lock 안쓰기? 하이브에서 주기적으로 배치가 돌고 있고, 쿼리가 복잡해서 오래 실행되면서 주키퍼에 lock 정보는 쌓였는데, yarn 에서는 작업을 무한대기 하는 상태인 경우가 종종 생긴다. 이럴땐 아예 lock 을 안걸고 쓰는게 안정적인 운영에 도움이 될수 있다. (hive 의 lock 체계는 우리가 주로 쓰는 dbms 의 lock 정책에 비하면 매우 초보적이다) hive> set hive.suppo..
하둡을 사용하다보면 디스크 사용량이 70%를 넘어서기 시작하면 장애가 생기는 경우가 은근히 많다. 그리고, 클러스터의 모니터링 알람같은걸 해두면 알람도 많이 오기 때문에 물리적인 디스크 공간을 확보해야 할 필요가 있다. 이때 가장 먼저 삭제시도할 폴더는 HDFS 의 휴지통 공간이다. 휴지통 용량 확인 & 비우기 다음과 같이 hdfs 의 .Trash 를 확인해보면 그 용량이 꽤 무시못한다. 참고로, "hadoop fs -rm -f " 형태로 지우면, 바로 삭제되는게 아니라 .Trash 폴더로 옮겨지고 특정 기간이 지나면 삭제되는 구조다. 그래서 보통 데이터 마이그레이션과 같이 파일을 많이 복사하고 삭제하는게 반복되면 생각보다 여기에 쌓이는 공간이 꽤 크다. 그래서 hdfs 공간이 부족하면 일단 응급처치(?..
단순히 "select * from 테이블" 형태로 조회하면 결과가 나오는데, 희안하게 "select count(*) from 테이블" 형태로 쿼리를 나오면 0으로 나오는 현상이다. 이 경우 hive 의 통계 자료가 잘못 입력되어있어서 그런 경우가 간혹 생기는 경우가 있다. 결과가 이상한 쿼리 예시 다음과 같이 단순 select 하면 결과가 분명히 나오는데, count(*) 하면 결과가 0으로 나오는것이다. --------------------------- -- 단순 조회를 하면 결과가 나옴 --------------------------- hive> select * from mig.t_my_data; -- 결과가 40 건 출력됨 -- --------------------------- -- count(*)..
Kafka 의 토픽에 있는 데이터를 실시간성으로 데이터 집계 하기위해서는 Kafka Streams 를 많이 사용한다. 사용하기도 쉬운편이고, 카프카에만 의존되다보니 사실상 카프카만 세팅되어있다면 바로 활용가능하다. 하지만, 스트림 처리에서는 배치에는 없는 개념이 많다보니 의도하지 않은 형태로 결과가 나올때 가 많다. 결과가 반복되는 현상 스트림데이터는 무한의 데이터이다. 그래서 분석을 위해 어떤 시간기준으로 잘라서 집계를 하고 이걸 저장해서 분석하는게 일반적이다. 예를 들어, 1시간 윈도우로 단어 갯수를 샌다고 할때 나는 01:00~02:00 의 최종결과인 알파카 3(붉은색) 결과만 출력하고 싶은데, 중간 합계 결과인 (알파카 1), (알파카2) 가 같이 나오는 문제가 골치아픈 경우가 있다. 왜냐면, K..
hive 는 다양한 파일포맷과 스토리지 핸들러를 통해 hdfs 가 아닌 es 나 kafka 같은 외부 스토리지의 연결도 가능하게 해준다. 그래서 테이블이 어떤 파티션 정책을 갖고 있고 어떤 파일포맷이고 어떤 스토리지 핸들러를 쓰는지 확인해보고 싶은 경우가 생긴다. 특히 딴사람이 만든 테이블이라서 분석이 필요한 경우 더 그런듯 테이블 선언문(DDL) 확인 "show create table 테이블명" 을 하면 테이블 생성할때의 명령을 확인할 수 있다. 이러면 스키마 정보나, SERDE 정보 그리고 어떤 파일포맷과 압축정책을 썼는지 까지 쉽게 확인이 가능하다. 하지만, 코멘트가 한글일 경우 다음과 같이 깨져서 보이는게 조금 아쉽다. 꼭, 코멘트를 확인하고 싶다면 describe 명령을 이용해서 확인하면 가능하..
flink 에서 Kafka 의 데이터를 hdfs 에 Sink 테스트하는데 이상하게 inprogress 파일형태로 중간파일만 생성하고, 최종적으로 flush 가 안되는 상황으로 삽질했었는데, 결론부터 말하면 checkpoint 를 설정해야 한다. Kafka to HDFS 예제 kafka 의 토픽을 hdfs 의 avro 파일포맷으로 sink 하는 예제이고, 날짜, 시간 필드를 파티션으로 지정해서 폴더별로 저장되게 하는 실제로 자주 사용하는 심플한 패턴이다. 그런데 문제는 파일이 생성은 되는거 같은데... 하루가 지나도 파일을 최종 flush 처리 하지 않는느낌이다. ----------------------- -- source ----------------------- CREATE TABLE KafkaUser..
Flink 에서 Hive Connector 를 연동해서, 카탈로그에 등록하면 hive 의 데이터를 조회해볼 수 있다. 기본적으로는 flink 의 taskManager 의 슬롯안에서 데이터를 처리하기 때문에 (즉, M/R 이나 TEZ 엔진이 도는 yarn 기반아닌) 여유있는 슬롯보다 더 큰 슬롯요청을 하게되면 조회가 안되는 상황이 발생될 수 있다. 현상 : flink에서 hive 테이블 조회가 안되는 현상 결론부터 말하면, 나같은 경우는 hive 테이블을 조회하기 위해서 taskManager 의 슬롯이 50개나 요청되었는데, 실제 가용가능한 슬롯은 2개밖에 없어서 나타난 현상이었다. 명시적으로 쿼리 에러가 났으면 빨리 찾았을텐데... 다음과 같이 쿼리 요청했는데 기냥 대기상태로 있고 에러가 바로 나타나지 ..
Flink 에서 sql-client.sh 에서 쿼리기반으로 데이터를 가공하고, 저장(sink) 할 수 있다. 일반적으로 sink 용으로 많이 사용하는 스토리지는 hive 거나 elasticsearch 가 아닐까 싶다. 추가될 라이브러리는 "$FLINK_HOME/lib" 하위에 jar 파일을 복사하고 실행해야 한다. 필요한 라이브러리 세팅 flink 에 hive 를 연동하려면 hive 버전에 따라서 필요한 라이브러리가 다르다. 내가 사용하는 hive 의 버전은 2.3.6 이었기 때문에 다음과 같이 필요한 라이브러리를 다운로드 받아서 사용했다. 참고로, 라이브러리들은 "$FLINK_HOME/lib" 하위에 복사하면 된다. 만약, hive 버전이 다른걸 쓴다면 flink document 에서 필요한 의존파일을..